Skip to content

HolinB/Android-Easy-MultiDex

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

#Android傻瓜式分包插件 注1:不想看前半部分的话可以直接跳过到最下面配置部分。 注2:本插件是基于DexKnifePlugin 1.5.2优化改造而来,感谢ceabie的无私奉献。

##填坑之路 坑1:65536 ,So easy! *原因:*Dalvik 的 invoke-kind 指令集中,method reference index 只留了 16 bits,最多能引用 65535 个方法。 参考=>由Android 65K方法数限制引发的思考. 解决:

dependencies { 
	compile 'com.android.support:MultiDex:1.0.1'
}

继承 Application ,重写 attachBaseContext(Context)

@Override 
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}

坑2:Too many classes in –main-dex-list ,what? *原因:*通过上面的官方分包,已经把原Dex分为1主Dex加多从Dex,主Dex保留4大组件,Application,Annotation,multidex等及其必要的直接依赖。由于我们方法数已达到16W之巨,上百个Activity,所以成功的把主Dex又撑爆了。 解决: gradle

afterEvaluate { 
  tasks.matching { 
    it.name.startsWith('dex') 
  }.each { dx -> 
    if (dx.additionalParameters == null) { 
      dx.additionalParameters = []
    }  
    dx.additionalParameters += '--set-max-idx-number=48000' 
  } 
}

参考=>Android Dex分包之旅

坑3:gradle 1.5.0之后不支持这种写法 ,what the fuck? *原因:*官方解释Gralde1.5.0以上已经将(jacoco, progard, multi-dex)统一移到Transform API里,然而Transform API并没有想象的那么简单好用,最后翻遍Google终于找到一个兼容Gradle 1.5.0以上的分包插件DexKnifePlugin。 参考=>这篇Android 热修复使用Gradle Plugin1.5改造Nuwa插件比较好的介绍了Transform API的使用。

坑4:NoClassDefFoundError ,are you kiding me? *原因:*通过插件手动指定main dex中要保留的类,虽然分包成功,但是main dex中的类及其直接引用类很难通过手动的方式指定。 解决方式: 看了美团Android DEX自动拆包及动态加载简介,他们是通过编写了一个能够自动分析Class依赖的脚本去算出主Dex需要包含的所有必要依赖。看来依赖脚本是跑不掉了。

坑5:自定义脚本 ,read the fuck source! 插件的工作流程:

##配置部分 第一步:

About

Android,multidex,splitdex,分包插件

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Java 74.7%
  • Groovy 25.3%
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy