Native Library를 포함한 Third party 라이브러리를 사용한 프로젝트를 진행하고 있었고 알파 버전으로 플레이스토어에 올리는 작업 단계였습니다.
제가 사용하던 핸드폰은 갤럭시 S10e인데 얼마 전 Android-12(SDK 31)로 업데이트를 해두었죠. 불행중 다행으로 이 업데이트로 해당 이슈를 인지할 수 있었습니다. 업데이트 후 며칠정도 시간이 지난 후 알파 버전이 제대로 돌아가는지 문득 떠올라 구동을 해봤고 아주 시원하게 앱이 크래시가 났습니다.
우선 특정 버전에서 문제가 되는 것인지 하여 갤럭시 노트5, Android-9(SDK 29)에서 동일한 버전으로 테스트하였고 여기서는 정상적으로 동작을 하였습니다. Android 12가 문제일 것이라 생각하였으나 해당 라이브러리의 샘플 프로젝트는 Android-12에서 또 정상적으로 돌아가는 것이었죠. 뭔가 갈피가 안잡혔습니다.
삽질 🪓
일단 이유를 좀 알기 위해 여러가지 테스트(라고 쓰고 삽질)를 진행하였습니다.
- 기본적인 요소만 있는 프로젝트를 생성하고 해당 라이브러리를 참조 ➡ 크래시 발생!
- NDK target 문제인가? 서드 파티 라이브러리 문서 참조하여 gradle 추가 세팅 ➡ 크래시 발생!
- Android gradle plugin의 문제인가? 하여 샘플 프로젝트와 동일하게 세팅 ➡ 크래시 발생!
- gradle.property의 문제인가? 하여 샘플 프로젝트와 동일하게 세팅 ➡ 크래시 발생!
- compile SDK revision의 문제인가? 하여 샘플 프로젝트와 동일하게 세팅 ➡ 크래시 발생!
- 범인은 kotlin?? Java로 프로젝트 변경 ➡ 어림도 없지, 크래시 발생!
위와 같은 🐶삽질 끝에 minSdkVersion
을 빼먹었다는 것을 깨닫고 19로 내려주었더니 이 때에는 큰 문제가 발생하지 않았습니다.
이 녀석이 문제였구나.. 하고 minSdkVersion
을 20, 21, 22.. 올리다 보니 22버전 부터 크래시가 발생하는 것을 발견했습니다. 그러나, minSdkVersion
을 낮춰서 해결 끝~ 하면 참 좋겠지만 CameraX
를 사용하고 있던지라 minSdkVersion
을 21로 세팅할 수는 없었던 차에 얼마 전 저와 같은 문제를 겪은 귀하신 외국인 분이 아주 명쾌한 해답을 자문자답식으로 남겨두었습니다. (아래 출처 참조)
Android Menifest
AndroidMenifest의 <application> 태그 attribute에 android:extractNativeLibs="true"
를 추가해 주는 것이었습니다.
<application
...
android:extractNativeLibs="true">
안드로이드 공식 문서를 보면 이 attribute의 default 값이 true
라고..는 하는데 정확하게는 무슨 이유인지는 모르겠지만 명시적으로 해주지 않으면 true
로 동작하지 않는 듯 하였습니다.
Gradle
첫번째 해결법은 debug에서는 훌륭하게 동작하나 실제 배포시 생성된 aar에서는 AndroidMenifest에서 설정한 값이 반영되지 않고 패키징이 되는 문제가 있었습니다.
이 경우에는 gradle에서 변경을 해주어야하며 아래 링크를 참조하면 상황에 맞도록 해결할 수 있을것입니다. 이후 버전에서는 다른 해결방법이 있을 수 있어서 링크로 대체합니다~
https://developer.android.com/studio/releases/gradle-plugin?hl=ko&buildsystem=cmake#behavior-changes
Gradle DSL (2022-03-07)
공식 문서에 extractNativeLibs가 AGP 4.2.0부터 DSL 옵션으로 대체되었다고 합니다. useLegacyPackaging
옵션을 사용하라고 하네요. Android Gradle Plugin (AGP) 4.2.0이상을 사용하시는 분들은 다음 옵션으로 해결을 하면 되지 않을까 합니다~
그럼 이만 뿅~ 😅
출처
- https://stackoverflow.com/questions/70987929/java-lang-unsatisfiedlinkerror-after-changing-minsdkversion/71031181#comment125624961_71031181
- https://developer.android.com/studio/releases/gradle-plugin?hl=ko&buildsystem=cmake#behavior-changes
- https://developer.android.com/guide/topics/manifest/application-element?hl=ko
- https://developer.android.com/reference/tools/gradle-api/7.1/com/android/build/api/dsl/JniLibsPackagingOptions?hl=ko#uselegacypackaging
'소프트웨어 > 안드로이드' 카테고리의 다른 글
[Android Studio] 안드로이드 스튜디오 여러 버전을 한 PC에 설치 (0) | 2021.04.13 |
---|---|
[Android] AVD 이미지 위치 변경 (2) | 2020.09.01 |
[Android] AVD 실행 안되는 경우 (0) | 2020.08.31 |
[Android/Kitkat] 로케일 변경 시 CheckBox 텍스트가 업데이트 되지 않는 현상 해결 (0) | 2020.07.13 |
[Android] Windows 개발 소스를 Linux에서 빌드할 때 주의사항 (0) | 2020.06.16 |