我有一个配置为动态功能模块的统一项目。这将按需完美安装。但是当我运行它时,应用程序崩溃并显示以下错误:
JNI FatalError调用:无法加载库:/data/app/com.example.app-8fx1RRZrQ34BcwXf8ajjqZ==/lib/arm64/libunity.so [dlopen失败:找不到库“ libunity.so”]
Unity项目的目标活动包括 SplitCompat.install(this);
它的摇篮看起来像:
// GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN
buildscript {
repositories {
mavenCentral()
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
}
}
allprojects {
repositories {
mavenCentral()
google()
jcenter()
flatDir {
dirs 'libs'
}
}
}
apply plugin: 'com.android.dynamic-feature'
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
}
android {
compileSdkVersion rootProject.compileSdk
buildToolsVersion rootProject.buildTools
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
defaultConfig {
minSdkVersion rootProject.minSdk
targetSdkVersion rootProject.targetSdk
versionCode rootProject.versionCode
versionName rootProject.versionName
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
lintOptions {
abortOnError false
}
aaptOptions {
noCompress = ['.unity3d', '.ress', '.resource', '.obb']
}
flavorDimensions "default"
productFlavors {
staging {
dimension "default"
}
production {
dimension "default"
}
develop {
dimension "default"
}
}
compileOptions {
sourceCompatibility 1.8
targetCompatibility 1.8
}
buildTypes {
debug {
minifyEnabled false
useProguard false
jniDebuggable true
}
release {
minifyEnabled false
useProguard false
}
}
packagingOptions {
doNotStrip '*/armeabi-v7a/*.so'
doNotStrip '*/arm64-v8a/*.so'
// doNotStrip '*/x86/*.so'
}
}
dependencies {
implementation project(':app')
}
应用模块的优点是:
bundle {
language {
// Specifies that the app bundle should not support
// configuration APKs for language resources. These
// resources are instead packaged with each base and
// dynamic feature APK.
enableSplit = false
}
density {
// This property is set to true by default.
enableSplit = false
}
abi {
// This property is set to true by default.
enableSplit = true
}
}
我什至尝试通过在gradle.properties文件中设置 android.bundle.enableUncompressedNativeLibs = false 来禁用.so压缩,但是确切的错误仍然存在。
功能模块的内部,如aab中所示。 .so库存在:
我该如何解决?
更新1-
上面第一次描述的问题是从Play商店首次安装aab时发生的。请注意,我能够成功安装功能模块,并且只有在尝试运行功能模块时才会发生错误。但是,当我在同一安装上推送增量更新时,功能模块可以以某种方式正常工作,并且能够找到必要的.so文件。我已经多次尝试了这些步骤,以验证观察结果。
答案 0 :(得分:1)
确保在动态要素模块中使用SplitCompat加载了统一库:https://developer.android.com/guide/app-bundle/playcore#load_native_libs
我不确定Unity是否会自动处理此问题,但是如果是这样,您可能需要与他们联系以解决此问题。
答案 1 :(得分:0)
我还在日志文件中看到了“JNI Fatal Error called: Unable to load library .../libunity.so”。
就我而言,我注意到 Unity 记录了一个关于无法读取 bin/Data/settings.xml 文件的错误。我将这些目录和文件添加到我的项目资产中,然后 libunity 库能够加载。因此,即使您可能会看到一条消息,指出未找到 libunity.so 文件,但问题实际上是统一库无法正确初始化。