最新更新,提供一個(gè)demo,進(jìn)一步將android studio的目錄結(jié)構(gòu)進(jìn)行調(diào)整
https://github.com/vickyleu/EclipseLike
先說(shuō)下Android Studio的使用感受吧!記得Android Studio剛發(fā)布1.0預(yù)覽版本的時(shí)間是2014年底-2015年初的樣子,之前一直使用的Eclipse編寫(xiě)項(xiàng)目,由于濤哥推薦,有機(jī)會(huì)接觸到AS.當(dāng)天說(shuō),晚上就回家下載了一個(gè)體驗(yàn).
剛開(kāi)始的時(shí)候是十分抵觸AS的,濤哥說(shuō)IDEA是最好的Java IDE,我當(dāng)時(shí)還嗤之以鼻.首先是快捷鍵的轉(zhuǎn)變,編寫(xiě)項(xiàng)目時(shí)各種水土不服.Gradle取代Ant編譯打包,Eclipse上的automatically build也不復(fù)存在.這就意味著每次構(gòu)建項(xiàng)目的時(shí)間大大加長(zhǎng),當(dāng)時(shí)還沒(méi)有給筆記本換CPU和上SSD,從創(chuàng)建工程到生成apk,每一步都需要花費(fèi)大量的時(shí)間在gradle同步上面,而我又是急性子,之前有一次在家寫(xiě)代碼的時(shí)候,剛想到一個(gè)思路,準(zhǔn)備寫(xiě)下來(lái)時(shí)突然gradle又開(kāi)始興風(fēng)作浪,寫(xiě)也寫(xiě)不了,關(guān)又關(guān)不掉,怒氣值瞬間爆表,一巴掌就把電腦打藍(lán)屏了......
隨著一年多的版本更迭,現(xiàn)在的gradle依然不改本色,只不過(guò)相較于之前的版本還是好了很多,在編譯效率方面基本上差別也不是那么大了,畢竟SSD現(xiàn)在白菜價(jià).持續(xù)服用兩三個(gè)月以后,也漸漸習(xí)慣了AS的操作方式,當(dāng)我某天突然心血來(lái)潮又去開(kāi)了個(gè)Eclispe項(xiàng)目懷下舊時(shí),我竟然發(fā)現(xiàn)自己Eclipse的代碼格式化都不記得了.寫(xiě)xml文件半天沒(méi)提示,新版API的布局預(yù)覽也看不了,想看類和方法的引用各種不方便,想查看源碼還要我attach source jar,隨便引用一個(gè)recyclerView還需要copy類庫(kù)到workspace,到頭來(lái)才發(fā)現(xiàn)Eclipse簡(jiǎn)直是反人類.Eclipse Adt已經(jīng)停更多少年了,仍然有大批守舊派不肯歸順AS陣營(yíng),項(xiàng)目中的協(xié)同開(kāi)發(fā)尤為重要,一個(gè)人寫(xiě)項(xiàng)目可以不管不顧,但是要顧慮到其他同事的話也就只能屈就了.
說(shuō)到Eclipse與AS的區(qū)別,其實(shí)質(zhì)上就是構(gòu)建系統(tǒng)的區(qū)別,而我們發(fā)現(xiàn)兩個(gè)構(gòu)建系統(tǒng)只是在文件結(jié)構(gòu)上略有區(qū)別,所引用的索引文件并不會(huì)產(chǎn)生任何沖突.而AS是支持自定義各目錄路徑的,那么我們就可以從文件結(jié)構(gòu)上對(duì)項(xiàng)目進(jìn)行重新調(diào)整,以達(dá)到兩種IDE都能編輯的效果.
首先來(lái)分析下Eclipse Adt的文件結(jié)構(gòu):
其中.project文件是保存項(xiàng)目名稱的,project.properties是保存標(biāo)記的SDK和引用的類庫(kù)的,如果是AS項(xiàng)目轉(zhuǎn)Eclipse項(xiàng)目時(shí)就需要這幾個(gè)文件,當(dāng)然直接復(fù)制其他項(xiàng)目的也行,稍作修改就能在eclipse中打開(kāi)了
然后是AndroidStudio的文件結(jié)構(gòu)
以上就是兩個(gè)IDE中關(guān)鍵的build配置文件,他定義了使用的構(gòu)建系統(tǒng)版本以及項(xiàng)目路徑和一些依賴信息
我們?cè)賮?lái)看看源碼目錄和資源等文件的結(jié)構(gòu)
在AS中包名前面多了一個(gè)java文件夾,java目錄下就是包名結(jié)構(gòu)了,和Eclipse一樣,而它的上級(jí)目錄是src/main. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
??(我這里是純C語(yǔ)言編寫(xiě)項(xiàng)目,所以刪掉了java目錄)
eclipse的清單文件資產(chǎn)文件清單文件都在根目錄,src目錄下就是包名結(jié)構(gòu)
======================================================
總結(jié)一下就是Eclipse和AS在文件目錄結(jié)構(gòu)上多了一個(gè)module,即app目錄
====================================================
下面開(kāi)始實(shí)戰(zhàn)演練
Eclipse項(xiàng)目無(wú)痛轉(zhuǎn)AS項(xiàng)目
至此我們可以隨便新建一個(gè)空的AS項(xiàng)目了,創(chuàng)建項(xiàng)目后,由于src結(jié)構(gòu)不同,為了避免文件錯(cuò)亂,刪除掉app目錄中的src文件夾
那么Eclipse項(xiàng)目只需要在現(xiàn)有的空AS結(jié)構(gòu)中把整個(gè)根目錄中的文件拷貝到app目錄下
至此項(xiàng)目遷移完成了百分之90,這時(shí)候打開(kāi)AS項(xiàng)目的話,會(huì)發(fā)現(xiàn)IDE報(bào)錯(cuò),沒(méi)辦法定位新的文件結(jié)構(gòu),
這時(shí)候就要用到gradle來(lái)重新定位文件目錄了,在AS中一個(gè)module的目錄對(duì)應(yīng)一個(gè)build.gradle文件,他可以設(shè)置使用的SDK版本,編譯版本,混淆設(shè)置,以及各種插件和依賴等等等等
廢話不多說(shuō),看圖
module的build.gradle文件包含三個(gè)分支,android,dependencies,repositories
最上層為使用的插件,其中android分支中支持修改sourceSet,而sourceSet就是我們項(xiàng)目遷移的關(guān)鍵,文件結(jié)構(gòu)重新鏈接
android {//在android分支中添加如下DSL語(yǔ)句
sourceSets {
main {
manifest.srcFile'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
jniLibs.srcDirs = ['libs']
}
defandStr ="tests/androidTest/"
androidTest {
java.srcDirs = [andStr +'src']
resources.srcDirs = [andStr +'src']
aidl.srcDirs = [andStr +'src']
renderscript.srcDirs = [andStr +'src']
res.srcDirs = [andStr +'res']
assets.srcDirs = [andStr +'assets']
}
deftestStr ="tests/test/"
test {
java.srcDirs = [testStr +'src']
resources.srcDirs = [testStr +'src']
aidl.srcDirs = [testStr +'src']
renderscript.srcDirs = [testStr +'src']
res.srcDirs = [testStr +'res']
assets.srcDirs = [testStr +'assets']
}
debug.setRoot('build-types/debug')
release.setRoot('build-types/release')
main.java.srcDirs +='src/main/kotlin'
}
}
當(dāng)當(dāng)當(dāng)當(dāng)當(dāng),gradle同步一下,新鮮的EclipseStudio項(xiàng)目就出爐了!!!!
至于想把現(xiàn)有AS項(xiàng)目轉(zhuǎn)換為類Eclipse結(jié)構(gòu)的同學(xué),仿照上面的邏輯就能無(wú)痛轉(zhuǎn)換,Eclipse的配置文件隨便找找其他項(xiàng)目的copy過(guò)來(lái)就行了
文件的操作,gradle的配置就不再?gòu)?fù)述了,下面講一下eclipse配置文件的修改
其中.project可以定義當(dāng)前工程在Eclipse中顯示的工程名,project.properties設(shè)置當(dāng)前使用API版本和工程是否為類庫(kù)工程
因?yàn)槲募莄opy過(guò)來(lái)的,其中.project中的name字段必須修改,不然你導(dǎo)入Eclipse時(shí)如果當(dāng)前workspace中有同名工程是導(dǎo)入不了的.
target為標(biāo)記的API版本,
android.library為true時(shí)表示當(dāng)前工程為類庫(kù)工程,否則可以不寫(xiě)直接刪除掉
Tips!!!!!!!!!:所轉(zhuǎn)換的工程因?yàn)榻Y(jié)構(gòu)問(wèn)題,不支持導(dǎo)入到其他工作區(qū),IDE copy的情況下不會(huì)保留原有結(jié)構(gòu)
AS下只允許open project,Eclipse下打開(kāi)工程不允許copy to workspace
追加一點(diǎn)小技巧
在eclipse中我們的library project不是和當(dāng)前project同目錄的,如果library project又和其他工程有關(guān)聯(lián)的情況下,每一個(gè)工程拷貝一份也是不現(xiàn)實(shí)的,如果library需要修改,這種情況也增加了維護(hù)成本,稍有疏忽可能會(huì)造成其他copied遺漏或錯(cuò)亂,在eclipse中這個(gè)問(wèn)題很好解決,因?yàn)橹恍枰砑觢ibrary鏈接就行了,而AS中首先是通過(guò)settings.gradle掛載module,然后在通過(guò)每一個(gè)module去依賴project,我們就需要定義外部library路徑來(lái)掛載module
===================本章完結(jié)======================
userLibrary及其他IDE特性后續(xù)文章會(huì)補(bǔ)充.......
也可以關(guān)注本人的GitHub地址("https://github.com/vickyleu"),不定期更新一些小知識(shí)小技巧