1. 程式人生 > >eclipse轉AS全面解析

eclipse轉AS全面解析

說到使用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
    將Eclipse程式碼匯入到AndroidStudio的兩種方式
  • 接下來會到達警告介面,這裡會提示AndroidStudio可以直接匯入ADT的工程,先過,後面有直接匯入的講解。
    將Eclipse程式碼匯入到AndroidStudio的兩種方式
  • 選中你的專案工程,包括主工程和庫工程(Library)。
    將Eclipse程式碼匯入到AndroidStudio的兩種方式
  • 確認生成
    將Eclipse程式碼匯入到AndroidStudio的兩種方式

2. 修改匯出檔案引數

匯出後,由於adt很久沒更新,需要手動改一些引數,才能保證正常使用。
為了保證能夠講解的更清晰,下面分情況講解一下:

沒有庫工程,只有主工程

這種情況下你看到的目錄是這樣的
將Eclipse程式碼匯入到AndroidStudio的兩種方式

  • 首先需要更改的是 build.gradle 檔案
    AndroidStudio 1.0 ~ 1.0.2 使用的都是 Android Gradle plugin 1.0.0,因此需要將圖中紅框內的 0.12.+ 改為 1.0.0
    將Eclipse程式碼匯入到AndroidStudio的兩種方式

  • 然後還需要更新Gradle版本,指定為所需要的2.2.1
    在 /gradle/wrapper/gradle-wrapper.properties裡面
    將Eclipse程式碼匯入到AndroidStudio的兩種方式

含有庫工程

其實改動方法和上面一樣,只需要注意是改動整個專案的build.gradle和 /gradle/wrapper/gradle-wrapper.properties。
而不要嘗試去主工程或者庫工程裡面找build.gradle
將Eclipse程式碼匯入到AndroidStudio的兩種方式

3. 匯入AndroidStudio

  • 進入到AndroidStudio中,選擇匯入非AndroidStudio工程
    將Eclipse程式碼匯入到AndroidStudio的兩種方式
  • 找到需要匯入的工程目錄,可以看到圖示和Eclipse建立的工程不一樣。
    將Eclipse程式碼匯入到AndroidStudio的兩種方式
  • 點選OK,進入漫長的載入過程,之後就可以正常使用了。
    將Eclipse程式碼匯入到AndroidStudio的兩種方式

已經建立過工程的開啟AndroidStudio會直接進入以前的工程
這時候可以選擇File-->Import Project, 選中後點擊ok
將Eclipse程式碼匯入到AndroidStudio的兩種方式

相容模式下的bug

使用IDE的打包:
將Eclipse程式碼匯入到AndroidStudio的兩種方式

在相容模式只打主工程的,庫工程沒有加入到apk中,導致無法正常執行。
截止到1.0.2,AndroidStudio依然存在這個bug。
因為這個bug的存在,你在相容模式可以使用AndroidStudio程式設計,打包時開啟Eclipse。

OK,相容模式介紹到這裡。 我們開始介紹主角: Android Gradle Project。 這裡必須說明的是Google更希望我們使用這種方式,如果沒有什麼團隊的壓力,還是使用這種吧。

使用新的目錄結構

轉換目錄結構

  • 開啟Import

    • 新使用者:
      將Eclipse程式碼匯入到AndroidStudio的兩種方式
    • 老使用者: File-->Import Project
      將Eclipse程式碼匯入到AndroidStudio的兩種方式
  • 直接找到原有的Eclipse工程

    • 單一工程直接匯入即可。
    • 有庫工程的需要注意,匯入一定要指向主工程,而不是整個專案的目錄。指向專案目錄是無法進行轉換的。
      將Eclipse程式碼匯入到AndroidStudio的兩種方式
  • 指定目標路徑
    將Eclipse程式碼匯入到AndroidStudio的兩種方式
  • 這個地方需要詳細說一下
    將Eclipse程式碼匯入到AndroidStudio的兩種方式
    這裡上面兩個選項暫且不說,勾選上。
    最後一項提一下: 將Module名建立為camelCase風格。
    駝峰式,這個搞Java的都會熟悉,camelCase表示首字母小寫的駝峰式風格,CamelCase表示首字母大寫的駝峰式風格。
    不勾選這個選項意味著你原先的工程名是啥樣,轉換完就是啥樣。
    這裡的AndroidStudio會去分析Eclipse工程下的. project檔案,裡面的name就是你在Eclipse中看到的工程名。(沒有此檔案時會使用此工程的資料夾名。)
    將Eclipse程式碼匯入到AndroidStudio的兩種方式
    當然也有例外,比如countly-sdk-android轉換完就成了countlysdkandroid,下劃線我就不知道了,這個沒有再仔細研究規則,不過CamelCase會保持正常。
    這裡我比較喜歡讓Module首字母大寫(不知道為啥看這首字母小寫難受),原來的工程就是CamelCase風格,我就不勾選了。
    當然如果這裡沒注意直接轉換成了camelCase但最後又不喜歡怎麼辦? 可以看後面《如何更改Module名稱》部分。
    OK,配置完點選Finish即可

  • 之後需要經過一段時間的轉換。成功後可以看到import-summary.txt,這個檔案非常有用,後面會講到。
    將Eclipse程式碼匯入到AndroidStudio的兩種方式

