Could not find com.android.support:multidex;java.util.ZipException;UNEXPECTED TOP-LEVEL等异常解决;

本文介绍了解决Android项目中因方法数超过65535限制导致的Multidex问题及ZipException异常的具体步骤。通过正确配置依赖、build.gradle参数及在Application类中注入MultiDex,有效避免了这些问题。

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的使用

    1. 依赖
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 配置完成,再也不用担心方法爆棚了

给定引用内容未提及“Android Studio中java.util.zip.ZipException: Not in GZIP format错误的解决办法”的相关信息,不过可从常见的ZipException问题解决思路来推测可能的解决办法。 通常ZipException与文件读取、压缩格式相关。对于“Not in GZIP format”错误,可能是文件本身不是有效的GZIP格式,或者文件在传输、存储过程中损坏。 解决办法可能如下: 1. **检查文件完整性**:确认相关的压缩文件是否完整,是否在下载或传输过程中损坏。可以尝试重新下载相关的文件。 2. **清除缓存**:清除Android Studio的缓存。在Android Studio中,选择`File` -> `Invalidate Caches / Restart`,然后选择`Invalidate and Restart`。 3. **检查依赖库**:确认项目中引用的依赖库是否正确,是否存在版本不兼容或损坏的情况。可以尝试更新或重新引入相关的依赖库。 ```groovy // 在build.gradle文件中更新依赖库 dependencies { implementation 'com.example:library:1.0.0' // 替换为实际的依赖库 } ``` 4. **检查代码中文件操作**:如果代码中有涉及到文件读取、解压等操作,检查代码是否正确处理了文件格式。确保代码中没有误将非GZIP格式的文件当作GZIP文件处理。 ```java import java.io.FileInputStream; import java.io.IOException; import java.util.zip.GZIPInputStream; public class GzipExample { public static void main(String[] args) { try { FileInputStream fis = new FileInputStream("file.txt.gz"); GZIPInputStream gis = new GZIPInputStream(fis); // 处理文件内容 gis.close(); fis.close(); } catch (IOException e) { e.printStackTrace(); } } } ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值