Dex分包Android-Easy-MultiDex、規則

Android-Easy-MultiDex是基於DexKnifePlugin

建議先熟悉一下這2個東西

分包總共有2個地方,可以配置一個app的build.gradle、一個是dexknife.txt

一、在build.gradle的android{}插入這段代碼,表示計算這幾個activity的依賴,並加入maindexlist中

/需要加入主dex的Activity列表
    def mainDexListActivity = ['SplashActivity1', 'LoginActivity','HomeTabActivity','WebActivity']
    afterEvaluate {
        tasks.matching {
            it.name.startsWith('dex')
        }.each { dx ->
            if (dx.additionalParameters == null) {
                dx.additionalParameters = []
            }
            dx.additionalParameters += '--set-max-idx-number=48000'
            dx.additionalParameters += "--main-dex-list=$projectDir/multidex.keep".toString()
        }

        project.tasks.each { task ->
            if (task.name.startsWith('collect') && task.name.endsWith('MultiDexComponents')) {
                println "main-dex-filter: found task $task.name"
                task.filter { name, attrs ->
                    String componentName = attrs.get('android:name')
                    if ('activity'.equals(name)) {
                        def result = mainDexListActivity.find {
                            componentName.endsWith("${it}")
                        }
                        return result != null
                    } else {
                        return true
                    }
                }
            }
        }

    }

二、修改dexknife.txt文件

我使用的規則:啓動類相關的!

1.-split **.**

2.找到Application以及Application的代理類查看他引入的包,以及他的依賴。例如:-keep me.jessyan.**

3.找到SplashActivity引入的包,(這一步gradle已經做了)

4.註釋掉-donot-use-sugges

# 不包含Android gradle 插件自動生成的miandex列表.(不使用建議的依賴樹,註釋掉表示使用,
否則-just activity無效)
#-donot-use-suggest

5.添加如下依賴

-keep android.support.v4.app.**
-keep android.support.v7.app.**

這樣,主dex的類就差不多可以了。如果不願意自己加也可以交給gradle算,寫法是類似的。

三、分了包dex依然報65535

原因,可能是你沒有-split**.**在你添加新的library時(比如okhttp3),直接添加到主dex中了。那麼主dex依然爆炸。

解決辦法1. -split **.**清空全部主dex,再自己keep。重新管理主dex

解決辦法2. 可以的話 -split okhttp3.**(不是啓動相關類的時候,可以用這個辦法)


 

 


 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章