zoukankan      html  css  js  c++  java
  • Android项目开发遇到的问题(64K的错误)的解决之路,从入坑到出坑

          自己一个android项目,一直以来进展还算顺利,没有遇到什么严重性的问题,今天准备给同事手机上安装一下玩玩,谁知丢人丢大,无法build apk!报错!my god,我开发没问题啊,我手机连上usb,然后android studio里面运行,很顺利,能够正确安装。

    image

    但是换同事的手机却不行,编译报错,不行,再试下我的手机,依然正常,换同事手机就不行!!

    我的第一反应是手机版本问题!果然,我手机6.0,同时手机依然是:4.4.4,好吧,去看看我的项目配置:

    image

    好吧,貌似是支持4.4.4的啊,为毛呢?

    看错误信息吧(我的跳坑之路就此开始):

    image

    第二个错误看不懂,不过第一个秒懂,传说中的64K,,方法数超出:

    有个网址,但是需要FQ,肯英文吧,不会FQ的童鞋百度很多官方解决方案的翻译,大概步骤如下:

    1.添加一个multidex包引用,但是,在android studio module的Dependenices标签里添加却找不到,空的

    image

    直接添加吧,在build.gradle文件中修改:如下,

    添加:compile 'com.android.support:multidex:1.0.0'

    修改defaultconfig配置:添加:

    multiDexEnabled = true

    image

    android {
        compileSdkVersion
    21
        buildToolsVersion
    "21.1.0"

        defaultConfig
    {
           
    ...
            minSdkVersion
    14
            targetSdkVersion
    21
           
    ...

           
    // Enabling multidex support.
            multiDexEnabled
    true
       
    }
       
    ...
    }

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

    3.修改manifest声明修改

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
       
    package="com.example.android.multidex.myapplication">
       
    <application
            ...
           
    android:name="android.support.multidex.MultiDexApplication">
            ...
       
    </application>
    </manifest>

    下一步之前记得Clear一下项目,会加载'com.android.support:multidex:1.0.0'包

    如果有自己的Application,继承MulitDexApplication。如果当前代码已经继承自其它Application没办法修改那也行,就重写 Application的attachBaseContext()这个方法。由于我有自己的Application用于捕获异常,所以我就改继承

    原来:image

    修改后:image

    参考地址:http://blog.zongwu233.com/the-touble-of-multidex

    到此完成,编译项目,经过漫长的等待,编译,报错!!!

    image

    好吧,这次错误变成了大概就是内存溢出之类的吧,

    谷歌出了一个网站:http://www.tuicool.com/articles/bEFNJj

    得到了处理方法,在build.gradle中添加,具体解释看上面的网站:

    image

    OK ,终于完成了:

    image

    成功编译出apk:

    image

    到此,64K不再报错,看成果 rar加压后有两个dex文件,就是把方法分开了吧

    image

    64K解决之路到此结束!

    注意:项目就几个功能:怎么会造成方法数超出64K呢,还有分析apk文件怎么会有7M之大?

    深入分析问题根源:

    我的项目就一个登录页面+一个注册页面 +2个功能页面,一共也才不到10个功能,怎么方法数会超呢,感觉这个才是问题的根源,不解决这个问题,是治标不治本!!

    于是,谷歌再谷歌,终于被我找到一个文章,

    http://blog.csdn.net/qq376430645/article/details/49885399

    开始了我的APK分析之路:

    按照文章指引:分析了我的apk方法数组成,其中一个引起了我的注意:

    image

    google的?方法数占到将近5W个,难怪,又分析了下别人的apk,是没有这个的,所以基本锁定就是这个问题,然后查看项目是否引用了google的一些东西?一查,还真有一个:

    image

    就是这个啦,我好像没有用过这个啊,什么时候加上的,不知道,管他呢,删了再说

    删除,编译:

    image

    报错,分析下吧:

    项目中这个家伙:

    imageimage

    知道了,这些是我研究Fragment时添加的

    image

    好吧,完全没用,干掉

    再编译,正常,吧刚才解决64K问题时候修改以及添加的代码都复原,

    image

    image

    image

    编译,正常:

    image

    apk大小 3M多一点,减少了一半!!!

    完结!!!!!

    关于64K问题的解决方法,采用了最简单的,其中参考网址中提到哪些QQ,微信,FB的解决办法,由于技术有限,还没勇气去实现!!

    参考:

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

    http://blog.zongwu233.com/the-touble-of-multidex

    http://www.tuicool.com/articles/bEFNJj

    http://dwz.cn/3TFLCx

    慎于行,敏于思!GGGGGG
  • 相关阅读:
    文件上传之前先进行预览
    代码规范
    ESLint 配置文件 .eslintrc 示例及说明
    JQ ajax全局事件 (个人学习笔记)
    JQ ajax (个人学习笔记)
    js 滚动加载图片(懒加载)实现原理 (个人学习笔记)
    js 正则 (个人学习笔记)
    js 理解闭包 (个人学习笔记)
    js 改变this指向的几种方法(个人学习笔记)
    js 理解this指向(个人学习笔记)
  • 原文地址:https://www.cnblogs.com/GarsonZhang/p/5737840.html
Copyright © 2011-2022 走看看