1.使用原因

Android开发中经常会遇到方法数超过“65536”问题,这个问题是在大型项目中,比如引用了众多第三方库之后,几乎不可避免的问题。

2.集成步骤

2.1第一步

如果您的 minSdkVersion 设置为 21 或更高值,您只需在模块级 build.gradle 文件中将 multiDexEnabled 设置为 true,如此处所示:

android {    defaultConfig {        ...        minSdkVersion 21         targetSdkVersion 27        multiDexEnabled true    }    ...}

但是,如果您的 minSdkVersion 设置为 20 或更低值,则您必须按如下方式使用

android {    defaultConfig {        ...        minSdkVersion 15         targetSdkVersion 25        multiDexEnabled true    }    ...}dependencies {  compile 'com.android.support:multidex:1.0.3'}

2.2第二步

  • 如果您没有替换 Application 类,请编辑清单文件,按如下方式设置 标记中的 android:name
<?xml version="1.0" encoding="utf-8"?>"http://schemas.android.com/apk/res/android"    package="xxx">    ...        android:name="android.support.multidex.MultiDexApplication">        ...    
  • 如果您替换了 Application类,请按如下方式对其进行更改以扩展 MultiDexApplication
public class MyApplication extends MultiDexApplication { ... }
  • 或者,如果您替换了 Application 类,但无法更改基本类,则可以改为替换 attachBaseContext() 方法并调用 MultiDex.install(this)
public class MyApplication extends SomeOtherApplication {  @Override  protected void attachBaseContext(Context base) {     super.attachBaseContext(context);     Multidex.install(this);  }}

3.优化开发构建中的 Dalvik 可执行文件分包

为了缩短耗时更长的 Dalvik 可执行文件分包输出构建时间,请利用 productFlavors(一个开发定制和一个发布定制,具有不同的 minSdkVersion 值)创建两个构建变型。

android {    defaultConfig {        ...        multiDexEnabled true    }    productFlavors {        dev {//开发版            // Enable pre-dexing to produce an APK that can be tested on            // Android 5.0+ without the time-consuming DEX build processes.            minSdkVersion 21        }        prod {//发布版            // The actual minSdkVersion for the production version.            minSdkVersion 14        }    }    buildTypes {        release {            minifyEnabled true            proguardFiles getDefaultProguardFile('proguard-android.txt'),                                                 'proguard-rules.pro'        }    }}dependencies {    compile 'com.android.support:multidex:1.0.3'}

4 classes not found错误

build.gradle中开启multiDex,并指定配置文件,(注意multiDexKeep.promultiDexKeep.txt文件需要自己创建,放在项目的app文件夹下)

multiDexKeepFile 属性

您在 multiDexKeepFile 中指定的文件应该每行包含一个类,并且采用 com/example/MyClass.class 的格式。例如,您可以创建一个名为 multidex-config.txt 的文件,如下所示:

com/example/MyClass.classcom/example/MyOtherClass.class

然后,您可以按以下方式针对构建类型声明该文件:

android {    buildTypes {        release {            multiDexKeepFile file 'multidex-config.txt'            ...        }    }}

请记住,Gradle 会读取相对于 build.gradle 文件的路径,因此如果 multidex-config.txtbuild.gradle 文件在同一目录中,以上示例将有效。

multiDexKeepProguard 属性

multiDexKeepProguard 文件使用与 Proguard 相同的格式,并且支持整个 Proguard 语法。如需了解有关 Proguard 格式和语法的详细信息,请参阅 Proguard 手册中的 Keep Options 一节。

您在 multiDexKeepProguard 中指定的文件应该在任何有效的 ProGuard 语法中包含 -keep 选项。例如,-keep com.example.MyClass.class。您可以创建一个名为 multidex-config.pro 的文件,如下所示:

-keep class com.example.MyClass-keep class com.example.MyClassToo

如果您想要指定包中的所有类,文件将如下所示:

-keep class com.example.** { *; } // All classes in the com.example package

然后,您可以按以下方式针对构建类型声明该文件:

android {    buildTypes {        release {            multiDexKeepProguard 'multidex-config.pro'            ...        }    }}

更多相关文章

  1. Android 资源文件夹下的文件不能有大写字符,会导致R.java无法生成
  2. Android菜鸟日记 23获取数据方式- sql,Sdcard,assets,preference
  3. Android中监听语言变化的两种方式
  4. android的文件系统结构简单介绍
  5. Android实现横竖屏、全屏的几种方式
  6. android Q(10)发送通知Notification出现无法推送问题解决方式
  7. 安卓课程六 android常用布局属性的介绍

随机推荐

  1. Mac下配置Android(安卓)Stuido的HTTP Pro
  2. Android(安卓)WebView优化
  3. Android(安卓)Studio App设置Activity背
  4. 如何在Eclipse和Android(安卓)Studio中导
  5. Android(安卓)通知使用权(NotificationLi
  6. Android(安卓)http中文乱码问题
  7. Android(安卓)网络编程 API笔记 - java.n
  8. Android热修复技术
  9. Android视频录制命令screenrecord
  10. Android(安卓)Studio的gradle配置