일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 안스
- error
- 레트로핏
- GIT
- image
- 스튜디오
- 의존성주입
- Retrofit
- WebView
- Android
- 안드로이드스튜디오
- build
- RecyclerView
- DI
- Github
- MVVM
- 다트
- 깃헙
- dart
- ADB
- Kotlin
- viewpager
- coroutine
- Gradle
- 코틀린
- 웹뷰
- studio
- 안드로이드 스튜디오
- 에러
- 안드로이드
- Today
- Total
목록전체 글 (159)
코딩하는 일용직 노동자
안드로이드 스튜디오의 새로운 버전인 Arctic Fox 를 설치했습니다. 그러니 gradle 7.0 을 설치하라고 해서 설치하고 JDK 11 버전이 필요하다고 해서 겨우겨우 설치했습니다. 간신히 빌드를 하려는데 처음보는 에러가 발생했습니다. Manifest merger failed : android:exported needs to be explicitly specified for . Apps targeting Android 12 and higher are required to specify an explicit value for `android:exported` when the corresponding component has an intent filter defined. See https://devel..
다른 개발자와의 협업중에 그분에게서 전달받은 소스파일을 덮어씌워서 작업하다 보니 기존에는 발생하지 않았던 컴파일 오류가 발생했다. The minCompileSdk (31) specified in a dependency's AAR metadata (META-INF/com/android/build/gradle/aar-metadata.properties) is greater than this module's compileSdkVersion (android-30). clean 을 해보고 빌드를 다시 해봐도 계속 문제가 발생했다. compileSdkVersion 을 31로 변경해서 빌드해봐도 계속 발생했는데 app/build.gradle 에 아래의 처리를 추가해서 해결했다. configurations.all { ..
서비스중인 앱에 구글 인앱상품을 만들고 결제기능을 앱에 추가하는 업무를 맡아 작업하면서 생각보다 구글 결제를 셋팅하는게 까다롭다는것을 느꼈습니다. 구글링을 해보면 BillingClient 를 이용해 결제를 시도하는 소스는 많은데 막상 테스트를 해보니 결제가 되지 않고 결제거부가 되었습니다. 분명히 앱의 인앱상품을 생성해서 등록을 해놨는데도 결제가 실패되었습니다. 이번 포스팅에서는 구글결제(Billing)을 구현하기 위해 플레이스토어 콘솔과 구글 클라우드플랫폼 에서 셋팅하는 것을 정리해보았습니다. #1 앱등록 만약 등록한 앱이 Billing 권한이 없다면 구글 플레이스토어 콘솔에 들어가서 [수익 창출] > [제품] > [인앱 상품] 을 들어가보면 아직 인앱 상품이 없다는 메세지가 보입니다. 우선 인앱상품을..
안드로이드 개발중 경험한 에러와 해결방법을 공유합니다. 앱실행 중에 아래와 같은 에러가 발생하면서 앱이 죽었습니다. java.lang.IllegalStateException: Must be called from main thread of fragment host Fragment에서 부모 Activity로 ViewPager의 페이지 이동을 시키려고 하는데 에러가 났습니다. public class AndroidBridge { @JavascriptInterface public void OnAppEvent(String data) { switch (event) { case "move_to_main": Fragment_Main.getInstance().mViewPager.setCurrentItem(1); break..
안드로이드 스튜디오를 Arctic Fox 로 업데이트 해보니 파일검색창이나 소스검색창, git로그창에서 한글이 깨져보이는 현상이 발생했습니다. 구글링을 해보니 안드로이드 스튜디오가 업데이트 될때 이런일을 겪는 개발자가 상당히 많은듯 합니다. ^^;; 우선 다음의 경로로 가서 현재 폰트를 확인해줍니다. Preference > Editor > Font 에 가서 확인해봤지만 큰 문제는 없어보입니다. Preference > File Encodings 에 가보니 모두 정상적으로 UTF-8 로 인코딩 설정이 되어 있었습니다. 마지막으로 Appearance 메뉴를 가봅니다. Preference > Appearance 메뉴에서 Use custom font 를 체크하고 Apply 를 눌러줍니다. 다시 소스검색창을 확인해..
기존 안드로이드앱 APK파일을 플레이스토어에 등록할때는 수동으로 서명(signing)을 해서 올리는 방법을 사용했습니다. 때문에 개발자PC에서 키스토어파일(.jks, .keystore)을 만들어서 직접 관리를 했습니다. 간혹 이 키스토어파일을 분실하는 경험을 하는 개발자도 있는데, 이럴경우 버전업된 앱을 플레이스토어에 등록할 수 없기 때문에 매우 난처한 상황이 됩니다. 몇년전부터 플레이스토어 콘솔에 새로운 앱서명 방식이 적용되었습니다. 그동안은 이 기능을 사용해도 그만 안해도 그만이었고, 이 기능을 모르는 개발자도 많았습니다. 최근에 새로운 앱을 등록하면서 저도 이 기능을 처음 써보게 되었습니다. 새로운 앱 서명 방식은 구글이 서명키를 직접 관리하는 방식입니다. 우선 기존처럼 개발자의 PC에서 앱을 서명..
회사에서 상용버전의 앱을 운영하는 경우나, 상용버전과 개발버전을 앱에 다 설치하고 테스트하려는 경우 패키지명을 바꿔서 테스트를 하는 불편함이 있었습니다. 이럴경우 gradle 에서 상용버전과 개발버전의 패키지명을 쉽게 바꿀수 있는 옵션을 이용하면 편리합니다. #1 app레벨의 gradle 파일에 옵션 추가하기 아래처럼 buildTypes 의 debug 에 applicationIdSuffix ".dev" 을 추가하면 debug 모드로 빌드할때는 기본적인 패키지명 뒤에 .dev 가 붙게 됩니다. #2 매니페스트 앱이름 등 바꿔주기 한 기기에 상용버전과 개발버전의 앱을 다 설치해야 하기 때문에 manifestPlaceholders 를 이용해서 앱이름과 아이콘을 나눠주도록 아래 처럼 추가합니다. 또한 manif..
ViewModel 안에 만들어둔 MutableLiveData 변수의 value 를 바꿔주기 위해 .setValue() 나 .sendEvent() 를 사용하니 앱이 바로 죽습니다. 에러로그를 보니 메인쓰레드가 아닌 다른 쓰레드에서 MutableLiveData 의 값을 셋팅하다보니 발생한 에러입니다. (CoroutineScope 는 Dispatchers.IO 로 만들어서 사용중이었습니다.) 구글링을 해보니 아주 간편한 해결법이 있습니다. postValue() 로 값을 셋팅해주면 됩니다.
Java로 만든 프로젝트를 Kotlin으로 컨버팅 후 테스트 하던중 커스텀 다이얼로그를 호출하니 앱이 죽어버렸습니다. java.lang.NullPointerException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkNotNullParameter, parameter savedInstanceState 처음보는 에러라 구글링을 해보니 nullCheck 설정이 붙은 파라메터로 바꾸라는군요. public override fun onCreate(savedInstanceState: Bundle) 저는 커스텀 다이얼로그 소스에서 이 부분을 public override fun onCreate(savedInsta..
안드로이드 스튜디오에서 많이 사용하는 툴이 Logcat입니다. 일반적인 간단한 Log 는 괜찮지만 api를 호출하고 결과를 json으로 받았을때, 그리고 그 json의 길이가 엄청나게 길때 Log가 중간에 짤리는것을 볼 수 있습니다. Logcat 한줄의 길이가 4076byte까지만 표시되기 때문입니다. json Log를 보기에도 편하고 짤리지도 않게 표시해봅시다. #1 Timber 셋팅 Timber라는 라이브러리를 이용해보겠습니다. Timber는 Logging 라이브러리 입니다. gradle에 Timber를 추가해줍니다. implementation 'com.jakewharton.timber:timber:4.7.1' 그리고 프로젝트에서 가장 먼저 시작되는 Activity나 또는 Application 클래스..