Android 当可调试标志为 false 时缺少“*.so”库(独立于 build-variant)
Android '*.so' libraries missing when debuggable flag is false (independent of build-variant)
我们正在尝试为我们的 android 项目使用一些“.so”预建库。这些都是:
mpeg.so
& lib_arch.so
当 gradle 的 debuggable
标志为真时,我们的“.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。
因此,mpeg.so
文件在debuggable
为真时找到,但在debuggable
为假时找不到。是什么导致了这个问题?如果您需要,我可以提供更多信息。
对我来说,解决方案是在所有 .so
库前加上关键字 lib_
。对对对
我的图书馆名称如下:
更改前:
mpeg.so
lib_arch.so
更改后:
lib_mpeg.so
lib_arch.so
而且,现在,我能够在 apk 和安装目录中找到它们。
我发现最相关的 documentation reference 是:
Note: If your module's name already starts with lib, the build system does not prepend an additional lib prefix; it takes the module name as-is, and adds the .so extension. So a source file originally called, for example, libfoo.c still produces a shared-object file called libfoo.so. This behavior is to support libraries that the Android platform sources generate from Android.mk files; the names of all such libraries start with lib.
而且,我什至没有使用 ndk 或 android.mk
我们正在尝试为我们的 android 项目使用一些“.so”预建库。这些都是:
mpeg.so
& lib_arch.so
当 gradle 的 debuggable
标志为真时,我们的“.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。
因此,mpeg.so
文件在debuggable
为真时找到,但在debuggable
为假时找不到。是什么导致了这个问题?如果您需要,我可以提供更多信息。
对我来说,解决方案是在所有 .so
库前加上关键字 lib_
。对对对
我的图书馆名称如下:
更改前:
mpeg.so
lib_arch.so
更改后:
lib_mpeg.so
lib_arch.so
而且,现在,我能够在 apk 和安装目录中找到它们。
我发现最相关的 documentation reference 是:
Note: If your module's name already starts with lib, the build system does not prepend an additional lib prefix; it takes the module name as-is, and adds the .so extension. So a source file originally called, for example, libfoo.c still produces a shared-object file called libfoo.so. This behavior is to support libraries that the Android platform sources generate from Android.mk files; the names of all such libraries start with lib.
而且,我什至没有使用 ndk 或 android.mk