zoukankan      html  css  js  c++  java
  • Android将指定的.class打包到mainDex中

    1️⃣ 我们分包的时候会遇到一个问题,因为加载和初始化的问题,如果某个类不在mainDex中,那么程序就会报错,java.lang.NoClassDefFoundError。

    2️⃣ 在gradle中我们使用了如下代码可以将指定类型分配到mainDex中:

    afterEvaluate {
        tasks.matching {
            it.name.startsWith('dex')
        }.each { dx ->
           def listMain = project.rootDir.absolutePath+'/app/maindexlist.txt'
            if (dx.additionalParameters == null) {
                dx.additionalParameters = []
            }
           //改变dex方法数上线为50000,超过后进行拆分
           dx.additionalParameters += '--set-max-idx-number=50000'
            //方法数越界时则生成多个dex文件
            dx.additionalParameters += '--multi-dex'
            //maindexlist.txt文件为主dex中的类型配置文件
            dx.additionalParameters += '--main-dex-list=' + listMain
            //-main-dex-list指定的所有class会打包到主dex中
           dx.additionalParameters += '--minimal-main-dex'
      
        }
    }
    高版本的gradle需要使用如下方式配置:
    dexOptions {
            javaMaxHeapSize "4g"
            preDexLibraries = false
            additionalParameters = ['--multi-dex', '--main-dex-list=' + project.rootDir.absolutePath + '/app/maindexlist.txt', '--minimal-main-dex',
                                    '--set-max-idx-number=1000']
        }

    其实我们可以直接参考appuildintermediatesmulti-dexdebug目录下的maindexlist.txt文件
    在listMain中添加需要打进mainDex中的.class文件名称 如:
    android/support/multidex/MultiDex.class
    android/support/multidex/MultiDexApplication.class
    android/support/multidex/MultiDexExtractor.class
    android/support/multidex/MultiDexExtractor$1.class

    重新编译 打包 反编译后 我们会在反编译后的jar中看到新增的class文件

    具体multiDex分包配置可以参考 http://blog.csdn.net/gaozhan_csdn/article/details/51992100

      

    
    
  • 相关阅读:
    luogu P1396 营救
    luogu P2009 跑步
    2017 9 22
    2017 9 22 模拟赛T2
    2017 9 21
    luogu P1433 吃奶酪
    luogu p1867【Mc生存】经验值
    luogu p1387 最大正方形
    单例模式1
    Java 设计模式
  • 原文地址:https://www.cnblogs.com/limingblogs/p/8036530.html
Copyright © 2011-2022 走看看