gpt4 book ai didi

android - 可调试标志为false时缺少Android '*.so'库(与构建变量无关)

转载 作者:行者123 更新时间:2023-12-03 05:30:17 26 4
gpt4 key购买 nike

我们正在尝试为我们的android项目使用一些“.so”预建库。这些是:mpeg.solib_arch.so
当gradle的debuggable标志为true时,“。apk”文件(使用ApkAnalyzer确认)在“.apk”文件中可见,并且在安装应用程序时也可以在/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中的图像所示。

jniLibs folder

因此,当 mpeg.so为true时找到 debuggable文件,但是当 debuggable为false时找不到该文件。是什么导致此问题?如果您需要,我可以提供更多信息。

最佳答案

对我来说,解决方案是在所有.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 - 可调试标志为false时缺少Android '*.so'库(与构建变量无关),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59589306/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com