我们正在尝试为我们的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存储在<module-name>/libs/<abi-name>
文件夹中。但是,它们出现在jniLibs
文件夹中,如下图Android Studio中的图像。
因此,当mpeg.so
为true时将找到debuggable
文件,但是当debuggable
为false时将丢失该文件。是什么导致此问题?如果您需要,我可以提供更多信息。
[对我来说,解决方案是在所有.so
库前面加上关键字lib_
。是的,对。
我的库名称如下:
更改前:
mpeg.so
lib_arch.so
更改后:
lib_mpeg.so
lib_arch.so
而且,现在,我能够在apk和安装目录中找到它们。
我发现的最相关的documentation reference是:
注意:如果您的模块名称已经以lib开头,则构建系统不会在前面加上一个额外的lib前缀;它按原样使用模块名称,并添加.so扩展名。因此,最初称为例如libfoo.c的源文件仍会生成一个名为libfoo.so的共享库文件。此行为是为了支持Android平台源从Android.mk文件生成的库。所有此类库的名称均以lib开头。
而且,我什至没有使用ndk或android.mk