我们正在尝试为我们的Android项目使用一些'.so'预建库。它们是:mpeg.so
和lib_arch.so
当gradle的debuggable
标志为true时,我们的“.so”文件在“.apk”文件中可见(使用ApkAnalyzer确认),并且在安装应用程序时,它们也在/data/app/<package-name>-jekswbj/lib
文件夹中可用。
当debuggable
标志设置为false时,我们的“.so”文件在“.apk”文件中可见(使用ApkAnalyzer确认)。但是,安装应用程序时,mpeg.so
未存储在设备上。只找到lib_arch.so
。
以下是我的build.gradle
文件中的片段
// buildTypes: debug {}
debug {
debuggable false
minifyEnabled false
ext.enableCrashlytics = false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
// splits: abi
splits {
abi {
enable true
reset()
include 'x86', 'x86_64', 'arm64-v8a', 'armeabi-v7a'
universalApk true
}
}
字符串
我们的“.so”文件根据其abi(s)存储在<module-name>/libs/<abi-name>
文件夹中。但是,它们出现在jniLibs
文件夹中,如Android Studio中的下图所示。
的数据
因此,当debuggable
为true时,找到mpeg.so
文件,但当debuggable
为false时,该文件丢失。是什么导致了这个问题?我可以提供更多的信息,如果你需要它。
1条答案
按热度按时间oiopk7p51#
对我来说,解决方案是在所有
.so
库的前面加上关键字lib
。是的,对。我的图书馆名称如下:
变更前:
字符串
变更后:
型
而且,现在,我能够在apk和安装目录中找到它们。
我发现的最相关的documentation reference是:
注意:如果你的模块的名字已经以lib开头,构建系统不会在前面加上额外的lib前缀;它按原样使用模块名,并添加.so扩展名。因此,最初名为libfoo. c的源文件仍然会生成名为libfoo. so的共享对象文件。此行为是为了支持Android平台源代码从www.example.com文件生成的库Android.mk;所有此类库的名称都以lib开头。
我甚至没有使用ndk或
android.mk