如何在Android Studio中禁用MultiDex?

我知道如何启用MultiDex支持,但我的问题恰恰相反.

似乎我的
Android Studio的MultiDex选项由于某种原因默认启用.

当我解压缩生成的APK文件并在里面检查时,有两个文件.

classes.dex和classes2.dex.

你可能会说我的项目可能会达到64K的限制,但不是,它没有.
我也试过没有任何依赖和一些其他gradle设置,
但结果都是一样的.
我甚至把行multiDexEnabled设为false,但它也没有帮助.
所以这次我创建了另一个新的空项目,并点击了Run按钮而没有任何修改.
结果?相同.

《如何在Android Studio中禁用MultiDex?》

《如何在Android Studio中禁用MultiDex?》

如您所见,我有两个带有非常低引用的.dex文件.
我不明白这里发生了什么……

我试图禁用MultiDex的原因是,

首先,我的应用程序非常简单,有一些依赖项,所以只是不需要它.

其次,该应用程序需要支持更旧的Android操作系统.

第三,我想避免旧Android设备中的Dalvik linearAlloc限制.

最后,我想知道确切的原因.

一个有趣的事实.
我反编译并查看apk文件,找不到默认创建的名为MainActivity的类,而应用程序在我的手机上按预期运行.
我的真实项目也是如此.该应用程序运行良好但在类* .dex中没有我的代码.是的,如果应用程序没有任何问题,这很好,但它有点烦人,因为我有时想反编译并看到结果代码.

最佳答案 像Instant Run这样的东西改变了APK的本质.从IDE运行应用程序时获得的内容与通过其他方式(在菜单中构建APK,gradle任务等)构建应用程序时获得的内容不同.

这是我禁用Instant Run的原因之一,因为我是那些想要运行我的用户运行的应用程序的疯狂的人之一.

与用户运行的内容相比,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.

点赞