Gradle native libraries not found on device but present in apk

余生长醉 提交于 2019-11-26 23:30:52

问题


My application uses Here SDK and Twilio SDK. Both uses native libraries (Here SDK with native libraries locally plugged in from /libs and /jniLibs folders, Twilio SDK plugged in from jCenter). But on Android 5.1 Here SDK throws exception "MISSING LIBRARIES: libMAPSJNI.so" although this library present in result APK. I opened folder where my program is installed on device and compared content in two cases: with or without Twilio SDK. The difference is that when connected Twilio API folder /lib is a file, and for obvious reasons, the loader can not see inside it native libraries needed initialize Here SDK. If remove the Twilio gradle dependency the assembly occurs normally. What could be a reason and how to fix it? If needed I can attach test project with these libs


回答1:


You need to modify your build.gradle like this:

android {
    (...)
    splits {
        abi {
            enable true
            reset()
            include 'armeabi-v7a'
            universalApk false
        }
    }
    (...)
}

It's probably because Twilio SDK supports x86 and HERE SDK currently doesn't support it.




回答2:


By defining a splits block you can tell Gradle to create APKs for each listed ABI:

include "armeabi", "armeabi-v7a", "x86", "mips"

Alternatively you can include all desired ABIs into one APK by adding the following filter:

android {
(...)
defaultConfig {
    (...)
    ndk {
        // allow only 32bit *.so libs
        abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
    }
}

}

Both approaches will exclude 64bit functionality that might clash with the 32bit HERE SDK, but the latter will support more devices with a single APK.

Some libraries, like the new Android Room Persistence library, add 32bit flavors along with the two 64bit ABI flavors arm64-v8a and x86_64. Since HERE SDK at the moment only provides a 32bit lib it should be safe to exclude 64bit lib variants. On the other hand it is expected that 64bit devices can gracefully handle 32bit libs.



来源:https://stackoverflow.com/questions/39021240/gradle-native-libraries-not-found-on-device-but-present-in-apk

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!