到這裡,你的應用其實已經可以通過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檔案來看一下:

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部分,有如下文字:

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部分

ActionbarLibrary =>
    com.actionbarsherlock:actionbarsherlock:[email protected]
    com.android.support:support-v4:21.0.3

可以看到ActionbarSherlock被替代為了aar(Android ARchive ,jar : Java ARchive)。關於aar的介紹可以看這裡,本文就不再詳細展開了。

可以看到的是Library和jar都被替換了,可是你在當前工程裡再也找不到了。這是為什麼?

跟我來看下面的操作:

  • 在Module上右擊,選擇Open Module Settings
    將Eclipse程式碼匯入到AndroidStudio的兩種方式
  • 切換到Dependencies
    將Eclipse程式碼匯入到AndroidStudio的兩種方式
  • 點選右側的加號新增,選擇Library dependency
    將Eclipse程式碼匯入到AndroidStudio的兩種方式
  • 可以看到這個介面:
    將Eclipse程式碼匯入到AndroidStudio的兩種方式

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。
  • 老使用者依然使用: 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,讓工程重新構建
將Eclipse程式碼匯入到AndroidStudio的兩種方式
構建結束後就一切正常了。
當然你如果對資料夾的名稱也看著不順眼,也可以去修改資料夾名稱,改變後記得重新匯入即可。

總結

以上就是兩種匯入的方式的介紹,總體來說第一種適合無奈的時候提前熟悉AndroidStudio,第二種則是更推薦的方式。
無論採用哪一種,都希望你能儘快的接觸AndroidStudio,體驗它的強大。

相關推薦

eclipseAS全面解析

說到使用AndroidStudio,除了新建的專案,我們都會面臨的問題是原先Eclipse的程式碼該怎麼匯入到AndroidStudio中使用。 這方面相關的資料還比較少,自己摸索了一下,總結出這篇部落格,希望能讓開發者少走些彎路。 OK,進入正題。 Google為了讓我們更加方便的使用AndroidStu

Android Studio你必須學會的快捷鍵(EclipseAS必看)

前言:從Eclipse轉到Android Studio之後,一開始把keymap設定成Eclipse,卻發現有些常用的快捷鍵都失效了,大概是衝突了。想了下,覺得與其重新設定快捷鍵,不如去適應AS的快捷鍵,畢竟聽說AS新增了好些有用的快捷鍵。於是把keymap又改

JSON介紹及Android最全面解析方法(Gson、AS自帶org.son、Jackson解析)

前言 今天,我們來介紹一下現今主流的資料交換格式-JSON! 目錄 定義 JavaScript Object Notation,JavaScript的物件表示法,是一種輕量級的文字資料交換格式。 作用 用於資料的標記、儲存

Android開發:JSON簡介及最全面解析方法(Gson、AS自帶org.json、Jackson解析)

目錄 JSON簡介&解析方法介紹.png 定義 JavaScript Object Notation,JavaScript的物件表示法,是一種輕量級的文字資料交換格式。 作用 用於資料的標記、儲存和傳輸。 特點 輕量級的文字資料交換格式 獨立於語言和平臺 具有自我描述性 讀寫速度快,解析簡單 語法

eclipseandroidstudio時as的配置

前言:     以前用慣了eclipse覺得別人都用as,覺得as這也不好,那也不行。比如執行卡,快捷鍵用不習慣,沒eclipse的有些程式碼提示,快速修正什麼的,後面查了資料把as配置成eclise類似的快捷鍵後覺得還是as用起來舒服,as雖然開始執行起來卡,但是執行穩定

eclipse專案as專案中遇到Unable to execute dex: Multiple dex files define Lcom/loopj/Android/http/AsyncHttpC

今天在將eclipse專案轉as專案的時候,遇到兩個錯誤,記錄下來以防下次再次遇到: 1:Error:(1, 1) 錯誤: 非法字元: ‘\ufeff’Error:(1, 10) 錯誤: 需要class, interface或en 這個錯誤我一看。。呀。這個

