1. 程式人生 > >Android studio 匯入github工程

Android studio 匯入github工程

從github下載兩個開源專案:

PagerSlidingTabStrip    |    Android-Universal-Image-Loader-master

https://github.com/astuetz/PagerSlidingTabStrip


下文說的Project等同於eclipse中的workspace,Module等同於eclipse中的project

先說匯入PagerSlidingTabStrip:

檔案列表的兩個Modul,一個library,一個sample。如果是eclipse的話直接選中這兩個modul匯入就可以了。

如果使用Android Studio,則可以分兩種方式匯入。看第一張圖結構,一些gradle檔案說明了這個Project可以整個匯入,匯入後文件根目錄就是工作空間的名詞,裡面兩個modle,sample和library。當然如果我已經有了工作空間,只需要匯入sample和library,就是下文說的第二種方式了。然後看第二張圖,很明顯它不能做為一個Project整個匯入,它沒有gradle構建專案的配置檔案,所以你必須有一個Project,然後通過下文的第二種方式匯入。

第一種方式:

先看下匯入成功的結構


下載完專案先不要急著匯入,按下文操作修改一些gradle相關檔案後再匯入,特別是下文說的第二個需要修改的檔案,如果本地沒有這個配置的包,匯入時會花很長時間去下這個包,但是一般我們在安裝studio的時候就已經有了。

這裡從第一步開始匯入並解決這些錯誤。

開啟你的文字編輯器,修改配置檔案。

第一個檔案:PagerSlidingTabStrip-master\build.gradle

[plain] view plaincopyprint?在CODE上檢視程式碼片派生到我的程式碼片
  1. dependencies {  
  2.         classpath 'com.android.tools.build:gradle:0.6.+'  
  3.     }  

0.6+,改成你的版本。如果你不知道該改成啥,最簡單的方式是你新建一個project,找到這個檔案看這個值是多少。

更改後:

[plain] view plaincopyprint?在CODE上檢視程式碼片派生到我的程式碼片
  1. dependencies {  
  2.         classpath 'com.android.tools.build:gradle:1.0.0'  
  3.     }  

第二個檔案:D:\PagerSlidingTabStrip-master\gradle\wrapper\gradle-wrapper.properties

[plain] view plaincopy
print?在CODE上檢視程式碼片派生到我的程式碼片
  1. distributionUrl=http\://services.gradle.org/distributions/gradle-1.8-all.zip  

gradle-1.8.all.zip,改成你的版本。如上,如果不知道你可以新建一個project,去找。

我的android studio版本是1.0.1,gradle檔案路徑在android studio的安裝目錄下

D:\Program Files\Android\Android Studio\gradle\gradle-2.2.1

更改後:

[plain] view plaincopyprint?在CODE上檢視程式碼片派生到我的程式碼片
  1. <pre name="code" class="plain">distributionUrl=http\://services.gradle.org/distributions/gradle-2.2.1-all.zip  

第三個檔案:

D:\PagerSlidingTabStrip-master\gradle.properties

[plain] view plaincopyprint?在CODE上檢視程式碼片派生到我的程式碼片
  1. ANDROID_BUILD_TARGET_SDK_VERSION=19  
  2. ANDROID_BUILD_TOOLS_VERSION=19  
  3. ANDROID_BUILD_SDK_VERSION=19  

對應改成你的版本

更改後:

[plain] view plaincopyprint?在CODE上檢視程式碼片派生到我的程式碼片
  1. ANDROID_BUILD_TARGET_SDK_VERSION=21  
  2. ANDROID_BUILD_TOOLS_VERSION=21.1.2  
  3. ANDROID_BUILD_SDK_VERSION=21  

(如果你的專案這個檔案沒有上面配置,則不用管。)

第四個檔案:

D:\PagerSlidingTabStrip-master\library\build.gradle

[plain] view plaincopyprint?在CODE上檢視程式碼片派生到我的程式碼片
  1. apply from: 'https://raw.github.com/chrisbanes/gradle-mvn-push/master/gradle-mvn-push.gradle'  

註釋掉這句程式碼:

更改後:

[plain] view plaincopyprint?在CODE上檢視程式碼片派生到我的程式碼片
  1. //apply from: 'https://raw.github.com/chrisbanes/gradle-mvn-push/master/gradle-mvn-push.gradle'  

(如果你的專案這個檔案沒有上面配置,則不用管。)

其他檔案:

D:\PagerSlidingTabStrip-master\library\project.properties和D:\PagerSlidingTabStrip-master\sample\project.properties

[plain] view plaincopyprint?在CODE上檢視程式碼片派生到我的程式碼片
  1. target=android-17  
指定你的sdk版本,我的sdk沒有這個版本,我沒有修改這個檔案,結果編譯通過可以執行。有沒有覺得很不可思議?其實之前已經指定了。

