Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 418|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-7-2 00:06:57 | 显示全部楼层 |阅读模式

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

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

     

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-1-11 14:11 , Processed in 0.066691 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表