Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android Studio中禁用MultiDex?_Android_Android Multidex - Fatal编程技术网

如何在Android Studio中禁用MultiDex?

如何在Android Studio中禁用MultiDex?,android,android-multidex,Android,Android Multidex,我知道如何启用多索引支持,但我的问题恰恰相反。 似乎出于某种原因,我的Android Studio的MultiDex选项在默认情况下处于启用状态。 当我解压生成的APK文件并检查内部时,有两个文件 classes.dex和classes2.dex 你可能会说我的项目可能会达到64K上限,但不,它不会。 我也尝试过没有任何依赖项和其他gradle设置, 但结果都是一样的。 我甚至将行multiDexEnabled设置为false,但也没有任何帮助。 因此,这次我创建了另一个新的空项目,并点击运行按

我知道如何启用多索引支持,但我的问题恰恰相反。 似乎出于某种原因,我的Android Studio的MultiDex选项在默认情况下处于启用状态。 当我解压生成的APK文件并检查内部时,有两个文件

classes.dexclasses2.dex

你可能会说我的项目可能会达到64K上限,但不,它不会。 我也尝试过没有任何依赖项和其他gradle设置, 但结果都是一样的。 我甚至将行
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按钮总是创建多索引文件,无论它是否是新安装的:)