看檔案 D:\PagerSlidingTabStrip-master\gradle.properties

[plain] view plaincopyprint?在CODE上檢視程式碼片派生到我的程式碼片
  1. ANDROID_BUILD_TARGET_SDK_VERSION=21  
  2. ANDROID_BUILD_TOOLS_VERSION=21.1.2  
  3. ANDROID_BUILD_SDK_VERSION=21  

Yes,就是這裡了。

看檔案 D:\PagerSlidingTabStrip-master\sample\build.gradle和D:\PagerSlidingTabStrip-master\library\build.gradle

[plain] view plaincopyprint?在CODE上檢視程式碼片派生到我的程式碼片
  1. android {  
  2.     compileSdkVersion Integer.parseInt(project.ANDROID_BUILD_SDK_VERSION)  
  3.     buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION  
  4.     defaultConfig {  
  5.         minSdkVersion 8  
  6.         targetSdkVersion Integer.parseInt(project.ANDROID_BUILD_TARGET_SDK_VERSION)  
  7.         versionName project.SAMPLE_VERSION_NAME  
  8.         versionCode Integer.parseInt(project.SAMPLE_VERSION_CODE)  
  9.     }  
各自已經引用了,minSdkVersion=8,我們也可以全域性去指定,然後引用。

配置:ANDROID_BUILD_MIN_SDK_VERSION=14

引用:

[plain] view plaincopyprint?在CODE上檢視程式碼片派生到我的程式碼片
  1. minSdkVersion project.ANDROID_BUILD_MIN_SDK_VERSION  

這四個檔案改完後就可以直接匯入整個工程了

File-import project-PagerSlidingTabStrip-master(根目錄)

成功匯入後的結構圖上面已經給出。

如果有錯點選


第二種方式:

如果已經有Project,只想匯入sample和libray這兩個專案到Project。

step1:

File > Import Project

step2:


step3:


step4



(PS.我已經匯入了,所以這個Finish不可點選)


匯入完後的工作目錄專案不見了,切換顯示方式就有了,點選Project


工程出來了,看message gradle message報錯資訊



看完第一種方式,這裡能明白是怎麼回事了。


在gradle.properties配置上sdk的值,因為sample和library中的gradle.properties中都有引用。

[plain] view plaincopyprint?在CODE上檢視程式碼片派生到我的程式碼片
  1. ANDROID_BUILD_MIN_SDK_VERSION=14  
  2. ANDROID_BUILD_TARGET_SDK_VERSION=21  
  3. ANDROID_BUILD_TOOLS_VERSION=21.1.2  
  4. ANDROID_BUILD_SDK_VERSION=21  
然後不要忘了註釋掉

libray中build.gradle中的一句程式碼:

[plain] view plaincopyprint?在CODE上檢視程式碼片派生到我的程式碼片
  1. apply from: 'https://raw.github.com/chrisbanes/gradle-mvn-push/master/gradle-mvn-push.gradle'  

然後同步gradle檔案,點選這個按鈕


結果還是報錯,其實和上面一樣。

知道是什麼原因了,就不要一個個改了,直接去PagerSlidingTabStrip-master\gradle.properties原始檔中把這些配置copy過來一次搞定。

[plain] view plaincopyprint?在CODE上檢視程式碼片派生到我的程式碼片
  1. VERSION_NAME=1.0.1  
  2. GROUP=com.astuetz  
  3. SAMPLE_VERSION_NAME=1.0.2  
  4. SAMPLE_VERSION_CODE=3  
然後同步gradle(PS:這個時候我也不清楚可以編譯否)

oh,編譯通過,也可以執行,結構如下。



PagerSlidingTabStrip這個github的開源控制元件的兩種匯入方式說完。

另外一個Android-Universal-Image-Loader-master

看根目錄結構就知道,需要用第二中方式去匯入。

看smple和library的目錄結構:


sample匯入可以正常識別,記得匯入之前修改build.gradle檔案。

library識別不了。原因在於build.gradle這個檔案。

直接copy到library目錄下,並修改

apply plugin: 'com.android.application'

改為:

apply plugin: 'android-library' 或者 apply plugin: 'com.android.library' 

這樣就可以正常匯入了。

但是新的問題又來了

如何在sample中引用library這個專案?

先把sample中libs中的universal-image-loader-1.9.4-SNAPSHOT.jar這個包刪掉

點選sync gradle message後工程很明顯會報錯。

開始引入library,如圖操作:


點選Mehule dependency後會彈出一個視窗,選中library即可。sync gradle message,工程就不會報錯了。

如何將libray打包成jar檔案? 如何在專案中匯入這個jar檔案?

下篇文章繼續。