当前位置: 移动技术网 > IT编程>移动开发>Android > Android Multidex使用,方法数超过“65536”问题的解决方式

Android Multidex使用,方法数超过“65536”问题的解决方式

2018年12月09日  | 移动技术网IT编程  | 我要评论

5.2亿双色球巨奖,pk10的交流群777193.,汤灿的葬礼

1.使用原因

android开发中经常会遇到方法数超过“65536”问题,这个问题是在大型项目中,比如引用了众多第三方库之后,几乎不可避免的问题。

2.集成步骤

2.1第一步

如果您的 minsdkversion 设置为 21 或更高值,您只需在模块级 build.gradle 文件中将 multidexenabled 设置为 true,如此处所示:

android {
 defaultconfig {
  ...
  minsdkversion 21 
  targetsdkversion 27
  multidexenabled true
 }
 ...
}

但是,如果您的 minsdkversion 设置为 20 或更低值,则您必须按如下方式使用

android {
 defaultconfig {
  ...
  minsdkversion 15 
  targetsdkversion 25
  multidexenabled true
 }
 ...
}

dependencies {
  compile 'com.android.support:multidex:1.0.3'
}

2.2第二步

如果您没有替换 application 类,请编辑清单文件,按如下方式设置 标记中的 android:name:



 
  ...
 

如果您替换了 application类,请按如下方式对其进行更改以扩展 multidexapplication:

public class myapplication extends multidexapplication { ... }

或者,如果您替换了 application 类,但无法更改基本类,则可以改为替换 attachbasecontext() 方法并调用 multidex.install(this) :

public class myapplication extends someotherapplication {
  @override
  protected void attachbasecontext(context base) {
  super.attachbasecontext(context);
  multidex.install(this);
  }
}

3.优化开发构建中的 dalvik 可执行文件分包

为了缩短耗时更长的 dalvik 可执行文件分包输出构建时间,请利用 productflavors(一个开发定制和一个发布定制,具有不同的 minsdkversion 值)创建两个构建变型。

android {
 defaultconfig {
  ...
  multidexenabled true
 }
 productflavors {
  dev {//开发版
// enable pre-dexing to produce an apk that can be tested on
// android 5.0+ without the time-consuming dex build processes.
minsdkversion 21
  }
  prod {//发布版
// the actual minsdkversion for the production version.
minsdkversion 14
  }
 }
 buildtypes {
  release {
minifyenabled true
proguardfiles getdefaultproguardfile('proguard-android.txt'),
 'proguard-rules.pro'
  }
 }
}
dependencies {
 compile 'com.android.support:multidex:1.0.3'
}

4 classes not found错误

在build.gradle中开启multidex,并指定配置文件,(注意multidexkeep.pro和multidexkeep.txt文件需要自己创建,放在项目的app文件夹下)

multidexkeepfile 属性

您在 multidexkeepfile 中指定的文件应该每行包含一个类,并且采用 com/example/myclass.class 的格式。例如,您可以创建一个名为 multidex-config.txt 的文件,如下所示:

com/example/myclass.class
com/example/myotherclass.class

然后,您可以按以下方式针对构建类型声明该文件:

android {
 buildtypes {
  release {
multidexkeepfile file 'multidex-config.txt'
...
  }
 }
}

请记住,gradle 会读取相对于 build.gradle 文件的路径,因此如果 multidex-config.txt 与 build.gradle 文件在同一目录中,以上示例将有效。

multidexkeepproguard 属性

multidexkeepproguard 文件使用与 proguard 相同的格式,并且支持整个 proguard 语法。如需了解有关 proguard 格式和语法的详细信息,请参阅 proguard 手册中的 keep options 一节。

您在 multidexkeepproguard 中指定的文件应该在任何有效的 proguard 语法中包含 -keep 选项。例如,-keep com.example.myclass.class。您可以创建一个名为 multidex-config.pro 的文件,如下所示:

-keep class com.example.myclass
-keep class com.example.myclasstoo

如果您想要指定包中的所有类,文件将如下所示:

-keep class com.example.** { *; } // all classes in the com.example package

然后,您可以按以下方式针对构建类型声明该文件:

android {
 buildtypes {
  release {
multidexkeepproguard 'multidex-config.pro'
...
  }
 }
}

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网