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

  切記:項目第一次編譯的時候不要加這段代碼,當第一次編譯完之后再加,否則會出問題。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM