일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 안드로이드 레트로핏 사용법
- rxjava cold observable
- 안드로이드 os 구조
- 서비스 vs 쓰레드
- 객체
- 스택 큐 차이
- rxjava disposable
- ANR이란
- 안드로이드 유닛 테스트
- android retrofit login
- 스택 자바 코드
- android ar 개발
- 자바 다형성
- 플러터 설치 2022
- Rxjava Observable
- 안드로이드 유닛테스트란
- 안드로이드 라이선스
- 2022 플러터 안드로이드 스튜디오
- ar vr 차이
- 서비스 쓰레드 차이
- 클래스
- 안드로이드 레트로핏 crud
- 안드로이드 유닛 테스트 예시
- jvm이란
- 멤버변수
- 안드로이드 라이선스 종류
- jvm 작동 원리
- 큐 자바 코드
- 2022 플러터 설치
- rxjava hot observable
- Today
- Total
목록Android (402)
나만을 위한 블로그

앱을 만들다 보면 언젠간 액티비티로는 부족하거나 액티비티까지 쓰긴 애매한데 싶은 화면을 구현해야 할 수 있다. 이 때 쓸 수 있는 게 프래그먼트다. 사실 프래그먼트는 DrawerLayout, 뷰페이저, 바텀 시트 등을 구현할 때 요긴하게 사용할 수 있고, 프래그먼트를 써서 구현한 예제들도 검색해보면 심심찮게 볼 수 있다. 뷰페이저의 경우 아예 프래그먼트를 써서 구현한 예시 코드를 제시하는 디벨로퍼 문서도 볼 수 있다. https://developer.android.com/develop/ui/views/animations/screen-slide?hl=ko ViewPager로 프래그먼트 간 슬라이드 | Views | Android Developers 이 페이지는 Cloud Translation API를 통해..

안드로이드의 테스트는 크게 비즈니스 로직을 검증하는 단위 테스트, 안드로이드 API를 같이 사용해 UI와의 상호작용도 같이 검증하는 계측(Instrumented) 테스트의 2가지로 나뉘어진다. 이 글을 찾아온 사람이라면 이미 아는 내용이라 생각되지만, 안드로이드 기준으로 두 테스트의 차이를 간략하게 적으면 아래와 같다. 단위 테스트 : 순수 자바 / 코틀린으로 구성된 함수, 클래스 등을 테스트함. JUnit, Kotest, hamcrest 등을 써서 구성할 수 있음 계측 테스트 : 에뮬레이터, 실기기에서 작동하는 테스트. 네이티브 UI 테스트는 espresso, 웹뷰의 UI 테스트는 espresso-web을 써서 테스트 작성. 필요 시 JUnit의 일부 기능을 같이 쓸 수 있음 안드로이드의 비즈니스 로직..

※ 이 글의 코드들은 모두 예시기 때문에 실제로 사용하려면 반드시 리팩토링 후 사용한다 안드로이드 14에서 미디어 접근 권한이 또 변경됐다. 작작 바뀌어라 진짜 어쩔 수 없다. 안드로이드 14에 맞춰 대응하려면 다시 공식문서 뒤적거리면서 뭔 소린지 애써 이해하고, 예시 코드 직접 써 보면서 고통받는 길밖에는 없다. 안드로이드 14의 변경점 중 특기할 만한 것으로는 제목에도 썼듯이 사진, 영상 파일에 대한 일부 접근 권한 부여다. https://developer.android.com/about/versions/14/changes/partial-photo-video-access?hl=ko 사진 및 동영상에 대한 일부 액세스 권한 부여 | Android Developers The Android 15 Devel..

