我可以只在Android调试版本中启用multidex吗?
亲爱的, 我在许多博客文章中读到,multidex应用程序的启动速度比普通应用程序慢。 我的应用程序使用了很多超过64k方法的库,所以我使用了multidex。但是,当我在发布版本中使用proguard时,最终的apk将小于64k方法 所以我的问题是:我能否在Android调试构建中启用multidex,这样就不会出现运行时错误?在发布版本中禁用multi-dex,因为我不需要它 如果是,如何进行我可以只在Android调试版本中启用multidex吗?,android,performance,android-multidex,Android,Performance,Android Multidex,亲爱的, 我在许多博客文章中读到,multidex应用程序的启动速度比普通应用程序慢。 我的应用程序使用了很多超过64k方法的库,所以我使用了multidex。但是,当我在发布版本中使用proguard时,最终的apk将小于64k方法 所以我的问题是:我能否在Android调试构建中启用multidex,这样就不会出现运行时错误?在发布版本中禁用multi-dex,因为我不需要它 如果是,如何进行 如果不是,Android是否足够聪明,能够加快启动速度,因为它应该认识到即使是multi-dex应
如果不是,Android是否足够聪明,能够加快启动速度,因为它应该认识到即使是multi-dex应用程序,应用程序也没有超过64k?是的,你可以。当您声明BuildType仅包含用于调试的multidex时:
buildTypes {
release {
multiDexEnabled false
}
debug {
multiDexEnabled true
}
}
您可以将min sdk版本更改为21 only for debug,而不是仅为调试启用multidex,这样gradle就可以使用ART加快索引速度:
android {
productFlavors {
// Define separate dev and prod product flavors.
dev {
// dev utilizes minSDKVersion = 21 to allow the Android gradle plugin
// to pre-dex each module and produce an APK that can be tested on
// Android Lollipop without time consuming dex merging processes.
minSdkVersion 21
}
prod {
// The actual minSdkVersion for the application.
minSdkVersion 14
}
}
...
buildTypes {
release {
runProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
}
}
dependencies {
compile 'com.android.support:multidex:1.0.0'
}
随着android studio变得“足够聪明”,建议的方法不再需要了。 事实上,当您使用minsdkversion21(旧方法)使用dex加快构建时间时,它现在会给您一个警告: 您不再需要dev模式来在运行期间启用多索引 开发,这可以打破API版本检查更少 在过去,我们的文档建议创建一个dev产品 flavor with的minsdk版本为21,以便启用多重索引 在开发过程中显著加快构建速度。解决办法 现在已经没有必要了,而且它还有一些严重的缺点,比如 中断API访问检查(因为真实版本不是 在最新版本的IDE和Gradle插件中, IDE自动传递所连接设备的API级别 用于部署,如果该设备至少为API 21,则 多重索引将自动启用,这意味着您将获得相同的结果 与开发产品风格一样,速度有好处,但没有缺点
是的,它甚至可以在棒棒糖之前的Android版本的multidex支持库中使用,不过需要一些技巧 首先为debug-build-in-build.gradle指定
multiDexEnabled
:
buildTypes {
...
debug {
...
multiDexEnabled true
}
}
然后在src/debug
下创建一个AndroidManifest.xml
文件
src/debug/AndroidManifest.xml
:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application
android:name="android.support.multidex.MultiDexApplication"
tools:replace="android:name"/>
</manifest>
但是你仍然必须(有条件地,基于
BuildConfig.DEBUG
的值)在代码中调用MultiDex.install(this)
,对吗?@KonradMorawski对于Android 5及以上版本不是必需的,我相信你可以省略multiDexEnabled false
对于release
@Mygod,是的,你不必为release指定,默认值为false。嗨!你在哪里找到这句话的?谢谢大家!@orospakr我认为这是Android Studio在构建文件中发出的警告消息,这就是我从中得到它的原因我认为在调试构建中仅使用multidex的目的是,当应用程序超过65k方法限制时,只有调试构建会受到影响(除非应用程序非常庞大)因为混淆和收缩发生在发布版本中。这不再需要了。最新版本的工具检测连接的设备/仿真器的API级别,并执行必要的多索引。您可以通过消除其他特性来进一步简化此解决方案。相反,您可以直接在debug
块中更改minSdkVersion
设置,就像完成一样。
public class MyDebugApplication extends MyApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}