我知道如何启用MultiDex支持,但我的问题恰恰相反.
似乎我的Android Studio的MultiDex选项由于某种原因默认启用.
当我解压缩生成的APK文件并在里面检查时,有两个文件.
classes.dex和classes2.dex.
你可能会说我的项目可能会达到64K的限制,但不是,它没有.
我也试过没有任何依赖和一些其他gradle设置,
但结果都是一样的.
我甚至把行multiDexEnabled设为false,但它也没有帮助.
所以这次我创建了另一个新的空项目,并点击了Run按钮而没有任何修改.
结果?相同.
如您所见,我有两个带有非常低引用的.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.