Eclipse 轉 Android Studio 的過程中有必要弄明白的一些問題

發表於2016-07-12

AS出來一年多了,最近才從Eclipse轉到AS,但我並不覺得使用Eclipse有多落後,它們都只是一個工具而已,哪個順手就用哪個,用得好都能提高生產力,不會合理利用,再好的工具也是惘然。很多使用Eclipse的Android程式設計師不知道程式碼重構的快捷鍵、如何在執行時除錯、一個Workspace一大堆工程……,我想即使轉到Android Studio也並不見得比Eclipse順手。

下面將自己在Eclipse轉AS過程中遇到的一些問題以及對各個問題的理解列出來,方便後續查閱。

1、問:Eclipse的工程如何匯入到AS?

答:我的處理方式是在AS中新建工程,然後將Eclipse中對應工程的檔案拷貝過來;當然也可以通過Eclipse將project導成gradle版本的,然後在AS中匯入該工程。

2、問:對於原生程式碼,是如何處理的,在AS上如何編譯JNI的程式碼?

答:AS上同樣可以開發JNI,只不過配置指令碼的過程比較麻煩,各個gradle版本,配置的方式有些不一樣;我的處理方式是AS上只做java開發,JNI還是在Eclipse中開發,方便編譯和除錯;

3、問:在AS上開發會和Eclipse一樣,卡嗎?

答:會,卡不卡和你整個工作空間的複雜度有關,如果Eclipse的一個工作空間工程比較少,是不會卡的;AS也一樣,如果AS的一個工作空間有太多工程,同樣會很卡,特別是編譯的時候;

4、問:AS存在啟動慢的問題嗎,有沒有Eclipse那種初始化進度一直在0%的狀態?

答:目前為止我還沒有遇到過,即使一個工作空間有上十個工程。

5、問:AS編譯比Eclipse或者ant編譯快嗎?

答:不一定,這也跟你專案的複雜度有關,如果你的工程依賴關係簡單,用gradle編譯會很快,當然用Eclipse和ant編譯也一樣;如果你的工程依賴關係複雜,用gradle編譯比用Eclipse、ant還慢。我的建議是:主工程不要依賴太多的libproject,否則會編譯很慢,可以把這些libproject打包成aar,這樣同樣複雜的專案用gradle編譯會比用Eclipse和ant編譯塊不少;

6、gradle與ant相比,有什麼優點?

答:優點比較多,主要的優點是配置簡單,特別是在持續整合的時候,如果是gradle,一條命令就行了,如果是ant,還得自己寫編譯指令碼。

7、問:AS中如何配置工程的依賴關係?

答:在Eclipse中,會存在幾種依賴:

(1)一種是jar包,直接放在libs資料夾即可(早先的Eclipse版本需要設定buildpath依賴關係才算配置OK);

(2)另外一種是libproject,這需要右鍵主工程—properties—Android—點選Add新增依賴項,配置完成後依賴關係會更新到工程根目錄下的“project.properties”檔案。

在AS中會很簡單,右鍵主工程—Open Module Setting — 選中某一個工程,點選右邊的Dependencies選項,點選“+”,分別新增Library/File/Module dependency,Library dependency和File dependency主要是新增jar包(File dependency的jar包是放在工程的libs資料夾下),Module dependency是新增libproject,so放在工程的”libs/架構資料夾”下,不需要配置依賴關係。AS的依賴關係配置完成後,可以在工程的”build.gradle”檔案中檢視。依賴關係配置完成後,記得在build.gralde檔案的android標籤下增加下面這句話,依賴關係才生效:

8、問:Eclipse和AS中主工程對其它工程的依賴有什麼異同?

答:

相同點:Eclipse和AS都可以依賴so、jar包和libproject;組織結構也一樣,so和jar包放在libs資料夾,libproject是一個獨立的工程,需要手動配置依賴關係。

不同點:AS還可以依賴aar,並且AS除了可以依賴本地的庫,還可以依賴伺服器上的庫,但Eclipse只能依賴本地庫。

9、問:jar包和aar有啥區別?

答:jar包不能將so和資原始檔打包進去,但aar可以,看得到的就是這點區別。

10、問:AS使用過程遇到過哪些問題,是怎麼解決的?

答:

  • assets檔案的存放目錄在”src/main/”目錄下,和java、res資料夾平級;
  • aidl檔案需要單獨在”src/main/”目錄下新建一個資料夾,然後建立對應的包名,將aidl檔案放在包名對應的包下。

