AndroidStudio快速入門二:Gradle快速構建Android項目(多個Module同時構建)

【開篇語】小編菜鳥一隻,初入AndroidStudio,只是想搞清楚項目從Eclipse導入到AndroidStudio的過程中是怎麼回事。所以簡單的看了下,gradle用法還有很多,其中原理還待深入瞭解。

一、Gradle準備

  1. 安裝好AS後,有默認的Gradle,但是建議使用自己的Gradle,本人下載的 gradle-2.5-all版本;
  2. 配置環境變量:
    GRADLE_HOME ==>>D:\Program Files\Android\Android Studio\gradle\gradle-2.5-all\gradle-2.5\bin;
    PATH ==>> %GRADLE_HOME%;
  3. 檢驗 :
    運行 gradle -v 如圖 既是配置成功
    gradle配置成功

二、演示項目的項目結構

|—— demo:
   |—— libproject:
   |       |- project1
   |       |- project2
   |       |- project3
   |       |- project4
   |       |- project5
   |       |- project6
   |—— project:
           |- project0
 project0 爲主工程,project0 依賴項目 project1,project2,project3,project4
 project4  依賴 project5,project6

三、settings.gradle配置

一個多項目構建必須在根項目的根目錄下包含settings.gradle文件,因爲它指明瞭那些包含在多項目構建中的項目。

項目文件根目錄 demo下

|—— demo:
   |—— settings.gradle
include ':project:project0'
include ':project:project1'
include ':project:project2'
include ':project:project3'
include ':project:project4'
include ':project:project5'
include ':project:project5'
include ':project:project6

此處的配置先後順序是否有影響還待進一步驗證(嘗試更換了順序,均可以構建成功,似乎會根據依賴關係自動分配順序),歡迎朋友們指導。
記住主工程的項目project0以及被依賴的項目一定要在此配置,否則會出現錯誤,錯誤詳情請
點擊:Eclipse轉AndroidStuido天坑

四、build.gradle配置

  • 項目文件根目錄 demo下配置一個全局的build.gradle

如果需要在多項目構建的所有項目中加入公用的配置或行爲,我們可以將這項配置加入到根項目的build.gradle文件中(使用allprojects)

|—— demo:
   |—— 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.3.0' //!!!注意:2.5版本的gradle爲1.3.0
    }
}
subprojects{
    //add common configuration for sub-projects here 
}
allprojects {
    //Add configuration here
}
  • 每個module根目錄下配置一個build.gradle
|—— demo:
   |—— libproject:
           |- project4
                 |- build.gradle
apply plugin: 'com.android.library' //需要的插件

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar') //依賴libs下的所有jar包
    compile project(':libproject:project5')  // project4 依賴 project5
    compile project(':libproject:project6')  // project4 依賴 project6
}

android {
    compileSdkVersion 17                    //SDK版本 注意:被依賴的project5|6 不能高於project4
    buildToolsVersion "23.0.1"

    lintOptions {
        abortOnError false
    }

    sourceSets {                           //資源設置
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
            jniLibs.srcDirs = ['libs']           //注意:引用libs文件夾中的so,需要該屬性
        }

        // Move the tests to tests/java, tests/res, etc...
        instrumentTest.setRoot('tests')

        // Move the build types to build-types/<type>
        // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
        // This moves them out of them default location under src/<type>/... which would
        // conflict with src/ being used by the main source set.
        // Adding new build types or product flavors should be accompanied
        // by a similar customization.
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }
}

五、構建項目、執行gradle命令

  • 構建項目一: 在項目根目錄demo下執行如下doc命令
gradle projects 

構建中

> gradle projects
:projects


------------------------------------------------------------
Root project
------------------------------------------------------------

Root project 'demo'
+--- Project ':libproject'
      --- Project ':project1'
      --- Project ':project2'
      --- Project ':project3'
      --- Project ':project4'
      --- Project ':project5'
      --- Project ':project6'
\--- Project ':project'
     \--- Project ':project0'


To see a list of the tasks of a project, run gradle <project-path>:tasks
For example, try running gradle :app:tasks

BUILD SUCCESSFUL
  • 構建項目二: 在項目根目錄demo下執行如下doc命令
gradle build

此刻有點像Ant編譯一樣,耐心等待
這裏寫圖片描述

now, build succesful, 最喜歡看到這個句啦!
此時查看項目目錄,發生了變化

|—— demo:
   |——.gradle
   |—— libproject:
   |       |- project1
   |       |     |-build.gradle
   |       |
   |       |- project2
   |       |- project3
   |       |- project4    //文件太多 不一一寫出
   |       |- project5
   |       |- project6
   |
   |—— project:
   |       |- project0
   |              |-build.gradle
   |              |—build
   |                  |—outputs
   |                      |-apk
   |                          |-project0.apk
   |                          |- ...
   |              |-.......文件太多 不一一寫出啦
   |—— gradle
   |       |——wrapper
   |            |——gradle-wrapper.jar
   |            |——gradle-wrapper.properties
   |—— build 
   |—— build.gradle
   |—— settings.gradle
  • 清除構建:在項目根目錄demo下執行如下doc命令
gradle clean

此操作類似ant 編譯中的ant clean 命令,會清除構建生成的文件,方便下一次構建。

推薦參考:

Gradle入門 有源碼實踐操作,理解起來很方便。

曾嘗試在在項目根目錄下的build.gradle把所有的子項目的配置也寫在這裏,執行錯誤,報錯:manifest.srcFile ‘AndroidManifest.xml’ 這裏的路徑有問題,還待進一步解決,期待各位朋友指導!

發佈了35 篇原創文章 · 獲贊 10 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章