美文网首页
Android multiDex 分包处理

Android multiDex 分包处理

作者: goodjcs | 来源:发表于2019-07-23 11:50 被阅读0次

在项目功能迭代中,项目文件增多,引用的的框架,第三方库会使你的apk包中的方法急剧上升,很快的就超过65k。

应用能正常运行在高版本的手机上,android 5.0-9.0 。当用一台android 4.4的手机运行程序时,无法正常启动应用。

运行时报错如下


RuntimeException: Unable to instantiate activity

ClassNotFoundException: Didn't find class  on path: DexPathList[[zip file apk"],nativeLibraryDirectories=[/data/app-lib/bao-2, /vendor/lib, /system/lib, /data/datalib]]

面向百度/google寻找问题解决方案,基本所列解决方案如下:

1、统一使用的jar包版本。例如surpportv4的版本,保持版本一致

2、清除build文件夹重新编译、运行

3、manifest文件中的声明采用全路径,不用简写

4、更新gradle版本、adt版本

然而这些方法对我的项目,均未能见效。不慌,还有一个大招:重启手机、重启电脑。

最后从官方文档找到解决方案

如果 minSdkVersion 设置为 21 或更高值

模块级 build.gradle 文件中将 multiDexEnabled 设置为 true,如此处所示:

android {
    defaultConfig {
        ...
        minSdkVersion 21 
        targetSdkVersion 28
        multiDexEnabled true
    }
    ...
}

如果 minSdkVersion 设置为 20 或更低

必须按如下方式使用 Dalvik 可执行文件分包支持库

  • 修改模块级 build.gradle 文件以启用 Dalvik 可执行文件分包,并将 Dalvik 可执行文件分包库添加为依赖项,如此处所示:
android {
    defaultConfig {
        ...
        minSdkVersion 15 
        targetSdkVersion 28
        multiDexEnabled true
    }
    ...
}

dependencies {
  compile 'com.android.support:multidex:1.0.3'
}
  • 修改 Application
    按如下方式对其进行更改以扩展 MultiDexApplicatio(如果可能):
public class MyApplication extends MultiDexApplication { ... }

或者,如果替换了 Application 类,但无法更改基本类,则可以改为替换 attachBaseContext() 方法并调用 MultiDex.install(this) 来启用 Dalvik 可执行文件分包:

public class MyApplication extends SomeOtherApplication {
  @Override
  protected void attachBaseContext(Context base) {
     super.attachBaseContext(base);
     MultiDex.install(this);
  }
}

构建应用后,Android 构建工具会根据需要构建主 DEX 文件 (classes.dex) 和辅助 DEX 文件(classes2.dexclasses3.dex 等)。然后,构建系统会将所有 DEX 文件打包到您的 APK 中。

运行时,Dalvik 可执行文件分包 API 使用特殊的类加载器来搜索适用于您的方法的所有 DEX 文件(而不是仅在主 classes.dex 文件中搜索)。

至此,您的应用可以运行在不同的Android版本了,不用担心方法数超限,启动闪退了

参考链接:
https://blog.csdn.net/xiaxl/article/details/83089944

https://www.cnblogs.com/wingyip/p/4496028.html

https://developer.android.com/studio/build/multidex

http://frogermcs.github.io/MultiDex-solution-for-64k-limit-in-Dalvik/

相关文章

网友评论

      本文标题:Android multiDex 分包处理

      本文链接:https://www.haomeiwen.com/subject/rudolctx.html