64 비트 Android 장치에서 32 비트 네이티브 라이브러리를 사용하는 방법
armeabi, armeabi-v7a 및 x86 용으로 만 컴파일 된 애플리케이션에서 네이티브 라이브러리를 사용합니다.
이 라이브러리가 Samsung S6와 같은 64 비트 장치에로드되면 응용 프로그램이 UnsatisfiedLinkError와 함께 충돌합니다.
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.myapp-2/base.apk"],nativeLibraryDirectories=[/data/app/com.myapp-2/lib/arm64, /vendor/lib64, /system/lib64]]] couldn't find "libfoo.so"
at java.lang.Runtime.loadLibrary(Runtime.java:366)
at java.lang.System.loadLibrary(System.java:989)
안타깝게도 라이브러리는 비공개 소스입니다. 64 비트 대상으로 라이브러리를 다시 컴파일하지 않고이 문제를 해결할 수있는 방법이 있습니까?
Android에 APK를 설치할 때 시스템은 .NET Framework에서 lib
결정된 순서대로 APK 폴더 내에서 네이티브 라이브러리 디렉터리 (armeabi, armeabi-v7a, arm64-v8a, x86, x86_64, mips64, mips)를 찾습니다 Build.SUPPORTED_ABIS
.
앱 arm64-v8a
에 누락 된 lib 가있는 디렉토리 가있는 경우 누락 된 libs는 다른 디렉토리에서 설치되지 않으며 libs는 혼합되지 않습니다. 즉, 각 아키텍처에 대해 전체 라이브러리 세트를 제공해야합니다.
따라서 문제를 해결하려면 빌드에서 64 비트 라이브러리를 제거하거나 32 비트 아키텍처 만 패키징하도록 abiFilters를 설정할 수 있습니다.
android {
....
defaultConfig {
....
ndk {
abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
}
}
}
위의 답변은 64 비트가 아닌 32 비트로 빌드를 생성하는 데 도움이됩니다. [abiFilters "armeabi", "armeabi-v7a", "x86", "mips"]를 사용하는 경우. 서명 된 apk를 생성하면 64 비트가 아닙니다. Google Play 스토어에 업로드 할 때 오류가 발생합니다. 64 비트 빌드가 아닙니다.
'programing' 카테고리의 다른 글
Vue.js 컴포넌트의 프로펠러 변경을 감시하는 방법 (0) | 2022.07.10 |
---|---|
Android에서 문자열을 URI로 변환 (0) | 2022.07.10 |
두 개의 다른 테이블에 두 개의 count (*) 결과를 함께 추가하려면 어떻게합니까? (0) | 2021.01.17 |
객체가 Core Data에 존재하는지 여부를 확인하는 가장 빠른 방법은 무엇입니까? (0) | 2021.01.17 |
Facebook에 아직 공개 검색 API가 있습니까? (0) | 2021.01.17 |