我目前正在开发一个使用Affectiva SDK的应用程序
implementation "com.affectiva.android:affdexsdk:3.2"
它包含平台特定的文件lib/armeabi-v7a/libaffdexface_jni.so
。
当我使用Android Studio中的“重建项目”或控制台中的gradlew assembleDebug
来构建应用程序时,我得到了一个〜10MB的APK,其中包含此文件,并且可以在我的设备上正常运行。但是,当我只使用Android Studio中的“运行”按钮时,我得到的文件大小约为6MB。然后,该应用会崩溃
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/system/framework/org.apache.http.legacy.boot.jar", zip file "/data/app/com.test.facial.recognition.debug-rkAp4fGhSFRMATj614orZw==/base.apk"],nativeLibraryDirectories=[/data/app/com.test.facial.recognition.debug-rkAp4fGhSFRMATj614orZw==/lib/arm64, /system/lib64]]] couldn't find "libaffdexface_jni.so"
我的猜测是,出于速度方面的考虑,“运行”会构建设备专用的APK。我使用的是Pixel 2,它是ARMv8,而不是ARMv7a,因此文件可能被跳过了。 ARMv8与ARMv7a向后兼容,因此这不是问题。 (因为使用“重建项目”或控制台并手动安装时,它运行良好)
有没有办法解决这个问题?我可以使“运行”使用通用APK而不是设备专用的吗?还是我可以告诉它在ARMv8版本中包含ARMv7a二进制文件?
答案 0 :(得分:0)
当我加入
android {
...
defaultConfig {
...
ndk {
abiFilters "armeabi-v7a", "x86", "armeabi"
}
}
}
在build.gradle
中有效。 documentation说
指定Gradle应该使用的应用程序二进制接口(ABI) 为您的APK构建输出并打包。
但是我什至不使用NDK,所以我不知道为什么这样。如果有人知道为什么,请发表评论。此外,非常欢迎使用比这更清洁的解决方案。