Skip to content

Commit 22d08b9

Browse files
author
tangxiaolv
committed
init
1 parent 5ca27f0 commit 22d08b9

File tree

3 files changed

+69
-243
lines changed

3 files changed

+69
-243
lines changed

.gitignore

Lines changed: 12 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,12 @@
1-
# Built application files
2-
*.apk
3-
*.ap_
4-
5-
# Files for the ART/Dalvik VM
6-
*.dex
7-
8-
# Java class files
9-
*.class
10-
11-
# Generated files
12-
bin/
13-
gen/
14-
out/
15-
16-
# Gradle files
17-
.gradle/
18-
build/
19-
20-
# Local configuration file (sdk path, etc)
21-
local.properties
22-
23-
# Proguard folder generated by Eclipse
24-
proguard/
25-
26-
# Log Files
27-
*.log
28-
29-
# Android Studio Navigation editor temp files
30-
.navigation/
31-
32-
# Android Studio captures folder
33-
captures/
34-
35-
# Intellij
36-
*.iml
37-
.idea/workspace.xml
38-
39-
# Keystore files
40-
*.jks
1+
/DexKnifePlugin/.idea/.name
2+
/DexKnifePlugin/.idea/compiler.xml
3+
/DexKnifePlugin/.idea/copyright/profiles_settings.xml
4+
/DexKnifePlugin/.idea/encodings.xml
5+
/DexKnifePlugin/.idea/gradle.xml
6+
/DexKnifePlugin/.idea/inspectionProfiles/Project_Default.xml
7+
/DexKnifePlugin/.idea/inspectionProfiles/profiles_settings.xml
8+
/DexKnifePlugin/.idea/misc.xml
9+
/DexKnifePlugin/.idea/modules.xml
10+
/DexKnifePlugin/.idea/qaplug_profiles.xml
11+
/DexKnifePlugin/.idea/runConfigurations.xml
12+
/DexKnifePlugin/.idea/vcs.xml

LICENSE

Lines changed: 0 additions & 201 deletions
This file was deleted.

README.md

Lines changed: 57 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,57 @@
1-
# Android-Easy-MultiDex
2-
Android傻瓜式分包插件
1+
#Android傻瓜式分包插件
2+
注1:不想看前半部分的话可以直接跳过到最下面配置部分。
3+
注2:本插件是基于[DexKnifePlugin 1.5.2](https://github.com/ceabie/DexKnifePlugin)优化改造而来,感谢ceabie的无私奉献。
4+
5+
##填坑之路
6+
`坑1:65536 ,So easy! `
7+
*原因:*Dalvik 的 invoke-kind 指令集中,method reference index 只留了 16 bits,最多能引用 65535 个方法。
8+
参考=>[由Android 65K方法数限制引发的思考](http://jayfeng.com/2016/03/10/%E7%94%B1Android-65K%E6%96%B9%E6%B3%95%E6%95%B0%E9%99%90%E5%88%B6%E5%BC%95%E5%8F%91%E7%9A%84%E6%80%9D%E8%80%83/).
9+
*解决:*
10+
```
11+
dependencies {
12+
compile 'com.android.support:MultiDex:1.0.1'
13+
}
14+
```
15+
继承 Application ,重写 attachBaseContext(Context)
16+
```
17+
@Override
18+
protected void attachBaseContext(Context base) {
19+
super.attachBaseContext(base);
20+
MultiDex.install(this);
21+
}
22+
```
23+
24+
`坑2:Too many classes in –main-dex-list ,what?`
25+
*原因:*通过上面的官方分包,已经把原Dex分为1主Dex加多从Dex,主Dex保留4大组件,Application,Annotation,multidex等及其必要的直接依赖。由于我们方法数已达到16W之巨,上百个Activity,所以成功的把主Dex又撑爆了。
26+
*解决:*
27+
gradle
28+
```
29+
afterEvaluate {
30+
tasks.matching {
31+
it.name.startsWith('dex')
32+
}.each { dx ->
33+
if (dx.additionalParameters == null) {
34+
dx.additionalParameters = []
35+
}
36+
dx.additionalParameters += '--set-max-idx-number=48000'
37+
}
38+
}
39+
```
40+
参考=>[Android Dex分包之旅](http://yydcdut.com/2016/03/20/split-dex/index.html)
41+
42+
`坑3:gradle 1.5.0之后不支持这种写法 ,what the fuck?`
43+
*原因:*官方解释Gralde`1.5.0`以上已经将(jacoco, progard, multi-dex)统一移到[Transform API](http://tools.android.com/tech-docs/new-build-system/transform-api)里,然而Transform API并没有想象的那么简单好用,最后翻遍Google终于找到一个兼容Gradle `1.5.0`以上的分包插件[DexKnifePlugin](https://github.com/ceabie/DexKnifePlugin)
44+
参考=>这篇[Android 热修复使用Gradle Plugin1.5改造Nuwa插件](http://blog.csdn.net/sbsujjbcy/article/details/50839263)比较好的介绍了Transform API的使用。
45+
46+
`坑4:NoClassDefFoundError ,are you kiding me?`
47+
*原因:*通过插件手动指定main dex中要保留的类,虽然分包成功,但是main dex中的类及其直接引用类很难通过手动的方式指定。
48+
*解决方式:*
49+
看了[美团Android DEX自动拆包及动态加载简介](http://tech.meituan.com/mt-android-auto-split-dex.html),他们是通过编写了一个能够自动分析Class依赖的脚本去算出主Dex需要包含的所有必要依赖。看来依赖脚本是跑不掉了。
50+
51+
`坑5:自定义脚本 ,read the fuck source!`
52+
插件的工作流程:
53+
54+
55+
56+
##配置部分
57+
`第一步:`

0 commit comments

Comments
 (0)