工欲善其事,必先利其器。
和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-server
adb 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 WatchData 2012-09-01 11:01 <DIR> Winamp 2012-07-24 22:22 <DIR> WINDOW~4 Windows Live 2012-07-24 22:21 <DIR> WI3957~1 Windows Live SkyDrive
INSTALL_FAILED_INSUFFICIENT_STORAGE
安裝應用程序時遇到存儲容量不足時會報這個錯誤:
Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE
Please 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