如何在Android Studio中禁用MultiDex?
我知道如何启用多索引支持,但我的问题恰恰相反。 似乎出于某种原因,我的Android Studio的MultiDex选项在默认情况下处于启用状态。 当我解压生成的APK文件并检查内部时,有两个文件 classes.dex和classes2.dex 你可能会说我的项目可能会达到64K上限,但不,它不会。 我也尝试过没有任何依赖项和其他gradle设置, 但结果都是一样的。 我甚至将行如何在Android Studio中禁用MultiDex?,android,android-multidex,Android,Android Multidex,我知道如何启用多索引支持,但我的问题恰恰相反。 似乎出于某种原因,我的Android Studio的MultiDex选项在默认情况下处于启用状态。 当我解压生成的APK文件并检查内部时,有两个文件 classes.dex和classes2.dex 你可能会说我的项目可能会达到64K上限,但不,它不会。 我也尝试过没有任何依赖项和其他gradle设置, 但结果都是一样的。 我甚至将行multiDexEnabled设置为false,但也没有任何帮助。 因此,这次我创建了另一个新的空项目,并点击运行按
multiDexEnabled设置为false
,但也没有任何帮助。
因此,这次我创建了另一个新的空项目,并点击运行按钮而不做任何修改。
结果如何?一样
如您所见,我有两个.dex文件,引用非常少。
我不明白这里发生了什么
我试图禁用MultiDex的原因是
首先,我的应用程序非常简单,有几个依赖项,所以不需要它
其次,该应用程序需要支持更旧的Android操作系统
第三,我想避免旧安卓设备中的Dalvik Linearloc限制
最后,我想知道确切的原因
还有一个有趣的事实。
我反编译并查看了apk文件,找不到名为MainActivity的类,该类是在应用程序按预期在我的手机上运行时默认创建的。
我的真实项目也是如此。该应用程序运行良好,但类*.dex中没有我的代码。是的,如果应用程序运行没有任何问题就可以了,但这有点烦人,因为我有时想反编译并查看结果代码。像Instant Run这样的事情会改变APK的性质。从IDE运行应用程序时得到的结果与通过其他方式(菜单中的build APK、
gradle
tasks等)构建应用程序时得到的结果不同
这就是我禁用Instant Run的原因之一,因为我是那些想要运行与我的用户运行的应用程序相同的疯子之一
Android Studio 3.0对APK进行了另一项更改,与您的用户将运行的内容相比:。这可能是一种安全措施,所以您只能分发通过其他构建机制生成的APK
在您的案例中,根据注释,似乎是Instant Run导致了multidex样式的行为。这可能与Instant Run如何尝试修补已安装的APK,而不是将新的APK推送到设备或模拟器有关
所以,要么禁用即时运行,要么不分析运行输出,而是关注通过其他方式构建的APK。我刚刚在Android Studio 3.0中创建了一个废弃项目(
minSdkVersion
21,空活动,无appcompat-v7
),通过主菜单中的构建>构建APK构建了APK,我无法重现您的问题。我将minSdkVersion
更改为9,但仍然无法重现该问题。尝试使用Build>buildapk(s)而不是Run,看看这是否会改变你的行为。@commonware多么愚蠢。。我认为这是完全相同的过程,但正如您所说,构建APK解决了这个问题。非常感谢你。顺便问一下,你的Play按钮是否也有同样的问题?假设“Play”是指带有“Run'app'”工具提示的按钮,那么没有,我得到的结果与Build APK相同。但是,我已禁用即时运行。对于像Instant Run这样的东西,您从运行过程中获得的APK将不同于从构建APK中获得的APK——请参阅以了解另一个区别。所以,试着暂时禁用Instant Run,看看会发生什么。@Commonware首先,谢谢你的链接。尽管我还在使用Android Studio 2.2,但它确实很有帮助,我永远也不会知道。但是当我在APK中检查结果AndroidManifest.xml时,它没有android:testOnly属性。也许是因为它不是3.0的。是的,关闭Instant Run完成了任务!如果你发布你的答案,我会接受。“可能是因为它不是3.0”--是的,这种行为在3.0中是新出现的。我不知道是否只有我,但无论如何,出于好奇,我做了另一个测试,结果是,在Instant Run on下按Run按钮总是创建多索引文件,无论它是否是新安装的:)