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。您不需要 armeabimips.

也许,您尝试在设备上安装 armeabi split。这个问题是 armeabi 拆分确实存在(它包含来自某些依赖项的库),但是较新的 NDK 没有构建 libnative-lib.so.[=13= 的这种变体]

试试这个:

sourceSets.main.jniLibs.srcDirs = ['src/main/jniLibs']

将以下内容添加到 gradle.properties,应该会有帮助:

android.bundle.enableUncompressedNativeLibs = false

如果以上解决方案无效,可以尝试用依赖库的debug模式包构建一次,然后替换为release模式包。解决了很多,发现这个方法可以,可能跟编译器缓存有关。