gradle 当debuggable标志为false时,Android '*.so'库丢失(独立于build-variant)

7eumitmz  于 2023-08-06  发布在  Android
关注(0)|答案(1)|浏览(131)

我们正在尝试为我们的Android项目使用一些'.so'预建库。它们是:mpeg.solib_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时,该文件丢失。是什么导致了这个问题?我可以提供更多的信息,如果你需要它。

oiopk7p5

oiopk7p51#

对我来说,解决方案是在所有.so库的前面加上关键字lib。是的,对。
我的图书馆名称如下:
变更前:

mpeg.so
lib_arch.so

字符串
变更后:

libmpeg.so
libarch.so


而且,现在,我能够在apk和安装目录中找到它们。
我发现的最相关的documentation reference是:
注意:如果你的模块的名字已经以lib开头,构建系统不会在前面加上额外的lib前缀;它按原样使用模块名,并添加.so扩展名。因此,最初名为libfoo. c的源文件仍然会生成名为libfoo. so的共享对象文件。此行为是为了支持Android平台源代码从www.example.com文件生成的库Android.mk;所有此类库的名称都以lib开头。
我甚至没有使用ndk或android.mk

相关问题