Android 64k方法数的问题你遇到了吗?

       随着Android版本的越来越高,手机搭配的Android版本也越来越高,我们在开发做测试的时候都会采用版本较高的手机进行开发,反而会忽视了低版本的测试,做好了高版本的适配,但低版本反而会与高版本发生冲突,明明在 gradle 中将 minSdkVersion 设置为21以下,自我感觉完全可以运行在5.0以下的手机上,确实有的可以运行,但有的安装在5.0以下的手机时莫名其妙的就崩溃了,这个时候就让我们非常头疼抓狂,当我们查看 log 日志的时候莫名其妙的说我们用的某个类或者方法不存在,之前我们明明好好的运行出来了,难道我们设置的最低版本不管用了,不用着急,我们有办法,因为我们遇到了配置方法数超过64k的问题。

 

       那到底什么是64k呢?官网也给了我们明确的解释:

      Android 应用 (APK) 文件包含 Dalvik Executable (DEX) 文件形式的可执行字节码文件,其中包含用来运行您的应用的已编译代码。Dalvik Executable 规范将可在单个 DEX 文件内可引用的方法总数限制在 65,536,其中包括 Android 框架方法、库方法以及您自己代码中的方法。在计算机科学领域内,术语千(简称 K)表示 1024(或 2^10)。由于 65,536 等于 64 X 1024,因此这一限制也称为“64K 引用限制”。

   (1)Android5.0以前:如果您的项目配置时所面向的 Dalvik 可执行文件分包使用的是 minSdkVersion 20 或更低版本,并且您将其部署到运行 Android 4.4(API 级别 20)或更低版本的目标设备上,则 Android Studio 会停止运行;

    (2)如果将应用的 minSdkVersion 设置为 21 或更高值,使用 Instant Run 时,Android Studio 会自动将应用配置为进行 Dalvik 可执行文件分包。由于 Instant Run 仅适用于调试版本的应用,您仍需配置发布构建进行 Dalvik 可执行文件分包,以规避 64K 限制。

       这种情况下我们就要在我们的代码中加一些配置:

        首先我们就要对 gradle 下手   配置:

android {

    defaultConfig {
        ...
        multiDexEnabled true
        }
 }


dependencies {
    ...

    compile 'com.android.support:multidex:1.0.1'
}

       然后我们还要对Application中设置   重写 attachBaseContext 方法:

@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
        MultiDex.install(this);
    }

}
   
      做完这两步工作,我们就可以把我们的安装包安装在5.0以上和5.0以下的手机上流畅的运行了,学习学习,代码再次敲起来。。。
    

       附官网链接:点击打开链接


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值