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

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

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

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

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

 问题描述:

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 

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

 2、在 defaultConfig 中添加

  defaultConfig {
        applicationId "com.maiji.magkaredoctor"
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
    }

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

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this) ;
    }

 二、编译OOM的问题

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

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

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

  dexOptions {
        incremental true
        javaMaxHeapSize "4g"
    }

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

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

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") 了。

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏纯洁的微笑

Spring Boot 2.0(五):Docker Compose+Spring Boot+Nginx+Mysql 实践

我知道大家这段时间看了我写关于 docker 相关的几篇文章,不疼不痒的,仍然没有感受 docker 的便利,是的,我也是这样认为的,I know your f...

4494
来自专栏子勰随笔

Eclipse使用中部分经验总结

1755
来自专栏散尽浮华

Gitblit版本服务器环境部署记录

Gitblit介绍 Gitblit 是一个纯 Java 库用来管理、查看和处理 Git 资料库.相当于 Git 的 Java 管理工具,支持linux系统。 G...

3075
来自专栏java一日一条

15 个 Android 通用流行框架大全

Android自带很多测试工具:JUnit,Monkeyrunner,UiAutomator,Espresso等

912
来自专栏张善友的专栏

memcached的最新状态

memcached 是由 Danga Interactive 开发并使用 BSD 许可的一种通用的分布式内存缓存系统。最新的稳定版本是memcached 1.4...

1909
来自专栏Java帮帮-微信公众号-技术文章全总结

Web-第三十二天 WebLogic中间件【悟空教程】

中间件(middleware)是基础软件的一大类, 属于可复用软件的范畴. 顾名思义,中间件处于操作系统软件与用户的应用软件的中间.

1483
来自专栏LanceToBigData

SpringBoot(一)走进Springboot的世界

什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使...

2989
来自专栏散尽浮华

Centos下SFTP双机高可用环境部署记录

SFTP(SSH File Transfer Protocol),安全文件传送协议。有时也被称作 Secure File Transfer Protocol 或...

4419
来自专栏菩提树下的杨过

spring cloud 学习(5) - config server

 分布式环境下的统一配置框架,已经有不少了,比如百度的disconf,阿里的diamand。今天来看下spring cloud对应的解决方案: ? 如上图,从架...

23910
来自专栏Java学习网

spring在ssh框架中的作用学习

spring在ssh框架中的作用学习 在SSH框假中spring充当了管理容器的角色。我们都知道Hibernate用来做持久层,因为它将JDBC做...

2389

扫码关注云+社区