programing

64 비트 Android 장치에서 32 비트 네이티브 라이브러리를 사용하는 방법

copysource 2021. 1. 17. 11:52
반응형

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 비트 빌드가 아닙니다.

참조 URL : https://stackoverflow.com/questions/30782848/how-to-use-32-bit-native-libraries-on-64-bit-android-device

반응형