引用libs資料夾中的so,需要在對應module下的build.gradle檔案的android標籤下加上如下屬性:

  • android studio的編譯時遮蔽掉lint檢查,可以避免由於編譯條件太過嚴格而編譯不過的問題:

  • 如果遇到多個jar包中的某個檔案衝突,可以在對應module下的build.gradle檔案的android標籤下加上如下屬性:

  • 調整logcat檔案顯示的顏色:File→Setting→Editor→Colors&Fonts→Android Logcat→在介面的右側調節logcat每個級別日誌的顏色;
  • 顯示行號:File→Setting→Editor→General→Appearance→勾選“Show line numbers”;
  • Logcat的console中,顯示”no debuggable applications”的問題:Tools→Android→Enable ADB Integration;
  • 如果依賴工程和主工程中有同名同型別的資原始檔,需要修改依賴工程中的資源名稱編譯時才不會報錯,如果依賴工程中的這個資原始檔是整個工程都不需要用到的,可以直接刪掉;
  • Android Studio中一個主工程依賴多個library的模式編譯時很慢(clean和rebuild時,之前Eclipse中是這種模式),因為這種工程框架是主工程和每個依賴工程中都有一個build.gradle,編譯起來會消耗比較長的時間,可以將沒有資原始檔和so的依賴工程打包成jar包,有資原始檔和so的打包成aar檔案,然後在主工程中引用,這樣編譯會很快;
  • Android Studio對九圖的要求很嚴格,如果檔案以”.9.png”結尾但是圖片不是9圖,編譯的時候會報錯,解決方案是直接在AS中開啟這張圖片,通過9圖編輯工具編輯成9圖即可;
  • 修改Module之間的依賴關係有兩種方式:(1)直接修改每個module的build.gradle檔案中的dependencies;(2)右鍵project→Open Module Settings→在彈出皮膚的左側Modules一欄中選中要修改依賴關係的Module,點選右側的Depencencies標籤修改即可;
  • Android Studio自動導包:File→Settings→Editor→General→Auto Import→Java→切換“Insert imports on paste”為“All”→勾選“Add unambigious imports on the fly”;
  • 程式碼格式化快捷鍵:CTRL+ALT+L;
  • 重新命名資料夾或者檔案的快捷鍵:ALT+SHIFT+R;
  • 滑鼠懸浮在某個方法上時,顯示該方法的資訊:Preferences→Editor→Show doc on mouse move;
  • 刪除一個Module,直接在IDE中選中Module後按Delete是刪不掉的,需要先右鍵project→Open Module Settings→在彈出皮膚的左側Modules一欄中選中要刪除的Module→點選皮膚左上角的“-”符號→點選OK後回到IDE,然後選中要刪掉的Module,按Delte快捷鍵刪掉即可;
  • Android Studio中執行Lint等工具對程式碼的檢測,Analyze→Inspect Code;
  • 匯入aar:將aar拷貝到libs資料夾,在module的build.gradle檔案增加下面這段話:

11、問:AS相比於Eclipse,有哪些新的工具或者更方便的功能?

答:

  • 檢視APP的記憶體佔用、記憶體變化情況的工具;
  • 檢視APP執行過程中網路使用情況的工具;
  • 檢視CPU、GPU使用情況的工具;
  • 程式碼清理(Analyze—Code cleanup….)、程式碼靜態檢查工具(增強的ling檢查工具,Analyze—Inspect code….);
  • 可以直接使用DOS視窗;
  • 給打碼加書籤的功能(Eclipse也有,只是之前沒用過);
  • IDE類9圖編輯功能;
  • 快捷鍵
  • AS2.2加入了反編譯APK的功能:Build→Analyze APK…,非常方便;
  • ……很多很多一些小的功能,用熟了特別方便。

12、問:在使用AS的過程中,有什麼忠告?

答:就像在使用Eclipse的時候不要輕易更新ADT一樣,在使用AS的過程中不要輕易更新gradle和AS,每個版本會有一些差別,會有很多坑,還是等新版本出來一段時間,比較穩定後再用,畢竟IDE是提高生產力的工具,如果需要花大把時間去學習如何使用和解決使用過程中的問題就太沒意思了。

13、問:Eclipse的工程轉成AS的版本後,在同一個機器中安裝會報”INSTALL_FAILED_VERSION_DOWNGRADE“這個錯誤,是什麼原因導致的?

答:這是因為機器中存在一個版本號比安裝apk版本號更高的版本,出現這個問題的原因是因為as除了可以在Manifest.xml檔案中設定apk的版本名和版本號,還可以在build.gradle檔案中設定apk的版本名和版本號,記得修改build.gralde中的版本名和版本號到最新就可以了。

14、匯入Google官方的Sample不成功,如何處理?

答:Android Studio 匯入 Google Sample 時,需要聯網獲取,由於某些原因,連線不了伺服器。參考網上的方案,給出一種更為簡便、快速的方法:在 host 檔案中加入一句:

如果 ip 失效了,找個有用的替換即可(win7的host檔案在:C:\Windows\system32\drivers\etc 目錄下)。
15、AS中的module被我remove掉了,但現在又想加進來怎麼弄?

答:這個我研究過,不能通過UI介面來配置,每個project下面有一個settings.gradle檔案,裡面是這個project包含了哪些module,你只需要在這裡面新增被remove掉的module名稱即可,格式:‘:module名稱’。

16、在AS中,libproject需要在AndroidManifest.xml中宣告的內容是和Eclipse一樣,需要在主工程中宣告嗎?

答:不需要,在AS中,如果你依賴了library或者aar,只需要在library或aar中對應的AndroidManifest.xml中宣告這個工程對應的屬性就行了,不需要在主工程中的AndroidManifest.xml檔案中去宣告依賴包需要的宣告。

17、有沒有比較好的gradle教程推薦?

答:

Gradle for Android 第一篇( 從 Gradle 和 AS 開始 )

Gradle for Android 第二篇( Build.gradle入門 )

Gradle for Android 第三篇( 依賴管理 )

18、如何在構建時刪掉build\output目錄下的unsigned-align.apk?
答:在build.gradle檔案中加上下面這一段話:

相關文章