【发布时间】:2017-09-29 21:38:39
【问题描述】:
我曾经在 API 21 AVD 中测试我的 Android 应用(最低 API 21,目标 25)。在 Android Studio 中点击“运行应用”按钮后,在 {project}/app/build/outputs/apk/ 中构建了一个调试 APK。然后,我将该 APK 复制到我的物理 API 25 设备以进行进一步测试。
自从在 Gentoo Linux 上将 Android Studio 从 2.2.3.0.145.3537739 升级到 2.3.0.8.162.3764568 后,这些自动生成的 APK 不再在物理设备上运行。应用程序在启动时立即崩溃,并且日志显示由“java.lang.ClassNotFoundException:找不到类 {我的主要活动类}”引起的“java.lang.RuntimeException:无法实例化活动”。
当我通过单击“构建 > 构建 APK”手动构建调试 APK 时,生成的 APK 与自动生成的文件大小不同,而且它在物理设备上运行而没有任何抱怨。
所以,实际上有两个问题:
1. 为什么手动生成的debug APK和自动生成的不一样?
2. 自 Android Studio 2.3 以来,是什么导致自动生成的在我的物理设备上失败?它适用于之前的所有 Studio 版本。
希望获得一些见解,即使存在 USB 调试并且将调试 APK 复制到设备的过程实际上毫无意义。 :-)
【问题讨论】:
-
你是否也升级了 android gradle 插件?或者可能是 sdk 工具?
-
有可能,我真的不知道最近的哪个更新实际上是造成新行为的原因。当前的 Gradle 插件是 2.3.0(之前是 2.2.3),而 Gradle 是 3.3(之前似乎是 2.14.1)。 Android SDK Tools 25.2.5、Android SDK Platform-tools 25.0.5、Android SDK Build-tools 25.0.2(有 25.0.3 可用,但不建议在 SDK 管理器中更新,为什么?)。
-
您有机会在 Android Studio 中使用即时运行吗?尝试从设置中禁用它,看看问题是否仍然存在
-
头奖。禁用即时运行后,APK 现在与手动生成的大小相同,并且可以在 API 21 AVD 和 API 25 物理设备中运行。 developer.android.com/studio/run/index.html 的文档甚至在“即时运行的限制”>“部署到多个设备”中提到即时运行的 APK 使用 API 特定代码,因此这些 API 21 APK 之前在API 25 设备。无论如何,我的工作流程毫无意义,但现在“错误”实际上是有道理的。非常感谢你,ahasbini!
-
随时可以。如果您对此满意,我会发布答案
标签: android apk android-studio-2.3