解决方法数越界

来源:互联网 发布:linux强制关闭程序 编辑:程序博客网 时间:2024/05/02 02:10

MultiDex

解决方法数越界

  • 资料
  • 配置
  • 用法
  • 自定义Dex

资料

Android 开发艺术探索 - 任玉刚

配置

  • 在模组的gradle中配置
android {    defaultConfig {        // enable multidex support        multiDexEnabled true    }}
  • Android 5.0 以下需要导包
dependencies {    compile 'com.android.support:multidex:1.0.1'}

用法

  • 在自定义Application中初始化,继续加载其他的 dex
  • Application的成员变量和代码块初始化在attachBaseContext方法之前,故不能访问未在主dex中打包的类
@Overrideprotected void attachBaseContext(Context base) {    super.attachBaseContext(base);    MultiDex.install(this);}
  • 或者,直接使用 MultiDexApplication
  • 或者,继承使用 MultiDexApplication

自定义Dex

  • multidex的9个类必须打包到主dex,否则无法继续加载其他dex
  • maindexlist.txt格式,通过脚本或手动生成
com/test/multidextest/TestApplication.classcom/test/multidextest/MainActivity.class// multidexandroid/support/multidex/MultiDex.classandroid/support/multidex/MultiDexApplication.classandroid/support/multidex/MultiDexExtractor.classandroid/support/multidex/MultiDexExtractor$1.classandroid/support/multidex/MultiDex$V4.classandroid/support/multidex/MultiDex$V14.classandroid/support/multidex/MultiDex$V19.classandroid/support/multidex/ZipUtil.classandroid/support/multidex/ZipUtil$CentralDirectory.class
  • 自定义maindexlist.txt指定主dex中包含的类
afterEvaluate {    println "afterEvaluate"    tasks.matching {        it.name.startsWith('dex')    }.each { dx ->        def listFile = project.rootDir.absolutePath + '/app/maindexlist.txt'        println "root dir:" + project.rootDir.absolutePath        println "dex task found: " + dx.name        if (dx.additionalParameters == null) {            dx.additionalParameters = []        }        dx.additionalParameters += '--multi-dex'  // 越界时产生分dex        dx.additionalParameters += '--main-dex-list=' + listFile  // 主dex中打包的类列表        dx.additionalParameters += '--minimal-main-dex'  // 只有指定的类才打包到主dex    }}
0 0
原创粉丝点击