ZipException
这个是打包的时候抛出的异常,这个异常也是Multidex
引发的,具体的异常信息在studio的messages面板看到
这个异常具体引起的原因:由于维护的是老项目,开始时项目中引用Multidex
是这样的
dependencies {
compile 'com.android.support:multidex:'
}
当我的studio从2.2.2升级到2.3.3,这样的引用不起作用了,在messages面板上同样可以看到错误信息
说的是我的Multidex
引用失败,经过一番折腾,也没能解决,最后我试着把
compile 'com.android.support:multidex:'
这个依赖注释掉,换成了jar包,直接依赖jar包
dependencies {
compile files('libs/android-support-multidex.jar')
}
有惊喜,真机上居然跑起来了,经测试,功能一切正常,当我以为就这样结束的时候,然后我点build–>build apk ,抛出了ZipException,没办法,解决吧,说的是Multidex
重复,那到处找找看看哪里重复,删掉一个不就好了,在我的D:\sdk\extras\android\support\multidex
下真的发现了有两个Multidex
的jar包,我以为删掉一个就搞定了,然并卵….
解决
最终还是回到了最原始的状态,删掉项目中libs里面的jar包,依赖系统的Multidex,偶尔我看到在项目中
External Libraries
中看到如图
然后我把依赖换成了和External Libraries
一样的版本号,两个问题都解决了,虽然就么简单,但碰到了上面两个异常也令人头疼.
dependencies {
compile 'com.android.support:multidex:1.0.1'
UNEXPECTED TOP-LEVEL EXCEPTION
遇到这个异常,说明项目中的方法已经爆棚了,具体的异常信息
在android5.0之前,每一个android应用中只会含有一个dex文件,但是因为Android系统本身的BUG,使得这个dex的方法数量被限制在65535之内,这就是著名的”64K(64*1024)”事件。为了解决这个问题,Google官方推出了这个类似于补丁一样的support-library。接下来我们一起看怎么使用Multidex
来解决这个问题
Multidex的使用
- 依赖
dependencies {
compile 'com.android.support:multidex:1.0.1'
- 2.MultiDex的build.gradle配置
apply plugin: 'com.android.application'
android {
// productFlavors是为了避免每次运行都把DEX重新加载一遍而设置的两套运行配置
productFlavors {
dev {
minSdkVersion 21
}
prod {
minSdkVersion 14
}
defaultConfig {
...
// 设置MultiDex可用
multiDexEnabled true
}
// 保证其他的lib没有被preDex
dexOptions {
preDexLibraries = false
}
}
其实只需简单这样配置即可
defaultConfig {
...
// 设置MultiDex可用
multiDexEnabled true
}
- 3.Application文件中注入MultiDex
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
}
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
// 将MultiDex注入到项目中
MultiDex.install(this);
}
}
或者直接使我们的MyApplication继承MultiDexApplication, 其实MultiDexApplication也只是注入了Multidex
public class MultiDexApplication extends Application {
public MultiDexApplication() {
}
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
至此我们的Multidex
配置完成,再也不用担心方法爆棚了