工欲善其事,必先利其器。
和iOS開發相比,Android的開發環境的版本比較多,隨之而來的問題也多。顯然,我們不應該浪費寶貴的時間在解決開發環境帶來的問題上,為此本文總結了常見的開發環境問題和解決方案,供大家查詢和隨時補充。
Debug certificate expired
Android SDK產生的用於調試的認證檔案debug.keystore有效期間是365天,當使用超過一年後控制台就會報這個錯誤。
Error generating final archive: Debug Certificate expired on 10/09/18 16:30
解決方案是手工刪除debug.keystore檔案,Windows系統下位於"C:\Documents and Settings\username\.android"目錄,Linux和Mac系統下位於"~/.android/"目錄。下次啟動應用時,Eclipse會自動建立一個debug.keystore檔案。最好"Project->Clean"一下項目以便觸發編譯器重新編譯。
Failed to install apk on device: timeout
導致這個問題的確切原因不清楚,可能是由於不正確關閉adb串連。
Failed to install helloworld.apk on device 'emulator-5554': timeout
解決方案1:更換電腦usb口(不使用前置usb口)或重裝手機驅動,將手機關機後再開機。
解決方案2:在Eclipse裡選擇"Window->Preferences->Android->DDMS->ADB connection time out",將預設的5000ms改為更大的值,例如20000ms。
解決方案3:在命令列視窗裡依次輸入如下命令:
adb kill-serveradb start-server
invalid command-line parameter
這是由於Eclipse開發環境無法找到所需的可執行檔造成的。
[2011-07-10 07:10:22 - demo] Android Launch![2011-07-10 07:10:24 - demo] adb is running normally.[2011-07-10 07:10:24 - demo] Performing com.demo.DemoActivity activity launch[2011-07-10 07:10:25 - demo] Automatic Target Mode: launching new emulator with compatible AVD 'xxx'[2011-07-10 07:10:25 - demo] Launching a new emulator with Virtual Device 'xxx'[2011-07-10 07:11:06 - Emulator] invalid command-line parameter: Files\Android\android-sdk\tools/emulator-arm.exe.
解決方案是在Eclipse裡選擇"Window->Preferences->Android"選項,檢查"SDK Location"的路徑是否包含了空格,如果是"c:\Program Files\android"這種,改為"c:\Progra~1\android",這樣命令列就可以正常調用到了。
小提示:在命令列視窗裡輸入"dir /x"命令就可以列出8.3格式的檔案名稱,看下面的結果:
2012-09-25 23:52 <DIR> WATCHD~1 WatchData2012-09-01 11:01 <DIR> Winamp2012-07-24 22:22 <DIR> WINDOW~4 Windows Live2012-07-24 22:21 <DIR> WI3957~1 Windows Live SkyDrive
INSTALL_FAILED_INSUFFICIENT_STORAGE
安裝應用程式時遇到儲存容量不足時會報這個錯誤:
Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGEPlease check logcat output for more details.Launch canceled!
如果是在模擬器上運行應用,可以擴大AVD的記憶體容量。
如果是在真機上運行,可以在AndroidManifest.xml裡修改安裝偏好,讓應用直接安裝到SD卡上解決。
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example" android:installLocation="preferExternal" >...</manifest>
Unable to open sync connection
雖然很多人遇到這個問題,但問題的根源並不確切,可能有多種原因造成adb報這個錯誤:
[2010-10-12 09:36:48 - myapp] Android Launch![2010-10-12 09:36:48 - myapp] adb is running normally.[2010-10-12 09:36:48 - myapp] Performing com.mycompany.myapp.MyActivity activity launch[2010-10-12 09:36:48 - myapp] Automatic Target Mode: using device 'xxx'[2010-10-12 09:36:48 - myapp] Uploading myapp.apk onto device 'xxx'[2010-10-12 09:36:48 - myapp] Failed to upload myapp.apk on device 'xxx'[2010-10-12 09:36:48 - myapp] java.io.IOException: Unable to open sync connection![2010-10-12 09:36:48 - myapp] Launch canceled!
解決方案1:拔掉手機連接線再重新連上;
解決方案2:在手機上關閉Debug選項再重新開啟,這個選項在手機的"設定->應用程式->開發->USB調試"裡。
Too many open files
這個問題與系統可同時開啟檔案數量設定有關,但一般不需要修改相關設定,用上一個問題(Unable to open sync connection)的方法即可解決。
第三方Jar包,NoClassDefFoundError
升級ADT版本以後容易出現這個問題:本來一切正常的Android項目,升級以後所有的第三方Jar包裡的類都提示NoClassDefFoundError了。
原因可能出現在不同版本ADT使用的編譯ant指令碼的區別,可能的解決方案有兩個:
方法1:在Eclipse裡右鍵點擊你的Android工程,選擇"Properties->Java Build Path->Order and Export",在這裡把所有第三方Jar包前面的複選框都勾上。
方法2:檢查你的第三方Jar包檔案是否放在工程目錄下的"libs"目錄,如果不是,改過來。
Failed to allocate memory: 8
一般是AVD的設定有問題,很可能是RAM值設得太高,降低些試試。早期adt版本裡有個bug,就是RAM值裡必須包含"MB",例如是"512MB"而不是"512",否則提示上述錯誤資訊。
也有人提到過解析度是原因之一,但我沒有實際遇到過,如果只改小RAM沒有解決問題,試著把解析度也調低看看。
參考資料
“Debug certificate expired” error in Eclipse Android plugins
Android error: Failed to install *.apk on device *: timeout
The Android emulator is not starting, showing “invalid command-line parameter”
Solution: Android INSTALL_FAILED_INSUFFICIENT_STORAGE error
Android adb “Unable to open sync connection!”
com.android.ddmlib.SyncException: Too many open files
NoClassDefFoundError - Eclipse and Android
Android emulator failed to allocate memory 8