eclipse專案遷移到android studio(圖文最新版)
說到使用AndroidStudio,除了新建的專案,我們都會面臨的問題是原先Eclipse的程式碼該怎麼匯入到AndroidStudio中使用。
這方面相關的資料還比較少,自己摸索了一下,總結出這篇部落格,希望能讓開發者少走些彎路。
OK,進入正題。
Google為了讓我們更加方便的使用AndroidStudio,提供了兩種匯入Eclipse程式碼的方式:一種相容Eclipse,一種是全新的Android Gradle Project.
這裡,我們先從相容模式說起。
相容模式
這種模式下,保證了Eclipse時代的程式碼目錄結構,整體操作和使用和Eclipse也差不多。
最重要的,當你使用AndroidStudio時,你或者其他人也可以方便的使用Eclipse,互不干擾。
實現步驟
1. 從Eclipse中匯出Gradle build files
- 在Eclipse選單中 File --> Export-->Generate Gradle build files
- 接下來會到達警告介面,這裡會提示AndroidStudio可以直接匯入ADT的工程,先過,後面有直接匯入的講解。
- 選中你的專案工程,包括主工程和庫工程(Library)。
- 確認生成
2. 修改匯出檔案引數
匯出後,由於adt很久沒更新,需要手動改一些引數,才能保證正常使用。
為了保證能夠講解的更清晰,下面分情況講解一下:
沒有庫工程,只有主工程
這種情況下你看到的目錄是這樣的
- 首先需要更改的是 build.gradle 檔案
AndroidStudio 1.0 ~ 1.0.2 使用的都是 Android Gradle plugin 1.0.0,因此需要將圖中紅框內的 0.12.+ 改為 1.0.0 - 然後還需要更新Gradle版本,指定為所需要的2.2.1
在 /gradle/wrapper/gradle-wrapper.properties裡面
含有庫工程
其實改動方法和上面一樣,只需要注意是改動整個專案的build.gradle和 /gradle/wrapper/gradle-wrapper.properties。
而不要嘗試去主工程或者庫工程裡面找build.gradle
3. 匯入AndroidStudio
- 進入到AndroidStudio中,選擇匯入非AndroidStudio工程
- 找到需要匯入的工程目錄,可以看到圖示和Eclipse建立的工程不一樣。
- 點選OK,進入漫長的載入過程,之後就可以正常使用了。
已經建立過工程的開啟AndroidStudio會直接進入以前的工程
這時候可以選擇File-->Import Project, 選中後點擊ok
相容模式下的bug
使用IDE的打包:
在相容模式只打主工程的,庫工程沒有加入到apk中,導致無法正常執行。
截止到1.0.2,AndroidStudio依然存在這個bug。
因為這個bug的存在,你在相容模式可以使用AndroidStudio程式設計,打包時開啟Eclipse。
OK,相容模式介紹到這裡。 我們開始介紹主角: Android Gradle Project。 這裡必須說明的是Google更希望我們使用這種方式,如果沒有什麼團隊的壓力,還是使用這種吧。
使用新的目錄結構
轉換目錄結構
-
開啟Import
- 新使用者:
- 老使用者: File-->Import Project
- 新使用者:
-
直接找到原有的Eclipse工程
- 單一工程直接匯入即可。
- 有庫工程的需要注意,匯入一定要指向主工程,而不是整個專案的目錄。指向專案目錄是無法進行轉換的。
- 單一工程直接匯入即可。
- 指定目標路徑
-
這個地方需要詳細說一下
這裡上面兩個選項暫且不說,勾選上。
最後一項提一下: 將Module名建立為camelCase風格。
駝峰式,這個搞Java的都會熟悉,camelCase表示首字母小寫的駝峰式風格,CamelCase表示首字母大寫的駝峰式風格。
不勾選這個選項意味著你原先的工程名是啥樣,轉換完就是啥樣。
這裡的AndroidStudio會去分析Eclipse工程下的. project檔案,裡面的name就是你在Eclipse中看到的工程名。(沒有此檔案時會使用此工程的資料夾名。)
當然也有例外,比如countly-sdk-android轉換完就成了countlysdkandroid,下劃線我就不知道了,這個沒有再仔細研究規則,不過CamelCase會保持正常。
這裡我比較喜歡讓Module首字母大寫(不知道為啥看這首字母小寫難受),原來的工程就是CamelCase風格,我就不勾選了。
當然如果這裡沒注意直接轉換成了camelCase但最後又不喜歡怎麼辦? 可以看後面《如何更改Module名稱》部分。
OK,配置完點選Finish即可 -
之後需要經過一段時間的轉換。成功後可以看到import-summary.txt,這個檔案非常有用,後面會講到。
到這裡,你的應用其實已經可以通過AndroidStudio正常編譯,你也可以寫程式碼去了。
但我希望你還能繼續看下去,因為這個成功後彈出來的import-summary.txt寫了些很重要的東西。
帶你看懂import-summary.txt
回到頂部Manifest Merging
Your project uses libraries that provide manifests, and your Eclipse
project did not explicitly turn on manifest merging. In Android Gradle
projects, manifests are always merged (meaning that contents from your
libraries' manifests will be merged into the app manifest. If you had
manually copied contents from library manifests into your app manifest
you may need to remove these for the app to build correctly.
這段應該都能看懂,無非就是說你Library的清單檔案有效啦。
不用手工拷貝到主工程的清單檔案中了。以前拷貝過的,要移除才能正確build。
Ignored Files(這個最重要)
之所以說這部分重要,是因為AndroidStudio通過這段文字告訴了你,它匯入的時候忽略了哪些檔案。
也就是說這部分內容,它沒給你拷進來,你要是不去自己拷貝,那這部分你新Gradle工程裡面就沒有了。
這裡選一些典型的ignore檔案來看一下:
1 2 3 4 |
From
SDK:* proguard-project.txt* proguard.cfg
From
UI:* cert\* cert\cert
From
CrosswalkWebview:* ant.properties* build.xml
From
SlidingMenuLibrary:* LICENSE.txt* pom.xml
|
給上面的忽略檔案分分類:
- 確實不需要的:混淆檔案、ant的ant.properties與build.xml、maven的pom.xml。
- 需要再次宣告的: LICENSE.txt。不宣告屬於盜版侵權啊~~
- 自定義資料夾和檔案:cert。 這個資料夾是自己建立的,不屬於Android規定的目錄,所以AndroidStudio沒給拷貝。
需要留意你的Ignored Files部分,並根據自己的需要手工拷貝到新工程中。
回到頂部Replaced Jars with Dependencies & Replaced Libraries with Dependencies
在Replaced Jars with Dependencies部分,有如下文字:
?1 2 3 |
android-support-v4.jar
=> com.android.support:support-v4: 21.0 . 3
gson- 2.3 .jar
=> com.google.code.gson:gson: 2.3
joda-time- 2.6 .jar
=> joda-time:joda-time: 2.6
|
可以看到jar被替換了。 可以看到工程裡面沒有了當初新增的jar包。那麼jar包去哪了呢?
暫時先留個懸念。
我們繼續來看 Replaced Libraries with Dependencies部分
1 2 3 |
ActionbarLibrary
=>
com.actionbarsherlock:actionbarsherlock: 4.4 . 0 @aar
com.android.support:support-v4: 21.0 . 3
|
可以看到ActionbarSherlock被替代為了aar(Android ARchive ,jar : Java ARchive)。關於aar的介紹可以看這裡,本文就不再詳細展開了。
可以看到的是Library和jar都被替換了,可是你在當前工程裡再也找不到了。這是為什麼?
跟我來看下面的操作:
- 在Module上右擊,選擇Open Module Settings
- 切換到Dependencies
- 點選右側的加號新增,選擇Library dependency
- 可以看到這個介面:
OK,到這裡就可以知道真相了,在AndroidStudio中你可以新增線上的庫或jar包,新增完成後你就可以和平時一樣正常使用。
而你的同事在開啟這個工程的時候會即時下載,保證你們的程式碼都能正常執行。
這也是為什麼當你的工程轉換完畢後,有些jar和Library消失的原因。他們被轉成線上的了。
Moved Files
這部分在講你的目錄結構變化,基本上可以認為他在廢話,沒什麼看的必要了。
回到頂部Next Steps & Bugs
呵呵,略過吧
回到頂部最後一句
This import summary is for your information only, and can be deleted
after import once you are satisfied with the results.
你一旦覺得自己的工程沒問題了,就可以把這個檔案刪除了。
匯入AndroidStudio工程注意
通過上面的步驟,你的專案已經轉換了目錄結構,這時候你可以提交程式碼,供其他同事下載使用了。
其他同事把程式碼下載下來,他們所需要引入的是一個Android Gradle Project了。
-
新使用者
- 如果專案中有.idea之類的IntelliJ的檔案,開始選擇的應該是Open an existing Android Studio project,而不是Import Non-Android Studio project。
- 如果你下載下來的程式碼裡面只有gradle的檔案,即使還是要選Import Non-Android Studio project。
- 如果專案中有.idea之類的IntelliJ的檔案,開始選擇的應該是Open an existing Android Studio project,而不是Import Non-Android Studio project。
-
老使用者依然使用: File-->Import Project
這裡需要提醒的是,對於含有庫工程的專案而言, 需要指定整個專案的目錄,僅僅指定主工程是沒用的。
到這裡我們需要停下來總結一下:
- 如果你匯入的是一個Eclipse工程,那麼指定主工程目錄。AndroidStudio通過分析來幫你完成轉換。
- 如果你匯入的是一個AndroidStudio工程,那麼指定整個專案的目錄 。
附: 如何更改Module名稱
在Module上右鍵refactor--> rename ,當然可以看到有快捷鍵shift + F6, 這樣就可以改變Module的名稱了。
但是還沒有結束,這樣沒有更改引用這個Module的地方。
如果他是一個庫工程,你還需要繼續去檢視引用它的地方並進行修改。主要是其他Module的Gradle檔案。
Tips:
選中Module,ctrl+c即可複製工程名,在相關Gradle檔案中ctrl+v替換成新的名稱即可。
最後,別忘了,settings.gradle,這裡include的module名稱也需要更改。 至此,算是修改結束。
一切修改完畢,點選彈出提示中的Sync Now,讓工程重新構建
構建結束後就一切正常了。
當然你如果對資料夾的名稱也看著不順眼,也可以去修改資料夾名稱,改變後記得重新匯入即可。
總結
以上就是兩種匯入的方式的介紹,總體來說第一種適合無奈的時候提前熟悉AndroidStudio,第二種則是更推薦的方式。
無論採用哪一種,都希望你能儘快的接觸AndroidStudio,體驗它的強大。