Android Studio Run app 報錯
問題描述
今天在碼程式碼時遇到一個莫名其妙的問題,問題是這樣的:
不論 clean project、rebuild project 還是 make module 都能順利執行,但是隻要 Run app 就會報如下錯誤
Error:Execution failed for task ':app:transformClassesWithDexForDebug'. > com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/home/connorlin/Program/jdk1.7.0_71/bin/java'' finished with non-zero exit value 134
問題分析
通常,看到 with non-zero exit value 134
首先想到的是依賴衝突了,但細心點能發現,依賴衝突一般是with non-zero exit value 1
或 with non-zero exit value 2
,此處卻是134
。
再看Process 'command '/home/connorlin/Program/jdk1.7.0_71/bin/java'' finished with non-zero exit value 134
似乎是JDK相關。
那麼,首先排除依賴衝突,因為之前是正常的,程式碼又沒任何改動,是突然出現報錯。再看到JDK,檢查是否JDK配置出問題了,因為我同時裝了sun JDK
OpenJDK
。
問題定位
一次定位
開始檢視java 版本:
java -version
結果顯示:
java version "1.7.0_75"
OpenJDK Runtime Environment (IcedTea 2.5.4) (7u75-2.5.4-1~trusty1)
OpenJDK 64-Bit Server VM (build 24.75-b04, mixed mode)
再看:
update-alternatives --config java
結果顯示:
有 3 個候選項可用於替換 java (提供 /usr/bin/java)。 選擇 路徑 優先順序 狀態 ------------------------------------------------------------ 0 /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java 1071 自動模式 * 1 /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java 1071 手動模式 2 /usr/local/jdk/bin/java 255 手動模式 3 /usr/local/jdk1.6.0_30/bin/java 255 手動模式 要維持當前值[*]請按回車鍵,或者鍵入選擇的編號:
證明JDK環境配置沒錯。
接著,把Android Studio JDK改為OpenJDK:
/home/connorlin/Program/jdk1.7.0_71
改為
/usr/lib/jvm/java-7-openjdk-amd64
再次編譯 Run app,再次報錯,但本次報錯與上次不一樣:
Error:Failed to complete Gradle execution.
Cause:
Gradle build daemon disappeared unexpectedly (it may have been killed or may have crashed)
居然Gradle build daemon
異常,那肯定不是程式碼的問題了。
二次定位
後來,無意中發現在專案跟路徑下有多個類似hs_err_pid11776.log
檔案,其內容節選如下:
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007fcac7773d44, pid=11776, tid=140508865505024
#
# JRE version: OpenJDK Runtime Environment (7.0_75-b13) (build 1.7.0_75-b13)
# Java VM: OpenJDK 64-Bit Server VM (24.75-b04 mixed mode linux-amd64 compressed oops)
# Derivative: IcedTea 2.5.4
# Distribution: Ubuntu 14.04 LTS, package 7u75-2.5.4-1~trusty1
# Problematic frame:
# V [libjvm.so+0x82ad44] MoveAndUpdateClosure::do_addr(HeapWord*, unsigned long)+0xa4
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# If you would like to submit a bug report, please include
# instructions on how to reproduce the bug and visit:
# http://icedtea.classpath.org/bugzilla
#
--------------- T H R E A D ---------------
Current thread (0x00007fcac0023800): GCTaskThread [stack: 0x00007fcac4f42000,0x00007fcac5043000] [id=11785]
siginfo:si_signo=SIGSEGV: si_errno=0, si_code=1 (SEGV_MAPERR), si_addr=0x00000000007d0038
Registers:
RAX=0x00000000007d0020, RBX=0x00007fcac5041cb0, RCX=0x0000000000000000, RDX=0x00000000007d0020
RSP=0x00007fcac5041ba0, RBP=0x00007fcac5041be0, RSI=0x00000000007d0020, RDI=0x00000000c47529c0
R8 =0x00007fcaa5800000, R9 =0x00007fcac7d0b420, R10=0x00000000030c9100, R11=0x00007fcac850f810
R12=0x0000000000000001, R13=0x0000000000000008, R14=0x00007fcac007abe0, R15=0x00000000c47529b8
RIP=0x00007fcac7773d44, EFLAGS=0x0000000000010202, CSGSFS=0x0000000000000033, ERR=0x0000000000000004
TRAPNO=0x000000000000000e
通過檢視,其中:
--------------- T H R E A D ---------------
Current thread (0x00007fcac0023800): GCTaskThread [stack: 0x00007fcac4f42000,0x00007fcac5043000] [id=11785]
siginfo:si_signo=SIGSEGV: si_errno=0, si_code=1 (SEGV_MAPERR), si_addr=0x00000000007d0038
表明異常時正在執行GCTaskThread
垃圾回收執行緒,再看到後面還有一段:
VM Arguments:
jvm_args: -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemoryError -Xmx1024m -Dfile.encoding=UTF-8 -Duser.country=CN -Duser.language=zh -Duser.variant
java_command: org.gradle.launcher.daemon.bootstrap.GradleDaemon 2.10
Launcher Type: SUN_STANDARD
似乎是記憶體不足引起的。
問題解決
一次解決
嘗試將 HeapSize 調大,在 app level的build.gradle中配置:
dexOptions {
preDexLibraries = false
javaMaxHeapSize "4g" // 調大 HeapSize
}
很遺憾,問題依然! 那還原此修改,防止二次事故。
二次解決
實在沒辦法,那嘗試重啟大法
吧!
當然,不是簡單的重啟,先要清除快取再重啟Android Studio。
Android Studio -> File -> Invalidate Caches / Restart ..
最後,發現重啟大法
果然好用,居然順利跑起來了,目前為止沒有再出現該問題。
問題結果
通過清除Android Studio快取來解決該問題:
在 Android Studio 的 File
選單中選擇 Invalidate Caches / Restart ..
來清理快取並重啟Android Studio。
Android Studio -> File -> Invalidate Caches / Restart ..
但箇中緣由卻並不清楚,暫且記錄下來,望知情人士指教!
That’s all!
我的簡書賬號是ConnorLin,歡迎關注!
我的簡書專題是 Android開發技術分享,歡迎關注!
原創文章,歡迎轉載,轉載請註明出處!
歡迎您掃一掃上面的微信公眾號,訂閱我的部落格!