仅当使用 Android Studio 4.1.2 和 Android Application Bundle 从 Google Play 下载时出现 ClassNotFoundException

ClassNotFoundException only when downloading from Google Play, using Android Studio 4.1.2 and Android Application Bundle

我编写了一个应用程序,并已将其上传到 Google Play 进行内部测试。 根据 Google 的建议,这次我使用了 Android 应用程序包而不是 APK。

当我从 Play 商店下载它时,它立即崩溃 java.lang.ClassNotFoundException

如果我通过 Android Studio 运行 应用程序作为默认 APK,它可以正常工作。 如果我 运行 通过 Android Studio 将应用程序作为“来自应用程序包的 APK”,它也可以正常工作。

我的应用程序包含三个模块。 “应用程序”是主要部分。我有一个名为 bulletspeed 的 3d 引擎模块。缺少的 class 来自 bulletspeed 模块。我不知道第三个模块是否缺少 classes,因为程序在崩溃之前还没有推进那么远。

是否缺少某种模块设置?

感谢您的帮助!

它不能解决问题,但可以帮助您进行测试:

从 Google https://developer.android.com/studio/command-line/bundletool 下载 bundletool 并从本地应用程序包创建 apk 进行测试,这样您就不需要创建一堆内部应用程序测试并等待...

  1. 创建应用程序包 (.aab) 并找到文件夹
  2. java -jar "bundletool-all-x.x.x.jar" build-apks --bundle="yourpathto.aab" --output="folderoutput.zip" --mode="universal"
  3. 解压创建的压缩包
  4. 将通用 apk 安装到您的测试中 device/emulator

您可以尝试在 Android 清单中默认解压缩本机库。

事实证明,我的问题出在混淆器上。 类 一直都在,只是改名为 c.c.b.a.wtf.etc

  • 在构建过程中,我将一些 3D 场景序列化为 Java ObjectOutputStream。
  • 在我的程序中,我将 OOS 资源中的场景反序列化回对象
  • 反序列化无法按名称找到 类,因为名称已被混淆

按照本指南,我能够配置 proguard 规则,以便我可以正常反序列化:https://medium.com/androiddevelopers/practical-proguard-rules-examples-5640a3907dc9