일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 안드로이드 유닛 테스트 예시
- 안드로이드 레트로핏 사용법
- 객체
- 안드로이드 레트로핏 crud
- ar vr 차이
- 안드로이드 라이선스
- 안드로이드 os 구조
- 안드로이드 유닛 테스트
- 서비스 vs 쓰레드
- 멤버변수
- 큐 자바 코드
- 2022 플러터 설치
- android retrofit login
- jvm 작동 원리
- rxjava disposable
- 스택 큐 차이
- android ar 개발
- 안드로이드 유닛테스트란
- 2022 플러터 안드로이드 스튜디오
- 스택 자바 코드
- 플러터 설치 2022
- ANR이란
- 안드로이드 라이선스 종류
- rxjava cold observable
- Rxjava Observable
- 자바 다형성
- rxjava hot observable
- 클래스
- jvm이란
- 서비스 쓰레드 차이
- Today
- Total
목록Android (336)
나만을 위한 블로그
※ 이 포스팅은 맥북 기준으로 작성됐다 웹뷰 기반의 하이브리드 앱이라면 유저들은 반드시 플레이 스토어에서 앱을 다운받지 않아도 앱의 대부분의 기능을 쓸 수 있다. 삼성 인터넷이나 크롬 등 브라우저 앱에서 서비스의 도메인으로 이동해 모바일 웹 형태로 서비스를 이용할 수 있기 때문이다. 하지만 특정 브라우저 앱에서 문제가 생긴다면 그 브라우저 앱에서 웹뷰를 실행하고 디버깅해야 하는데, 아무 설정도 안 한 크롬 인스펙터로는 브라우저 앱에서 디버깅할 수 없다. 이 포스팅에선 크롬 인스펙터에서 브라우저 앱에 표시되는 웹뷰를 디버깅하는 방법을 간략하게 확인한다. 먼저 터미널에서 아래 명령어를 실행한다. brew install --cask android-platform-tools 이 명령어를 입력해서 설치해야 브라우..
Compose에서 말하는 상태는 아래와 같다. https://developer.android.com/develop/ui/compose/state?hl=ko 상태 및 Jetpack Compose | Android Developers 이 페이지는 Cloud Translation API를 통해 번역되었습니다. 상태 및 Jetpack Compose 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 앱의 상태는 시간이 지남에 따라 developer.android.com 앱의 상태는 시간이 지남에 따라 변할 수 있는 값이다. Room DB부터 클래스 변수까지 모든 항목이 포함된다. 모든 안드로이드 앱에선 유저에게 상태가 표시된다. 아래는 상태의 몇 가지 예다. - 네트워크 연결을 설정할..
이전 포스팅에서 프래그먼트를 어떻게 구현하는지 간단하게 확인했으니 이제 생명주기를 확인할 차례다. 자체적인 생명주기를 갖기 때문에, 액티비티와 다른 점이 뭔지 생각하면서 보면 좋을 것이다. https://developer.android.com/guide/fragments/lifecycle?hl=ko 프래그먼트 수명 주기 | Android 개발자 | Android Developers 이 페이지는 Cloud Translation API를 통해 번역되었습니다. 프래그먼트 수명 주기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 각 Fragment 인스턴스에는 고유한 developer.android.com 각 프래그먼트 인스턴스에는 고유한 생명주기가 있다. 유저가 앱을 탐색하거나..
앱을 만들다 보면 언젠간 액티비티로는 부족하거나 액티비티까지 쓰긴 애매한데 싶은 화면을 구현해야 할 수 있다. 이 때 쓸 수 있는 게 프래그먼트다. 사실 프래그먼트는 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이 여러 필드명을 알고 있어야 한다면 어떻게..