-
Notifications
You must be signed in to change notification settings - Fork 162
为什么Activity不能加入maindex中? #18
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
@Dwan-xie 看下配置文件 |
#为注释符 #-----------主Dex中必要依赖的脚本配置----------- #-----------附加类----------- 如果你想要某个包路径在maindex中,则使用 -keep 选项,即使他已经在分包的路径中.若为空,不保留任意类-keep com.babytree.apps.pregnancy.activity.knowledge.base.** 保留单个类.-keep com.babytree.apps.pregnancy.db.LocationDbAdapter 这条配置可以指定这个包下类在第二及其他dex中.#-split 不包含Android gradle 插件自动生成的miandex列表.(不使用建议的依赖树,注释掉表示使用,否则-just activity无效)#-donot-use-suggest (分割每个dex包的方法数上限) 扩展参数:例如 --set-max-idx-number=50000如果出现 DexException: Too many classes in --main-dex-list, main dex capacity exceeded:表明限制的方法数小于main dex的必要方法数,调大到合适数值即可-dex-param --set-max-idx-number=50000 不进行dex分包, 直到 dex 的id数量超过 65536.(设置自动执行分包策略)#-auto-maindex 显示miandex的日志.-log-mainlist |
在红米2手机上出现各种类找不到,但其他手机都没有问题。而且我在maindexlist中都找到这些类?这种情况有遇到过吗? |
@Dwan-xie 我这边没有遇到过这种情况。红米2也测试过没问题,不知道你那边怎么配置的 |
@TangXiaoLv 就是上面发的配置,红米2上不是activity类找不到而是一些其他引用类找不到,是否跟混淆有关? |
例如一些工具类等等的 |
@Dwan-xie 混淆也是从mapping里拿的,你测试下不混淆跑在红米2上会不会有问题 |
@TangXiaoLv 好的,您帮忙看一下我上面的配置是否写的有问题? |
理论上没问题,你可以把-dex-param --set-max-idx-number=50000注释掉看看,或者检查你的main dex中是否有缺少类 |
@TangXiaoLv 我在maindexlist都能找到缺少的类,但这台手机就是混classnotfound |
@TangXiaoLv 出现了多次这个信息 |
@TangXiaoLv 发现问题了,是混淆导致的。 |
@Dwan-xie 好,我本地模拟下 |
@TangXiaoLv 我们目录结构是旧的eclipse的, |
@TangXiaoLv 我调整了目录结构,变成了studio的样式,现在连mutlidex都打不进maindexlist了。。。。。 |
@Dwan-xie 看下你的gradle 配置 |
root gradle:
buildscript { allprojects { app gradle: android {
} dexKnife{
} dependencies { |
library gradle: android {
} dependencies { |
@Dwan-xie 是module所有的依赖都找不到,还是个别的? |
@TangXiaoLv 目前来看是个别的,我开了log之后看到会出现很多次的 |
@Dwan-xie 正常,你有多个flavors就这样,只有一个当前的flavors才打开, |
@Dwan-xie 你可以把个别的单独keep |
@Dwan-xie 类似-keep com.babytree.apps.pregnancy.db.LocationDbAdapter.class |
@TangXiaoLv 我现在是单独keep的,但是有一个类我keep了还是会找不到。 |
@Dwan-xie 用studio 的apk分析工具 查看下 main dex里有没有包含你们的那个缺少类,排查下是加载dex问题还是打包dex问题,你那个bug手机是什么系统版本? |
@TangXiaoLv 手机型号是红米2-4.4.4 |
@Dwan-xie 没打进去com.babytree.apps.pregnancy.utils.d |
@TangXiaoLv 请教一个问题,这个依赖关系不是由build-tools帮我们生成的吗? |
@Dwan-xie 能动态计算的依赖关系只能是-just activity 里的,-keep的不计算依赖关系,单纯的保留单个类文件 |
@TangXiaoLv application中的依赖关系也是不计算的吗?需要我们手动放入? |
@Dwan-xie 如果你的类在activity里并且just 了,可以被计算出来,如果在keep的类里,依赖是计算不出的,需要单独keep |
@TangXiaoLv 那大概明白了,这些找不到的类都是application中初始化的一些类,activity的依赖类基本都没问题 |
@Dwan-xie application,service、content provider、broadcast receiver,默认全部动态计算加载依赖,activity手动指定 |
@Dwan-xie 一般出现几个找不到的依赖直接keep就好了 |
@TangXiaoLv 那就不应该了呀,这个utils类是在appliaction中初始化的,它的依赖关系不应该不需要我们来单独处理么?
|
@Dwan-xie 你那个是几级依赖层级 |
@TangXiaoLv 这次这个报错com.babytree.apps.pregnancy.utils.d,是在project里面的PregnancyApplication ,应该算是第一层级 |
Could not find class 'com.babytree.apps.pregnancy.activity.knowledge.base.a.a', referenced from method com.babytree.apps.pregnancy.PregnancyApplication.c 我上传了一下maindex,这几个类都能在maindexlist找到,不知道为什么了。。。。 |
@Dwan-xie 关闭分包插件,强迫编译器默认分包,看下是否有出错; class no def 一般是由于你的proguard-rules 的配置不当,或者multidex功能错误照成,DexKnife只生成dex 的maindexlist,不参与编译过程,即使你不使用DexKnife,手动编写maindexlist,一样也有可能会遇到类似的问题。 |
看下你的 MultiDex install 是在哪执行的 |
一开始加入了9个-just activity 可以正确分包
后来又加入了2个activity 这两个activity就不能被加入maindex
The text was updated successfully, but these errors were encountered: