天天看點

如何将android studio項目轉換成eclipse

首先,不要因為編譯原因而放棄。studio項目是完全可以轉換成eclipse的

本站的開源代碼闆塊有很多項目都是android studio開發的,很多同學以為必須要先學會studio,才能編譯這些源代碼,于是花了很長時間學studio,結果發現還是不會。其實任何studio項目都是可以轉換成eclipse的,eclipse目前的編譯能力比studio隻會多不會少。隻要你熟練了,一個中等複雜的studio項目轉成eclipse也隻是分分鐘的事情。 在這裡我要強調的是開源代碼闆塊的studio項目95%以上都是我親自編譯成功并且運作了的,而剩下我沒有驗證的極少部分往往是因為該項目在github上已經得到非常多的star,而編譯起來又異常複雜,但這是極少數的情況。

轉換方法

下面來談談studio到eclipse的轉換問題。在studio項目轉換成eclipse項目的過程中,對于studio的知識點隻需記住條:studio項目中src/main目錄下才是真正的項目代碼,main下java目錄裡面的代碼對應的是eclispe項目中的src目錄中的代碼。至于其他什麼亂七八糟的Gradle 代碼,完全不要去理會。

比如在twoway-view 項目中在使用方法裡面就有如下代碼

repositories {
    maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
}
 
dependencies {
    compile 'org.lucasr.twowayview:core:[email protected]'
    compile 'org.lucasr.twowayview:layouts:[email protected]'}
           

看不懂?沒關系,我也看不懂。你隻要看懂上面紅色文字部分的意思就行了。

首先要講的就是項目結構的轉換,這一點很基礎,我已經在http://jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/0918/1692.html一文中講解過。

但是那篇文章沒有結合具體的例子來說明,是以對于新手來講,還是很難開頭。其實除了項目的結構之外,項目的依賴關系其實也是一個難點:對于一個studio項目我們如何知道他依賴了哪些東西呢?

一個比較典型的執行個體

一般來講一個項目如果沒有什麼新系統的特征,直接轉換成eclipse的目錄結構然後eclipse import進去就ok了,但是現在很多項目往往使用了Material Design中的一些東西,比如ToolBar,RecyclerView以及appcompat的主題等,這種依賴關系就比較複雜。

下面我以https://github.com/TonicArtos/SuperSLiM 為例講解如何将它轉換成eclipse項目。

更改項目結構

首先下載下傳然後解壓:

如何将android studio項目轉換成eclipse

這麼複雜!吓到了是吧,沒關系很多檔案和目錄我可以直接删掉,從檔案的名稱來看example下面應該是demo代碼,library下面是庫代碼。其他的直接删掉,當然為了保險起見,你還是點選去看下如果裡面有src目錄基本上就可以确認這是跟項目代碼相關的了。删掉其他檔案和目錄之後我們就隻剩下:

如何将android studio項目轉換成eclipse

心情頓時就好了。

我們先來解決library目錄中的問題。打開library

如何将android studio項目轉換成eclipse

回想上面說的studio項目中src/main目錄下才是真正的項目代碼。是以我們将src/main中的檔案全部copy出來,其他的都可以直接删掉了,至于copy出來放在哪裡那是你的事,一般我自己的做法是直接放在library目錄下,然後删除掉copy檔案之外的所有東西。如果你按照我描述的做,那麼到這一步library下面應該是這樣的:

如何将android studio項目轉換成eclipse

再回想上面說的main下java目錄裡面的代碼對應的是eclispe項目中的src目錄中的代碼。是以我們将java目錄改名src目錄:

如何将android studio項目轉換成eclipse

這不就是熟悉的eclipse項目麼,其實非常簡單,本來我是不想寫那麼多的,但是有些人就是不會。至此library目錄中的項目結構我們就改造完成了。

按照完全一緻的方法我們去改造example目錄。

導入eclipse

