-
Notifications
You must be signed in to change notification settings - Fork 168
Multidex Configuration Guide
There are 3 steps to enable it:
1 . enable multidex in your app/build.gradle:
android {
...
defaultConfig {
...
multiDexEnabled true
...
}
}
dependencies {
compile 'com.android.support:multidex:1.0.1'
...
}
2 . set OkBuck multidex related configuration in your root build.gradle:
NOTE THAT below are example, do not copy these into your configuration! See more at below.
okbuck {
...
linearAllocHardLimit = [
app: 7194304
]
primaryDexPatterns = [
app: [
'^com/github/piasy/okbuck/example/AppShell^',
'^com/github/piasy/okbuck/example/BuildConfig^',
'^android/support/multidex/',
'^com/facebook/buck/android/support/exopackage/',
'^com/github/promeg/xlog_android/lib/XLogConfig^',
'^com/squareup/leakcanary/LeakCanary^',
]
]
...
}
3 . linearAllocHardLimit
and primaryDexPatterns
values should be determined by experiment.
这俩参数目前需要通过实验确定。
The start value could be 65535 and your Application class full classpath, then run your ./buckw install
command, (e.g. ./buckw install -r app
).
If buck failed with error like:
DexWithClasses buck-out/gen/.okbuck/app/aar__design-23.1.1.aar#aar_prebuilt_jar,
dex.dex.jar with cost 514808 exceeds the max cost 65535 for a secondary dex file.
then you should set linearAllocHardLimit
an int value greater than 514808
(the number given by buck), usually you can set a big value like 10000000
.
linearAllocHardLimit
可以首先设置一个很大的数字,例如10000000
。使用OkBuck生成BUCK配置之后,执行./buckw的install/build命令,如果看到上述提示,就把这个参数改得大于提示的数字即可。
Then run your app, if it crashes with error like:
java.lang.RuntimeException: Unable to instantiate application com.github.piasy.okbuck.example.MyApp:
java.lang.ClassNotFoundException: Didn't find class "com.github.piasy.okbuck.example.MyApp" on path:
DexPathList[[zip file "/data/app/com.github.piasy.okbuck.example-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.github.piasy.okbuck.example-2, /vendor/lib, /system/lib]]
Then you should add the missing class path into the primaryDexPatterns
list, in format of:
primaryDexPatterns
可以先是一个空的数组,如果没有遇到上面的数字错误,或者已经解决了数字错误,安装APP之后运行,如果有上述找不到类的错误,就把相应的类加入到这个参数数组中,对应规则如下:
com.github.piasy.okbuck.example.MyApp
==> ^com/github/piasy/okbuck/example/MyApp^