天天看點

将studio項目 轉換為eclipse項目

總會有些奇怪的事情,比如,有的人就有将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 代碼,完全不要去理會。

1

2

3

4

5

6

7

<code>repositories {</code>

<code>}</code>

<code>dependencies {</code>

<code>    </code><code>compile </code><code>'org.lucasr.twowayview:core:1.0.0-snapshot@aar'</code>

<code>    </code><code>compile </code><code>'org.lucasr.twowayview:layouts:1.0.0-snapshot@aar'</code><code>}</code>

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

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

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

首先下載下傳然後解壓:

将studio項目 轉換為eclipse項目

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

将studio項目 轉換為eclipse項目

心情頓時就好了。

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

将studio項目 轉換為eclipse項目

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

将studio項目 轉換為eclipse項目

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

将studio項目 轉換為eclipse項目

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

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

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

将studio項目 轉換為eclipse項目

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

将studio項目 轉換為eclipse項目

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

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

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

将studio項目 轉換為eclipse項目

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

将studio項目 轉換為eclipse項目

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

将studio項目 轉換為eclipse項目

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

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

<code> </code><code>if</code> <code>(build.version.sdk_int &lt; build.version_codes.lollipop) {</code>

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

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

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

将studio項目 轉換為eclipse項目

再來看看superslimdemo中的錯誤。

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

将studio項目 轉換為eclipse項目

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

<code>    </code><code>&lt;style name=</code><code>"apptheme.base"</code> <code>parent=</code><code>"theme.appcompat.light"</code><code>&gt;</code>

<code>        </code><code>&lt;item name=</code><code>"colorprimary"</code><code>&gt;@color/primary&lt;/item&gt;</code>

<code>        </code><code>&lt;item name=</code><code>"colorprimarydark"</code><code>&gt;@color/primary_dark&lt;/item&gt;</code>

<code>        </code><code>&lt;item name=</code><code>"coloraccent"</code><code>&gt;@color/accent&lt;/item&gt;</code>

<code>        </code><code>&lt;item name=</code><code>"android:windownotitle"</code><code>&gt;</code><code>true</code><code>&lt;/item&gt;</code>

<code>        </code><code>&lt;item name=</code><code>"windowactionbar"</code><code>&gt;</code><code>false</code><code>&lt;/item&gt;</code>

<code>    </code><code>&lt;/style&gt;</code>

當你看到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中的類。

繼續閱讀