Compose로 앱을 만들다가 하단 탭이 필요한 시점이 와서 구현하고, 어떻게 구현했는지 그 방법을 정리해 둔다. 먼저 sealed class로 앱에서 표시할 화면을 정의해 둔다. 꼭 sealed class가 아니라도 상관없다. sealed class AppScreen( val route: String, @StringRes val resourceId: Int, ) { object Home: AppScreen("home", R.string.home) object Favorite: AppScreen("favorite", R.string.favorite) object MyPage: AppScreen("mypage", R.string.my_page) } 이 클래스는 본인이 어떤 화면들을 만들 건지에 따라 구현이..
Compose로 앱을 만들던 중 CircularProgressIndicator를 써서 로딩 뷰를 구현하고 실행했더니 아래 에러가 발생했다. android java.lang.NoSuchMethodError: No virtual method at(Ljava/lang/Object;I)Landroidx/compose/animation/core/KeyframesSpec$KeyframeEntity; in class Landroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig; or its super classes (declaration of 'androidx.compose.animation.core.KeyframesSpec$KeyframesSpecConfi..
틈틈이 Compose 공부용으로 뉴스 api를 사용한 뉴스 조회 앱을 만들고 있는데, 뷰모델에 함수를 생성한 후에 액티비티에서 호출하면 ApiResult.Success가 호출되지 않는 현상이 발생했다. 아래는 오류가 발생하던 메인 액티비티의 구현으로, 아직 LazyColumn을 사용하기 전의 코드다. @AndroidEntryPoint class MainActivity : ComponentActivity() { private val newsViewModel: NewsViewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { ComposeNe..
※ 이 포스팅의 내용은 Gson 2.4 이상부터 사용할 수 있다. 2.4 미만의 버전을 사용 중이라면 버전을 올려야 한다 안드로이드에서 서버와 비동기 통신을 수행하려면 보통 레트로핏을 사용한다. 그리고 @SerializedName을 써서 서버에서 받은 값을 역직렬화하고 앱에서 만들어 둔 data class의 변수에 대입해서 사용한다. 그러나 @SerializedName 안에는 특별한 일이 없다면 하나의 문자열만 넣어서, 그 문자열에 해당하는 값을 JSON 문자열에서 가져온다. 이 때 서버에서 내려주는 JSON의 필드가 스네이크 케이스, 카멜 케이스, 파스칼 케이스인 경우에 모두 대응하려면 어떻게 해야 할까? 이 경우가 아니라도 하나의 @SerializedName이 여러 필드명을 알고 있어야 한다면 어떻게..
레트로핏을 쓰면서 보통 Gson도 같이 사용하는데, 이유는 서버에서 받은 JSON 데이터를 앱에서 사용하려면 Boolean, String 등의 타입으로 바꿔야 하기 때문이다. 이것을 서버는 데이터(객체)를 JSON으로 직렬화해서 앱(클라이언트)으로 보내고, 앱은 이 데이터를 역직렬화해서 적절한 타입으로 변환해 사용한다고 볼 수 있다. 이 때 JSON은 String 형태기 때문에 JSON String이라고 부르기도 한다. 직렬화, 역직렬화에 대해선 아래 포스팅을 참고한다. https://onlyfor-me-blog.tistory.com/494 직렬화(Serialization), 역직렬화(Deserialization)란? 인텐트로 객체를 넘길 때 직렬화라는 걸 사용해서 넘겼던 적이 있다. 예제 코드도 구글에..
개발할 때 라이브러리를 붙여서 쓰다 보면 고쳐서 쓰고 싶은 기능이 있다. 이를 위해 레포지토리에 이슈를 만들거나, 직접 PR을 날리는 방법이 있지만 어쩔 수 없이 내가 직접 수정해서라도 써야 할 수 있다. 하지만 대부분 라이브러리들의 코드들은 읽기 전용 파일로 되어 있어서, 프로젝트에서 수정할 수 없는 경우가 많다. 이 포스팅에선 이런 라이브러리들의 코드를 어떻게 수정할 수 있는지에 대해 적는다. 예시로 사용할 라이브러리는 TedImagePicker다. 커스텀할 라이브러리를 선택했다면 먼저 가장 해야 할 것은 해당 라이브러리의 라이선스 확인이다. 라이브러리의 라이선스 종류는 크게 아래와 같다. Apache 2.0 라이선스 MIT 라이선스 BSD 라이선스 GPL 라이선스 아파치, MIT, BSD 라이선스는..
사진 업로드를 구현하면 핸드폰을 세로나 가로로 들고 찍어서 테스트해볼 것이다. 이후 갤러리에서 사진 파일을 가져온 다음 서버로 업로드하고, 결과를 보면 가로로 찍은 사진은 피사체가 가로로 누워 있거나, 거꾸로 찍으면 180도 뒤집혀 보이는 경우가 발생할 수 있다. 그렇다면 사진이 회전되어 있다는 걸 알 수 있다면 얼마나 좋을까? 돌아간 만큼 거꾸로 돌린 후 업로드하면 회전되지 않은 정상적인 사진을 얻을 수 있을 것이다. 안드로이드에선 ExifInterface라는 클래스를 써서 사진 파일이 갖고 있는 메타데이터 중 회전 각도를 가져올 수 있다. https://developer.android.com/reference/android/media/ExifInterface ExifInterface | Android..