昨晚正在干着自己的事,另外一個同學說項目打包不了,但是可以debug運行。又急着需要打包apk發給那邊人去測試。真的是搞事情,趕緊打開項目試試打包。項目從之前的$Eclipse$中轉過來的,清楚的記得當時轉成功后第一件事就是測試能不能編譯運行,第二就是嘗試打包自動更新。確定當時沒有問題,但是之后在上面又開發了些東西,gradle加了一些包啊啥的。
錯誤
打包過程特別慢,那個圈一直轉,我還將網切換到了自己的手機熱點,因為我知道實驗室的網會導致有的包下載不了,但是最后打包了半天,失敗了。。。。
開始各種搜索。。。。。。。。。。
填坑過程(可直接看后面的解決)
- 網上確實有很一些帖子啊,就說需要
defaultConfig
下添加multiDexEnabled true
,這句話是干什么用的呢,就是分包,為什么需要分包呢,因為工程的方法數超過了64k,詳見我的另外一篇文章Android工程方法數超過64K。這就說明我是有這句話的,而且看看報錯異常中確實有multi
的字樣。而這個確實也是后來轉為Androif Studio后加的,所以基本問題就定位到這里了。 - 所以去掉了這個分包功能(我知道去掉肯定會無法運行,只是想看看打包apk的時候會不會報這個error),事實證明,直接提示方法數超過64k,編譯不過,我真是天真。
- 去看了看添加的gradle配置
implementation 'com.android.support:multidex:1.0.1'
果然上面提示最新版本1.0.3
,好吧,我改成最新版本,重寫gradle下載,這個時候就出現了一轉圈,我去打開了External Liberaies
看看,結果發現了這個
不對啊,我明明是1.0.3
,怎么下載了1.0.2,一臉懵逼,猜想是我使用的compileSdkVersion 27
,1.0.3
需要更高版本吧,個人猜想而已。我又改成了1.0.2
,最后滿懷期待的打包,啪,,,異常依舊。心死。。。
4. 想着今天晚上可能打包不了了,哎,仔細看看異常。 注意到了這句話
java.lang.OutOfMemorayError:GC overhead limit exceed
內存溢出,GC出問題了????,難道這不應該是跑程序會出的問題嗎,搞笑,copy,百度,一通搜索后,這樣一句話映入眼簾.
javaMaxHeapSize "4g"
這句話寫在app.gradle
的dexOptions
下,字面意思,指定堆大小4g,聯想到內存溢出。先不管,搞上去,試一試打包。Perfect。。。。。。。。unbelievable。。。amazing。。。。
解決
在在app.gradle
的buildTypes
的dexOptions
下添加
javaMaxHeapSize "4g"
當然可以設定更大一些,似乎根據自己的pc配置來的。
最后
生命不息,使勁造Android填坑—Error:Execution failed for task ':app:transformClassesWithDexForRelease'