我知道如何启用MultiDex支持,但我的问题恰恰相反。 似乎我的Android Studio的MultiDex选项由于某种原因默认启用。 当我解压缩生成的APK文件并在里面检查时,有两个文件。
classes.dex 和 classes2.dex 。
你可能会说我的项目可能会达到64K的限制,但不是,它没有。
我也试过没有任何依赖和一些其他gradle设置,
但结果都是一样的。
我甚至放了multiDexEnabled false
行,但它也没有帮助。
所以这次我创建了另一个新的空项目,并点击运行按钮而不做任何修改。
结果?相同。
正如您所看到的,我有两个带有非常低引用的.dex文件。 我不明白这里发生了什么......
我试图禁用MultiDex的原因是,
首先,我的应用程序非常简单,有一些依赖,所以只是不需要它。
其次,应用程序需要支持更旧的Android操作系统。
第三,我想避免旧Android设备中的 Dalvik linearAlloc 限制。
最后,我想知道确切原因。
另一个有趣的事实。 我反编译并查看了apk文件,并且无法找到默认创建的名为 MainActivity 的类,而应用程序在我的手机上按预期运行。 我的真实项目也是如此。该应用程序运行良好,但我的代码没有* .dex。是的,如果应用程序没有任何问题,它可以正常运行,但它有点烦人,因为我有时想要反编译并查看生成的代码。
答案 0 :(得分:1)
像Instant Run这样的东西改变了APK的本质。从IDE运行应用程序时获得的内容与通过其他方式构建应用程序时获得的内容不同(在菜单中构建APK,gradle
任务等)。
这是我禁用即时运行的原因之一,因为我是那些想要运行我的用户运行的应用程序的疯狂人之一。
与用户运行的内容相比,Android Studio 3.0对APK进行了另一项更改:it adds android:testOnly="true"
, preventing that APK from being installed normally。这可能是一个安全措施,因此您只能分发通过其他构建机制制作的APK。
在您的情况下,根据评论,似乎Instant Run是导致multidex样式行为的原因。这可能与Instant Run尝试修补已安装的APK的方式有关,而不是将新的APK推送到设备或模拟器。
因此,要么禁用即时运行,要么不分析运行输出,而是关注通过其他方式构建的APK。