dlopen is 32-bit instead of 64-bit

有的手機默認支持64位,啟動的時候會嘗試加載64位的so。不過包卻不一定對64位做出支持。當系統無法加載到理想的包,就會拋出以下異常。

06-01 14:40:51.903 25196-25196/com.abc.app.pkg E/art: 
    dlopen("/data/data/com.abc.app.pkg/files/libs/libBaiduMapSDK_base_v4_2_1.so", RTLD_LAZY) failed: 
    dlopen failed: "/data/data/com.abc.app.pkg/files/libs/libBaiduMapSDK_base_v4_2_1.so" is 32-bit instead of 64-bit

06-01 14:40:51.904 25196-25196/com.abc.app.pkg E/NativeLoader: loadException java.lang.UnsatisfiedLinkError: 
    dlopen failed: "/data/data/com.abc.app.pkg/files/libs/libBaiduMapSDK_base_v4_2_1.so" is 32-bit instead of 64-bit
            at java.lang.Runtime.load(Runtime.java:331)
            at java.lang.System.load(System.java:981)
            at com.baidu.platform.comapi.NativeLoader.f(Unknown Source)
            at com.baidu.platform.comapi.NativeLoader.a(Unknown Source)
            at com.baidu.platform.comapi.NativeLoader.c(Unknown Source)
            at com.baidu.platform.comapi.NativeLoader.loadCustomizeNativeLibrary(Unknown Source)
            at com.baidu.platform.comapi.NativeLoader.loadLibrary(Unknown Source)
            at com.baidu.platform.comapi.a.<clinit>(Unknown Source)
            at com.baidu.platform.comapi.a.a(Unknown Source)
            at com.baidu.platform.comapi.b.a(Unknown Source)
            at com.baidu.mapapi.SDKInitializer.initialize(Unknown Source)
            at com.baidu.mapapi.SDKInitializer.initialize(Unknown Source)
            at com.gnet.calendarsdk.common.MyApplication.init(MyApplication.java:92)
            at com.gnet.calendarsdk.UCCalendarClient.init(UCCalendarClient.java:34)
            at im.vector.Application.initQuanshiSDK(Application.java:226)
            at im.vector.Application.onCreate(Application.java:126)
            at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1024)
            at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5076)
            at android.app.ActivityThread.access$1600(ActivityThread.java:187)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1645)
            at android.os.Handler.dispatchMessage(Handler.java:111)
            at android.os.Looper.loop(Looper.java:194)
            at android.app.ActivityThread.main(ActivityThread.java:5869)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1019)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:814)

不過,Android 64位是可以向下兼容32位程序的,apk只需要在budil.gradle中明確支持的指令集,以此適配手機即可。

android {
    defaultConfig {
        ndk {
            abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
        }
    }
}
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容