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中,會存在幾種依賴:
一種是jar包,直接放在libs文件夾即可(早先的Eclipse版本需要設置buildpath依賴關系才算配置OK);
另外一種是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標簽下增加下面這句話,依賴關系才生效:
sourceSets{main{jniLibs.srcDirs=['libs']}}
8、問:Eclipse和AS中主工程對其它工程的依賴有什么異同?
答:
相同點:Eclipse和AS都可以依賴so、jar包和libproject;組織結構也一樣,so和jar包放在libs文件夾,libproject是一個獨立的工程,需要手動配置依賴關系。
不同點:AS還可以依賴aar,并且AS除了可以依賴本地的庫,還可以依賴服務器上的庫,但Eclipse只能依賴本地庫。
9、問:jar包和aar有啥區別?
答:jar包不能將so和資源文件打包進去,但aar可以,看得到的就是這點區別。
10、問:有哪些功能在Eclipse中用的特別順手,但在AS中用得不順手的?
答:
在同一個類中用快捷鍵查找同一個字串(Eclipse的快捷鍵是CTRL+K),AS中可以用F3實現類似功能,但用著特別不方便,因為它會彈一個下拉列表讓你選;
程序運行的過程中調試代碼(Eclipse中只需要在DDMS選中當前進程,點擊調試按鈕就可以了,但AS中沒發現有這個功能,可能是我AS的版本問題吧)。
11、問:AS使用過程遇到過哪些問題,是怎么解決的?
答:
assets文件的存放目錄在”src/main/”目錄下,和java、res文件夾平級;
aidl文件需要單獨在”src/main/”目錄下新建一個文件夾,然后創建對應的包名,將aidl文件放在包名對應的包下。
引用libs文件夾中的so,需要在對應module下的build.gradle文件的android標簽下加上如下屬性:
android {
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
}
android studio的編譯時屏蔽掉lint檢查,可以避免由于編譯條件太過嚴格而編譯不過的問題:
lintOptions {
abortOnError false
}
如果遇到多個jar包中的某個文件沖突,可以在對應module下的build.gradle文件的android標簽下加上如下屬性:
packagingOptions {
exclude 'META-INF/NOTICE.txt'// 這里是具體的沖突文件全路徑
exclude 'META-INF/LICENSE.txt'
}
調整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文件增加下面這段話:
repositories {
flatDir() {
dirs 'libs'
}
}
然后在build.gradle的dependencies標簽中按照如下格式引用aar文件即可:
compile(name:'aar包名不帶擴展名', ext:'aar')
12、問:AS相比于Eclipse,有哪些新的工具或者更方便的功能?
答:
查看APP的內存占用、內存變化情況的工具;
查看APP運行過程中網絡使用情況的工具;
查看CPU、GPU使用情況的工具;
代碼清理(Analyze—Code cleanup....)、代碼靜態檢查工具(增強的ling檢查工具,Analyze—Inspect
code....);
可以直接使用DOS窗口;
給打碼加書簽的功能(Eclipse也有,只是之前沒用過);
IDE內9圖編輯功能;
快捷鍵
......很多很多一些小的功能,用熟了特別方便。
13、問:在使用AS的過程中,有什么忠告?
答:就像在使用Eclipse的時候不要輕易更新ADT一樣,在使用AS的過程中不要輕易更新gradle和AS,每個版本會有一些差別,會有很多坑,還是等新版本出來一段時間,比較穩定后再用,畢竟IDE是提高生產力的工具,如果需要花大把時間去學習如何使用和解決使用過程中的問題就太沒意思了。