将修正過的項目(此處為SuperSLiM-master目錄)下的所有内容導入到eclipse中:

如何将android studio項目轉換成eclipse

導入之後生成了library和MainActivity兩個project:

如何将android studio項目轉換成eclipse

library是庫,而MainActivity中是demo,通常我喜歡将他們的項目名稱改成github上的名稱,這裡我分别更改為:SuperSLiMLibrary和SuperSLiMDemo

解決錯誤

從上圖中可以看到導入的兩個project有錯誤,其實這些錯誤基本上是依賴關系導緻的。因為SuperSLiMDemo是依賴于SuperSLiMLibrary的,是以我們先從SuperSLiMLibrary中的錯誤入手。

在這個時候我并不知道這些錯誤具體産生的原因,是以我需要檢視具體的錯誤檔案,打開項目的包,發現以下java檔案有紅叉:

如何将android studio項目轉換成eclipse

随便選擇一個檔案進去看看,這裡我就選擇第一個好了找到了第一個錯誤:

如何将android studio項目轉換成eclipse

LayoutState的recyclerState方法找不到,LayoutState不就是上圖中的第三個檔案麼,進去很多錯誤,随便截個圖

如何将android studio項目轉換成eclipse

顯然是需要導入RecyclerView包了。期望導入RecyclerView之後就不會有任何問題了。

導入後發現大部分錯誤不見了,隻有LayoutState還有錯誤,原來是因為LayoutState中有這樣的代碼

1

if

(Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {

這要求編譯環境是5.0才行。将sdk換成5.0的,ok了,SuperSLiMLibrary已經沒有任何錯誤了。

看到這裡你可能會想,是不是麻煩了點,确實,事實上我并不是上面的每一步都按部就班,我一般先在每個錯誤檔案中掃描以便錯誤的地方,很快就可以定位到RecyclerView,然後添加依賴,甚至我都不想去掃描錯誤直接添加RecyclerView的依賴,因為github中已經說了這個項目是RecyclerView實作的。

SuperSLiMLibrary到這裡還有最後一步,将它設定成library,不然SuperSLiMDemo在添加lib的時候是找不到他的。

如何将android studio項目轉換成eclipse

再來看看SuperSLiMDemo中的錯誤。

在這之前我首先将剛剛的SuperSLiMLibrary添加到依賴中。然後還是有這些錯誤:

如何将android studio項目轉換成eclipse

style中的錯誤是因為沒有依賴appcompat,于是先添加了再說,一定要添加最新版本的appcompat(相容5.0的appcompat),為什麼呢,因為在主題代碼中有下面這些屬性:

<style name="AppTheme.Base" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">@color/primary</item>
        <item name="colorPrimaryDark">@color/primary_dark</item>
        <item name="colorAccent">@color/accent</item>
        <item name="android:windowNoTitle">true</item>
        <item name="windowActionBar">false</item>
    </style>
           

當你看到colorPrimary屬性的時候肯定需要在appcompat中編譯的。

同時因為SuperSLiMLibrary都是在5.0上編譯的,是以SuperSLiMDemo我也同樣在5.0上編譯。

然後你會發現我都沒去看src中的java代碼,就完全沒有錯誤了。

至此SuperSLiM這個項目就完全轉換成eclipse版本的項目了。

SuperSLiM不是最好轉換的項目,也不是最難轉換的項目,這篇文章隻是告訴你,studio轉eclipse是可行的,遇到問題該怎麼解決。文中所描述的步驟完全沒必要一一照搬,因為根本就沒有什麼固定的步驟。

另外我看到有網友對使用了appcompat的項目比較排斥,看到使用了appcompat就不研究了,這是完全錯誤的思想,現在絕大多數開源項目都用了appcompat,而且因為5.0的出現appcompat還将被越來越多的項目使用,你可以看到在android官方文檔上面,5.0的很多新特性更多的是介紹如何用appcompat去實作,而不是标準的sdk中的類。

繼續閱讀