Dex分包Android-Easy-MultiDex、规则

本文详细介绍了如何在Android项目中使用Android-Easy-MultiDex进行多Dex分包,包括在build.gradle中配置主Dex列表,修改dexknife.txt文件以确保关键类被正确包含,以及解决65535类限制的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.**(不是启动相关类的时候,可以用这个办法)

 

 

 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值