目前將項目中的leancloud的即時通訊改為環信的即時通訊。當引入easeui的時候 出現方法數超過上限的問題。 搜索一下問題,解決方法很簡單。 這裡簡單記錄一下,順序記錄一下此解決方案導致的另一個問題。 一、解決方法數超過64k的問題 問題描述: 解決方案: 1、app目錄下 build.gra ...
目前將項目中的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") 了。
切記:項目第一次編譯的時候不要加這段代碼,當第一次編譯完之後再加,否則會出問題。