eclipse 專案as專案時 .so檔案 jniLibs的設定

接著上篇:http://blog.csdn.net/u011644423/article/details/46989167 轉換專案 還是出現了問題 java.lang.UnsatisfiedLinkError: Couldn't load BaiduMapSDK_v3

javaScript之this全面解析(2)

mode undefined fin 全局對象 bar def rip 布爾 defined 在理解this的綁定過程之前,我們先來理解調用位置(不是聲明位置) ,最重要的是要分析調用棧(就是為了到達當前執行位置所調用的所有函數)。 我們關心的調用位置就在當前正在執行的函數

[] 各種Json解析工具比較 - json-lib/Jackson/Gson/FastJson

config 1.2 content pretty 接口實現 turn sso processor true JSON技術的調研報告一 、各個JSON技術的簡介和優劣1.json-libjson-lib最開始的也是應用最廣泛的json解析工具,json-lib 不好的地方確

[SVG實戰]餅圖全面解析

rotate code 處理 半徑 數學 偏移 空格 使用 clas 之前寫過一篇CSS3的餅圖全面解析,這次給大家分享一個SVG實現餅圖的全面解析。 既然是繪制餅圖,那麽顯然需要繪制圓形。 // 一個簡單的圓形,具有一定寬度的描邊。 <svg width=

Memcached全面解析並使用zabbix進行監控

解剖 memcache 原理 Memcached是什麽? Memcached是一個分布式內存緩存服務器,用於緩存數據庫查詢結果,減少數據庫的訪問次數,提高動態web頁面的速度及擴展性。Memcached的特征 a.協議簡單,Memcached使用簡單的文本行協議 b.基於libevent的事件處理

Redis的配置文件redis.conf全面解析

requested diff glog flush double room raise pla wait # Redis configuration file example. # # Note that in order to read the configuratio

this全面解析--JavaScript中的

函數的調用 fun 全局 是否 參數 沒有 ... obj 引用 上一章我們排除了一些對this的錯誤認識和知道了this是在調用函數時被綁定的,完全取決於函數的調用位置。先介紹兩個概念:調用位置和調用棧。 調用棧:就是為了到達當前執行位置所調用的所有函數。 調用位置:在當

全面解析rhel6-防火墻iptables -- 基本用法

tro 數字 drop 匹配 同時 分類 routing rop cmp 規則鏈解析鏈的用途:存放一條條防火墻規則鏈的分類依據:處理數據包的不同時機默認包括5種規則鏈 INPUT:處理入站數據包OUTPUT:處理出戰數據包FORWARD:處理轉發的數據包POSTROUTI

全面解析Activity的生命周期

body hub code uil style androidm ren lin lease 歡迎Follow我的GitHub, 關註我的CSDN. 在An

22.解決 eclipseAS 共用 SDK 導致 eclipse ADT 無法使用的問題

錯誤 兩個 sys 一個 post class 正常 == fonts 相信很多同學在從eclipse 轉 AS 都會遇到這個問題,因為方便所以共用了一個sdk 目錄,但是AS 會主動更新sdk,然而手賤的跟新了一夜,再打開eclipse的時候瞬間呆滯了,這一夜發生什麽了.

Android Touch事件傳遞機制全面解析(從WMS到View樹)

了解 分支 per seve from 這一 params 雞湯 dcl 轉眼間近一年沒更新博客了,工作一忙起來。非常難有時間來寫博客了,因為如今也在從事Andro

【iMooc】全面解析java註解

test sql語句 字符 con public insert OS 直接 變量 在慕課上學習了一個關於java註解的課程,下面是筆記以及一些源碼。 Annotation——註解 1.JDK中的註解 JDK中包括下面三種註解: @Override:標記註解(marker a

Android:全面解析 熟悉而陌生 的Application類使用

screen 存儲 程序啟動 兩個 com 完全 @override mat 例子 前言 Applicaiton類在 Android開發中非常常見,可是你真的了解Applicaiton類嗎? 本文將全面解析Applicaiton類,包括特點、方法介紹、應用場景和具體使用,

頂級數據庫行會Percona阿裏全面解析下一代雲數據庫技術

數據庫摘要: 幾年前,數據庫管理系統的企業市場似乎還如同銅墻鐵壁,除了老牌廠商外,其他廠商休想打進來。隨著移動互聯、物聯網技術的發展,多終端應用的時代悄然而至。結構化與非結構化數據的爆發,推動人類社會進入大數據時代。海量數據瞬間湧來,讓企業傳統數據庫系統不堪重負,針對海量數據的收集、存儲與分析,原始的封閉式架