前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android 方法数超过64k、编译OOM、编译过慢解决方案。

Android 方法数超过64k、编译OOM、编译过慢解决方案。

作者头像
听着music睡
发布2018-06-08 17:46:29
4590
发布2018-06-08 17:46:29
举报
文章被收录于专栏:Android干货Android干货

 目前将项目中的leancloud的即时通讯改为环信的即时通讯。当引入easeui的时候 出现方法数超过上限的问题。

 搜索一下问题,解决方法很简单。

 这里简单记录一下,顺序记录一下此解决方案导致的另一个问题。

 一、解决方法数超过64k的问题

 问题描述:

代码语言:javascript
复制
Error:The number of method references in a .dex file cannot exceed 64K.
Error:Execution failed for task ':app:transformClassesWithDexForRelease'.
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException:            java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: 

 解决方案:

 1、app目录下 build.gradle 

代码语言:javascript
复制
dependencies {
       ..... 
        compile 'com.android.support:multidex:1.0.1'
    }

 2、在 defaultConfig 中添加

代码语言:javascript
复制
  defaultConfig {
        applicationId "com.maiji.magkaredoctor"
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
    }

 3、在自己的写的继承Application的类中中添加方法

代码语言:javascript
复制
    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this) ;
    }

 二、编译OOM的问题

 引入环信的easeui,导致编译速度突然变慢,而且编译经常OOM

 查询了很多方法,测试都没有解决问题。最终解决办法

 app目录下的build.gradle文件的android{} 中添加

代码语言:javascript
复制
  dexOptions {
        incremental true
        javaMaxHeapSize "4g"
    }

  另外一个提高编译速度的方法:

  在app目录下的build.gradle文件的android{}中添加

代码语言:javascript
复制
tasks.whenTaskAdded { task ->
        if (task.name.contains("lint")
                || task.name == "clean"
                || task.name.contains("Aidl")
                || task.name.contains("mockableAndroidJar")
                || task.name.contains("UnitTest")
                || task.name.contains("AndroidTest")
                || task.name.contains("Ndk")
                || task.name.contains("Jni")
        ) {
            task.enabled = false
        }
    }

  注意,这里是取消这些任务,比如你项目中用到了Ndk,那你就别写 task.name.contains("Ndk") 了。

  切记:项目第一次编译的时候不要加这段代码,当第一次编译完之后再加,否则会出问题。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-07-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
即时通信 IM
即时通信 IM(Instant Messaging)基于腾讯二十余年的 IM 技术积累,支持Android、iOS、Mac、Windows、Web、H5、小程序平台且跨终端互通,低代码 UI 组件助您30分钟集成单聊、群聊、关系链、消息漫游、群组管理、资料管理、直播弹幕和内容审核等能力。适用于直播互动、电商带货、客服咨询、社交沟通、在线课程、企业办公、互动游戏、医疗健康等场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档