java - 当在 Android L 上构建并安装在 Android K 上时,用于测试崩溃的调试 APK 分发

标签 java android android-gradle-plugin android-multidex android-studio-2.1

所以我现在面临这个问题有一段时间了。在调试时,我正在使用运行 Android 5.1 (L) 的设备。完成后,我从 /app/build/output/apk 中获取 app-debug.apk 并通过 Beta 将其转发给测试部门(通过 Fabric ).

所以在测试人员方面,当安装在运行 Android 4.4 (K) 的设备上时,应用程序在打开时崩溃。这不是 Fabric 的问题,因为其他 channel (如 Slack、电子邮件等)也会发生同样的事情。

如果我在运行 Android K 的模拟器上再次构建应用程序并发送 apk,它将在测试设备上正常运行。是的,该应用程序会在运行 Android 4.4 的多台设备上崩溃。

我在 SO 上找不到与此相关的任何内容,所以想提出这个问题。这是 Android Studio 的已知问题还是我遗漏了什么?

我正在使用:

  • Android Studio V2.1.3
  • 分钟。 SDK 版本 15
  • 目标 SDK 版本 23
  • 已编译 SDK 版本 23
  • 构建工具版本 24.0.2

如果这不是错误,是否意味着我们必须在较低的 Android 版本上生成签名的 apk 才能在所有设备上运行?

有人知道这个问题吗?

更新:在 Android K 上崩溃的构建在 Android L 及更高版本上运行良好。

更新:我能够获取 Logcat:

FATAL EXCEPTION: mainProcess: com.myapp.qa, PID: 3570 java.lang.RuntimeException: Unable to instantiate application com.android.tools.fd.runtime.BootstrapApplication: java.lang.ClassNotFoundException: Didn't find class "com.android.tools.fd.runtime.BootstrapApplication" on path: DexPathList[[zip file "/data/app/com.myapp.qa-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.myapp.qa-2, /vendor/lib, /system/lib]]
    at android.app.LoadedApk.makeApplication(LoadedApk.java:516)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4317)
    at android.app.ActivityThread.access$1500(ActivityThread.java:135)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5017)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.android.tools.fd.runtime.BootstrapApplication" on path: DexPathList[[zip file "/data/app/com.myapp.qa-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.myapp.qa-2, /vendor/lib, /system/lib]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
    at android.app.Instrumentation.newApplication(Instrumentation.java:975)
    at android.app.LoadedApk.makeApplication(LoadedApk.java:511)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4317) 
    at android.app.ActivityThread.access$1500(ActivityThread.java:135) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:136) 
    at android.app.ActivityThread.main(ActivityThread.java:5017) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:515) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
    at dalvik.system.NativeStart.main(Native Method) 

2016 年 7 月 12 日更新:我尝试添加多 dex 支持,但没有解决问题。 logcat 给出相同的日志。

最佳答案

请检查您是否启用了即时运行选项。

转到 Android Studio 的Preferences,然后在Build, Execution, Deployment 下找到Instant Run 选项。

取消选中复选框以禁用即时运行,然后再次清理并在您的设备中构建代码。然后将调试 apk 传递给测试团队。希望这次不会崩溃。

更新

似乎您的问题已经被问到并且answered here .尝试在您的 build.gradle 中启用 multidex 支持。

defaultConfig {
    ...
    minSdkVersion 14
    targetSdkVersion 21
    ...

    // Enabling multidex support.
    multiDexEnabled true
}

关于java - 当在 Android L 上构建并安装在 Android K 上时,用于测试崩溃的调试 APK 分发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40970075/

相关文章:

android - 在 android studio 中找不到 com.android.tools.build :gradle-experimental:3. 4.0

Java:相当于Python的str.format()

java - 根据第一个下拉列表的选择设置第二个框的下拉值

java - 找到二叉树中节点数之间的最大比率

android - JitPack:无法解析子存储库

安卓工作室 : Manifest merger failed with multiple errors with material:1. 0.0

java - 保持文本检索的正确风格

android - 具有与 dexFlavorEnterpriseDebug 相关的错误并以非零退出值 2 完成

android - 使用 withId 匹配器时 Espresso NoMatchingViewException

android - 在 Java 中使用 Gradle Play Publisher 的版本名称覆盖