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

简介:  目前将项目中的leancloud的即时通讯改为环信的即时通讯。当引入easeui的时候 出现方法数超过上限的问题。 搜索一下问题,解决方法很简单。 这里简单记录一下,顺序记录一下此解决方案导致的另一个问题。

 目前将项目中的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") 了。

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

 

 

相关文章
|
7天前
|
Android开发
安卓SO层开发 -- 编译指定平台的SO文件
安卓SO层开发 -- 编译指定平台的SO文件
12 0
|
2月前
|
Android开发 Python
Python封装ADB获取Android设备wifi地址的方法
Python封装ADB获取Android设备wifi地址的方法
31 0
|
2月前
|
Java Shell Linux
Android——编译(一):编译make的基础知识
Android——编译(一):编译make的基础知识
40 0
|
2月前
|
Java Shell Linux
Android——编译(二):android.mk的相关知识
Android——编译(二):android.mk的相关知识
58 0
|
2月前
|
Shell Android开发
RK android13编译环境搭建与常用编译命令
RK android13编译环境搭建与常用编译命令
41 0
|
2月前
|
开发工具 Android开发
QGroundControl Qt安卓环境搭建及编译出现的问题
QGroundControl Qt安卓环境搭建及编译出现的问题
29 0
|
2月前
|
安全 Java 数据安全/隐私保护
Android和iOS应用程序加固方法详解:混淆、加壳、数据加密、动态加载和数字签名实现
Android和iOS应用程序加固方法详解:混淆、加壳、数据加密、动态加载和数字签名实现
40 0
|
2月前
|
Java Go Android开发
Android——编译(三):android.bp的相关知识
Android——编译(三):android.bp的相关知识
61 0
|
3月前
|
编解码 Ubuntu Java
Android 编译Android7.0版本源码
Android 编译Android7.0版本源码
|
3月前
|
开发工具 Android开发 开发者
Android 项目编译 Gradle 配置说明
Android 项目编译 Gradle 配置说明

相关产品

  • 云迁移中心