標籤:
1 背景介紹
隨著android studio的完善和普及,越來越多Android app開發人員從Eclipse+ADT環境轉到Android Studio(後文統一用AS表示)。但是,AS往往需要較新的SDK,從目前的測試結果來看,在MAC OSX 10.10系統中很多基於老版本SDK開發的東西並不能完美運行在新版本的SDK中,即兩者並不能完美相容,比如,在Eclipse+ADT環境中建立的模擬器鏡像或快照就無法在AS中使用(具體表現為模擬器或快照無法啟動,或啟動之後馬上crash)。因此,最好的解決方案就是在系統中同時使用兩套SDK,老版本的給Eclipse使用,新版本的用於AS。
目前檢測到的主要問題發生在DDMS上,貌似新版SDK中的DDMS並不能相容原來版本較舊的Eclipse。具體原因待以後有時間了再深究~
2 如何建立兩套SDK
建立兩套SDK很簡單,但是如何讓兩套SDK獨立運行且互不干擾卻相對麻煩。為方便描述,下文將老版的SDK目錄稱做old_sdk,新版的SDK目錄稱作new_sdk。
首先由於筆者當前還是以Eclipse開發為主,所以預設SDK就是old_sdk,只有在使用AS的時候才需要用到new_sdk。因此,筆者在~/.bash_profile檔案中做了如下配置:
#default sdkexport ANDROID_HOME=/Users/your_user_name/android/env/old-android-sdks
這樣我們在啟動程式的時候預設就是用上述old_sdk目錄。那麼如何在啟動AS的時候使用new_sdk呢?同樣是在~/.bash_profile中操作,這裡我們添加一條alias命令:
# set new sdk envrionment for Android Studio
alias myas=‘export ANDROID_HOME=/Users/your_user_name/android/env/new-android-sdks && open -a /Applications/Android\ Studio.app/‘
通過上面的設定,當我們需要使用AS的時候只需要在終端中輸入myas即可。不過這種方式並不完美,因為如果我們新開一個終端,然後使用adb命令的話,其預設是使用老版的adb,這或多或少會出現一些相容性問題。為什麼會這樣呢?答案見bash_profile中的PATH環境變數的設定:
export PATH=/user/local/bin:$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
因為PATH的值是在我們更改ANDROID_HOME之前就設定完成的,所以此時的ANDROID_HOME是old_sdk。因此最好的方式就是提供一個alias命令可以一次性切換ANDROID_HOME和PATH:
# set new sdk envrionment for Android Studioalias change_android_sdk=‘export ANDROID_HOME=/Users/your_user_name/android/env/new-android-sdks && export PATH=$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$PATH‘alias myas=‘change_android_sdk && open -a /Applications/Android\ Studio.app/‘
通過上述設定,就能確保在AS中使用的一定是new_sdk,且當我們在AS環境下進行Android編程的時候,如果要使用到adb之類的命令,只需要在新的終端中使用change_android_sdk命令就能切換到new_sdk了。
3 遇到的一些奇特bug集錦
問題一:模擬器快照crash問題
注意:為了方便,筆者是使用emulator命令啟動的模擬器快照,而非通過Emulator Devices Manager。
由於當初是使用old_sdk建立的模擬器快照,因此該快照並不能與new_sdk相容。具體crash情境就是:
先在old_sdk環境下啟動快照,一切正常。
然後使用myas開啟Android Studio,一切正常。
然後在myas中運行一個app到快照中,一切正常。
這時候關閉快照,然後重新啟動快照,出現BUG,快照無法啟動,或者很快crash!
為什麼會這樣呢?因為啟動了AS之後當前系統中啟動並執行adb, ddms之類的組件都是來自new_sdk的,而筆者啟動的快照必須基於old_sdk,所以就出現了相容性問題。
解決方案如下:
首先關閉Android Studio, 然後開啟Eclipse(新開一個終端使用open命令開啟,或者直接通過系統內建的捷徑啟動),這時候Eclipse會自動啟動old_sdk中的滿足Eclipse啟動並執行必備的組件(如adb, ddms等),且這些組件會替換掉當前系統中正在啟動並執行、由AS啟動的那些new_sdk組件,此時我們再啟動模擬器快照就沒有問題了!
4 總結
模擬器快照crash問題卡了筆者整整兩天時間,起見還進行過一次系統還原o(╯□╰)o。很幸運最後能夠解決這個問題,因為終於可以一邊保持原有Eclipse環境,一邊享受Android Studio帶來的高效開發了!
鑒於MAC與Linux的相似性,上述方案應該也可以應用到Linux環境中,只是上述.bash_profile檔案會根據具體的系統而不同,常見的等效檔案名稱如下:
.bash_login .bashrc .profile
MAC中如何配置兩套android-sdk環境