標籤:android android studio gradle
大家如果喜歡我的部落格,請關注一下我的微博,請點擊這裡(http://weibo.com/kifile),謝謝
轉載請標明出處(http://blog.csdn.net/kifile),再次感謝
Android Gradle編譯學習日記(基於 Android Studio 1.0):
Android Gradle編譯學習日記之一(搭建 Gradle 環境以及編譯 Android 應用)
在上一篇文章中,我簡單介紹了一個 Gradle 環境變數的搭建,以及如何使用 Gradle 編譯 Android 項目,但是對於國內的大部分開發人員來說,我們通常都是使用 Eclipse進行 Android 開發,對於大部分人而言從一個平台遷移到另一個平台所花費的成本太高。因此本文就將介紹如何通過 Gradle 編譯 Eclipse 代碼結構下的Android 項目,以及將 Eclipse 下的 Andorid 項目遷移到 Android Studio 下,讓大家更加輕鬆的轉移項目代碼。
一、在 Eclipse 下建立一個 Android 項目
相信大家都不希望我再這裡示範如何在 Eclipse 下建立一個 Android 項目,因此我也不再花費時間在這上面,先上傳一張建立後的項目結構圖:
再來一張 Gradle 的預設目錄結構圖:
通過對比兩個目錄結構圖,我們可以發現,Eclipse 預設的代碼目錄結構和 Gradle 支援的代碼目錄結構是不同的,因此,如果我們使用上一篇文章中的方法直接進行 Android 項目編譯,會發現無法進行正常編譯,原因就是沒有找到對應的 Android 設定檔。
二、配置 Gradle 的資源路徑
為了讓 Gradle 能夠找到響應的源檔案和資源檔,我們先看一下Gradle 的目錄結構,從第二張圖中我們能夠發現 Gradle 的預設編譯結構中將程式源碼分為了幾個不同的部分:java、jni、rs、aidl,而 Eclipse 的目錄中java 和 aidl 是放置在同一個目錄下的,所以我們需要在 build.gradle 檔案根據項目結構定義好對應的路徑。
定義路徑位置的代碼如下:
android { sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] } androidTest.setRoot('tests') }}
請把 sourceSets 部分添加到 build.gradle 中的 android 域內。
其實 Gradle 預設的源碼路徑設定位置應該是在最外層,但是由於Andorid 外掛程式擁有自己的代碼設定,因此我們將 sourceSets 放置到 android 域內。
之後執行
gradle check
你現在應該能夠進行正常的編譯工作了,具體如何編譯請查看我上一篇文章。
三、引入項目依賴包
What?你出錯了,不可能吧?
當然其實這是可能的,注意查看第一張圖,裡面除了 TestGradle 目錄以外,還有一個 appcompat_v7,這是項目的依賴包,如果你不進行配置,那麼 Android 編譯時間無法找到他,自然會報錯。
現在我們來看看如何將依賴包引入 Android,讓他能夠正常編譯
(1)使用 maven
之前我就說過,Gradle 能夠使用 Maven 的幾乎所有特性,因此當我們需要使用依賴包的時候,而且該依賴包在 maven 中央庫中存在的時候,我們不妨直接在設定檔中配置,配置方法也十分簡單地說,以 appcompat_v7包為例,在 build.gradle 的最外層加入以下資訊:
dependencies { compile 'com.android.support:appcompat-v7:21.0.3'}
compile 代表著你希望在編譯的時候將某個 maven 包打入程式中,而後面的資訊則是對應 maven 包的相關資訊,方便從 maven 中央倉庫中進行擷取。
然後你再執行一下:
gradle check
現在是不是提示你程式能夠正常打包了呢。
(2)引入 jar 包
有時候我們在 libs 目錄下有存放 jar 包類型或者 so 連結庫類型的依賴資源,但是當你進行編譯時間,你會發現找不到這些資源,原因只有一個: Gradle 不知道你需要編譯的資來源物件在哪裡,因此我們需要手動在 build.gradle 進行路徑配置,大致方法與上面的類似,我就簡單敘述一下就好了。
開啟你的 build.gradle,在 dependencise 域,沒錯,就是剛才我們添加 appcompa_v7包的那個域,在域中我們加入一下代碼:
compile fileTree(dir: 'libs', include: ['*.jar'])
該代碼就將所有在 libs 目錄下的 jar 包引入了,如果要引入 so 庫,再加一句
compile fileTree(dir: 'libs', include: ['*/*.so'])
(3)引入依賴項目
如果你實在找不到對應的 maven 項目或者不能單純使用 jar 包進行引入,實在需要使用一個依賴工程,那我們就得考慮通過將依賴項目先轉換為 Gradle 類型的 Android Library,然後再進行項目關聯。
面對這種情況,我們可以像 Eclipse 一樣將應用項目和依賴工程放在同一目錄下,方便關聯。
我們先將 TestGradle 中 build.gradle 中關於 appcompat 依賴包得引用去掉
在頂層目錄中,我們建立一個 build.gradle 和 setting.gradle 檔案分別存放項目依賴。
build.gradle 用於存放通用的配置資訊,例如通用依賴:
// Top-level build file where you can add configuration options common to all sub-projects/modules.buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:1.0.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files }}allprojects { repositories { jcenter() }}
setting.gradle 用於存放項目資訊,例如這裡,我們可以像這樣命名:
include ':TestGradle',':appcompat_v7'
TestGradle 和 appcompat_v7分別為應用項目和依賴工程的名稱,
如果你的工程是在某個子目錄下,那麼你可以使用類似於‘:libraries:lib1‘這種形式標明在 libraries 檔案夾下的 lib1檔案夾也是一個 Gradle 項目
之後我們進入 appcomp_v7目錄,建立對應的 build.gradle 設定檔,由於我們在上層目錄中已經建立了一個 build.gradle 並且配置了通用的依賴資訊,因此在這個設定檔中我們可以不必寫入 buildscript 的相關屬性。
apply plugin: 'com.android.library'android { compileSdkVersion 21 buildToolsVersion "21.1.2"}
這裡需要留意的是,
這裡的外掛程式類型是‘ com.android.library‘ 標明他是一個依賴包。另外如果你的項目配置是 Eclipse 目錄類型,請根據上文,配置對應的源碼位置。
如此一來,你已經配置好了相關的依賴工程,接下來我們需要將這個依賴工程配置到主工程中。
方法為在主工程 build.gradle 中加入
dependencies { compile project(':appcompat_v7')}
之後你再使用 Gradle 命令列就能夠針對本地的依賴庫進行編譯。
四、使用 Android Studio 引入工程
這裡簡單說說如何通過 Android Studio 使用 Eclipse 的項目目錄結構進行開發。
其實方法並不複雜,通過上面的步驟我們已經成功的配置好了一個 Gradle 工程的相關環境,因此我們只需要通過點擊 File->ImportProject,選中 appcompat_v7和 TestGradle 所在的父目錄即可,然後一路 Next,之後,你能看到你的項目被引入到了 Android Studio 中
除了代碼結構以外,與 Android Studio 建的一模一樣有沒有!!!
本篇博文就到這裡,主要介紹了如何通過建立 Gradle設定檔將 Eclipse 項目徹底匯入 Android Studio。希望大家喜歡,看到這裡的點個贊可好。
Android Gradle編譯學習日記之二(使用 Gradle 編譯 Eclipse,引入依賴資源以及遷移 Android Studio)