android 发布应用程序包构建缺少本机 lib .so 文件
android release app bundle build missing native lib .so files
案例
我有一个应用程序
当我在调试模式下使用它时一切正常!
但是当我尝试构建用于发布的 apk 包并尝试通过 Play 商店安装应用程序时
缺少 .so 文件
我对 apk 进行了反向工程,但找不到单个 .so 文件或任何 lib 文件夹
但是当我使用 play console 和 android studio 分析包时,它包含所有 abi 文件夹和相应的 .so 文件
这是我的应用gradle文件
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.test"
minSdkVersion 16
targetSdkVersion 28
versionCode 38
versionName "3.0.8"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
// Enabling multidex support.
multiDexEnabled true
//render script
renderscriptTargetApi 28
renderscriptSupportModeEnabled true
externalNativeBuild {
cmake {
cppFlags "-frtti -fexceptions"
arguments "-DANDROID_STL=c++_shared"
}
}
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
packagingOptions {
exclude 'META-INF/rxjava.properties'
exclude "lib/mips/libRSSupport.so"
exclude "lib/mips/librsjni.so"
}
compileOptions {
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
}
}
dependencies {
//custom modules here
//libs and jars
implementation fileTree(include: ['*.jar'], dir: 'libs')
//other dependencies
}
apply plugin: 'com.google.gms.google-services'
这是一些图片
我无法截取整个页面,但它具有所有可能的 abis
错误
Fatal Exception: java.lang.UnsatisfiedLinkError
dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.test-1/base.apk"],nativeLibraryDirectories=[/data/app/com.test-1/lib/arm, /data/app/com.test-1/base.apk!/lib/armeabi, /vendor/lib, /system/lib]]] couldn't find "libnative-lib.so"
我都试过了
我尝试将 ndkFilters、splits、abis、禁用 progaurd 等放入 gradle 文件
但运气不好
我觉得
游戏控制台无法将库分发到相应的 abis
请求
任何人有任何线索请告诉我_/\_
谢谢
使用 abifFilters 从您的包中删除过时的 ABI。您不需要 armeabi
或 mips
.
也许,您尝试在设备上安装 armeabi split。这个问题是 armeabi 拆分确实存在(它包含来自某些依赖项的库),但是较新的 NDK 没有构建 libnative-lib.so
.[=13= 的这种变体]
试试这个:
sourceSets.main.jniLibs.srcDirs = ['src/main/jniLibs']
将以下内容添加到 gradle.properties
,应该会有帮助:
android.bundle.enableUncompressedNativeLibs = false
如果以上解决方案无效,可以尝试用依赖库的debug模式包构建一次,然后替换为release模式包。解决了很多,发现这个方法可以,可能跟编译器缓存有关。
案例
我有一个应用程序
当我在调试模式下使用它时一切正常!
但是当我尝试构建用于发布的 apk 包并尝试通过 Play 商店安装应用程序时 缺少 .so 文件 我对 apk 进行了反向工程,但找不到单个 .so 文件或任何 lib 文件夹
但是当我使用 play console 和 android studio 分析包时,它包含所有 abi 文件夹和相应的 .so 文件
这是我的应用gradle文件
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.test"
minSdkVersion 16
targetSdkVersion 28
versionCode 38
versionName "3.0.8"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
// Enabling multidex support.
multiDexEnabled true
//render script
renderscriptTargetApi 28
renderscriptSupportModeEnabled true
externalNativeBuild {
cmake {
cppFlags "-frtti -fexceptions"
arguments "-DANDROID_STL=c++_shared"
}
}
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
packagingOptions {
exclude 'META-INF/rxjava.properties'
exclude "lib/mips/libRSSupport.so"
exclude "lib/mips/librsjni.so"
}
compileOptions {
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
}
}
dependencies {
//custom modules here
//libs and jars
implementation fileTree(include: ['*.jar'], dir: 'libs')
//other dependencies
}
apply plugin: 'com.google.gms.google-services'
这是一些图片
我无法截取整个页面,但它具有所有可能的 abis
错误
Fatal Exception: java.lang.UnsatisfiedLinkError
dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.test-1/base.apk"],nativeLibraryDirectories=[/data/app/com.test-1/lib/arm, /data/app/com.test-1/base.apk!/lib/armeabi, /vendor/lib, /system/lib]]] couldn't find "libnative-lib.so"
我都试过了
我尝试将 ndkFilters、splits、abis、禁用 progaurd 等放入 gradle 文件
但运气不好
我觉得
游戏控制台无法将库分发到相应的 abis
请求
任何人有任何线索请告诉我_/\_
谢谢
使用 abifFilters 从您的包中删除过时的 ABI。您不需要 armeabi
或 mips
.
也许,您尝试在设备上安装 armeabi split。这个问题是 armeabi 拆分确实存在(它包含来自某些依赖项的库),但是较新的 NDK 没有构建 libnative-lib.so
.[=13= 的这种变体]
试试这个:
sourceSets.main.jniLibs.srcDirs = ['src/main/jniLibs']
将以下内容添加到 gradle.properties
,应该会有帮助:
android.bundle.enableUncompressedNativeLibs = false
如果以上解决方案无效,可以尝试用依赖库的debug模式包构建一次,然后替换为release模式包。解决了很多,发现这个方法可以,可能跟编译器缓存有关。