我正在尝试使用新的Android应用程序捆绑包。
我在设备上本地运行了一些测试,并且一切正常。但是,一旦部署到生产环境中,我就会开始看到一些类似这样的错误:
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/xyz/base.apk"],nativeLibraryDirectories=[/data/app/xyz/lib/arm, /vendor/lib, /system/lib]]] couldn't find "libsqlite3x.so"
java.lang.Runtime.loadLibrary (Runtime.java)
java.lang.System.loadLibrary (System.java)
io.requery.android.database.sqlite.SQLiteDatabase.<clinit> (SQLiteDatabase.java:86)
io.requery.android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked (SQLiteOpenHelper.java:241)
io.requery.android.database.sqlite.SQLiteOpenHelper.getReadableDatabase (SQLiteOpenHelper.java:199)
...
该错误表明我正在使用的库(requery / sqlite-android)无法找到所需的.so文件。 这似乎很奇怪,因为我检查了bundletool,并且在每个APK中都有文件.so。
该错误在两个设备上发生:三星Galaxy Note 7和 TECNO-J8,分别运行Android 6和5。
根据Play商店的说法,通过Google Play安装的应用会发生此错误,因此我怀疑该错误与APK侧载有关。
生成的APK捆绑包包含以下架构的拆分:
您有什么提示吗?
答案 0 :(得分:1)
此问题可能与https://issuetracker.google.com/issues/127691101
有关它发生在 LG 或旧三星设备的某些设备上,用户已将应用程序移至 SD 卡。
解决此问题的一种方法是使用 Relinker 库加载您的本机库,而不是直接调用 System.load 方法。
https://github.com/KeepSafe/ReLinker
另一种方法是阻止应用程序移动到 SD 卡或在 gradle.properties 文件中保留 android.bundle.enableUncompressedNativeLibs=false。
答案 1 :(得分:0)
即使安装是从Play上报告的,使用adb时也很容易伪装此信息(某些用户由于我还不了解的某些原因而学会了这样做)。那些崩溃很可能是由于侧面负载造成的,尽管这些负载看起来并不安装配置拆分。