解决方法数越界

MultiDex

解决方法数越界

资料

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中打包的类
@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}
  • 或者,直接使用 MultiDexApplication
  • 或者,继承使用 MultiDexApplication

自定义Dex

  • multidex的9个类必须打包到主dex,否则无法继续加载其他dex
  • maindexlist.txt格式,通过脚本或手动生成
com/test/multidextest/TestApplication.class
com/test/multidextest/MainActivity.class

// multidex
android/support/multidex/MultiDex.class
android/support/multidex/MultiDexApplication.class
android/support/multidex/MultiDexExtractor.class
android/support/multidex/MultiDexExtractor$1.class
android/support/multidex/MultiDex$V4.class
android/support/multidex/MultiDex$V14.class
android/support/multidex/MultiDex$V19.class
android/support/multidex/ZipUtil.class
android/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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值