[Android] 淺析總結 AS 中 Gradle 配置運行

========================================================
作者:qiujuer
博客:blog.csdn.net/qiujuer
網站:www.qiujuer.net
開源庫:Genius-Android
轉載請註明出處:http://blog.csdn.net/qiujuer/article/details/42342667
========================================================

既然是淺析,自然也就沒有深入的地方,我也寫不出深入的地方,自己沒有用過,也不會寫出來坑人的;僅僅就是在 Android Studio 中的 Gradle 使用配置而已。

Gradle

Gradle 是以 Groovy 語言爲基礎,面向Java應用爲主。基於DSL(領域特定語言)語法的自動化構建工具。

依賴管理

支持多方式依賴管理:包括從 maven 遠程倉庫、 nexus 私服、 ivy 倉庫以及本地文件系統的 jars 或者 dirs 。這也是我最喜歡的地方,操作簡單。

新項目


一個新的項目中就包含這些文件,build 是兩個,一個項目一個是 APP Module 的。另外在 APP 中可以看見有一個 manifest 文件夾,這意味着着可以有多 AndroidManifest 文件。

另外值得一說的是 gradle.properties 文件也是含有兩個,但是卻是一個是全局,一個是項目的;這與上面的 Build 文件有何區別?區別在於全局文件存在於 C:\Users\用戶名\.gradle文件夾中,該文件有可能沒有,需要自己創建,創建後所有項目都將具有訪問權限,在該文件中一般保存的是項目的一些變量等,如果是無關緊要的變量可以保存在項目文件中,如果是用戶名密碼等變量則需要保存在全局文件中。


至於項目的配置文件一般是空的。

local.properties

## This file is automatically generated by Android Studio.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file should *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
sdk.dir=D\:\\ToolKits\\Android\\sdk
其中包含了你的 sdk 配置,當然你還可以配置 ndk 路徑;格式與 sdk 一樣。


settings.gradle

include ':app'
該文件中就僅僅只包含了一句話,在你的項目中如果有多個 Module 存在的時候,就可以選擇包含哪些進行編譯。


build.gradle

項目:


兩個大的包圍一看就明瞭,一個是爲編譯準備的,一個是爲所有項目準備的。

其中,Repositories 配置的是上面所說的依賴管理的東西,也就是依賴管理的服務器。默認是 jcenter() 你可以添加其他,多個之間不干擾。

dependencies 這個也是依賴管理的東西,上面是指定依賴管理的服務器,這個就是具體依賴什麼庫。

聯合起來也就是,依賴 jcenter() 服務中的 gradle 庫,其包名是:“com.android.tools.build” ,版本是:1.0.0 版本


APP Module


在這個中基本可以按照名稱來知曉其作用。

第一行:

apply plugin: 'com.android.application'
表示的是添加插件,其是可以理解爲該 Module 爲一個 com.android.application 程序,也就是應用程序,如果你的 Module 是一個庫,那麼自然也就是:

apply plugin: 'com.android.library'


dependencies :

這個也就是所謂的依賴了,在這裏不光可以進行遠程依賴(上面所說的方法),也可以本地依賴:

compile fileTree(include: ['*.jar'], dir: 'libs')
這句話也就是說編譯時依賴 libs 文件夾下的所有 jar 文件。
compile project(':library')
這樣一句話是什麼意思?這也是依賴,不過依賴的是一個 Module ,前面說了在一個項目中可以有多個 Module ,這句話的意思也就是依賴一個本項目中 名稱爲 library 的 Module 庫。

compile 'com.android.support:appcompat-v7:21.0.3'
至於這句話也就是依賴一個遠程的庫了,這個庫的作用是在低版本中使用一定的 Material Design 的東西。

其他一些介紹我以前發過文章可以看看,包括依賴 JNI 本地 aar 等等:

詳細說說 android 部分:

先來看看基本完整的一個:

android {
    compileSdkVersion ANDROID_BUILD_TARGET_SDK_VERSION as int
    buildToolsVersion ANDROID_BUILD_TOOLS_VERSION

    defaultConfig {
    }

    buildTypes {
    }

    compileOptions {
    }

    sourceSets {
    }

    lintOptions {
    }

    productFlavors {
        flavor1 {
        }

        flavor2 {
        }
    }
    signingConfigs {
        release {
            storeFile file("×.keystore")
            storePassword "×××"
            keyAlias "××××"
            keyPassword "×××"
        }
    }
}
可以看見如果是完整的是有很多可以配置的地方;還讓我一個個道來:

    compileSdkVersion 21
    buildToolsVersion "21.1.2"
這兩個就是指定的編譯SDK以及編輯工具版本,具體可以打開你的 SDK Manager 看看。

defaultConfig

這個自然就是默認配置了,既然是默認配置那麼久相當於全局配置,也就是說這裏邊配置的下面的 buildTypes 中也將自動繼承了。

在這個中可以放入很多的控制,如下面 buildTypes/release 中的配置你也可以放到其中:

    defaultConfig {
        applicationId "com.example.qiujuer.application"
        minSdkVersion 15
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"

        ndk {
            moduleName "genius"
            cFlags "-DANDROID_NDK -D_RELEASE"
            ldLibs "m", "log", "jnigraphics"
            abiFilters "all"
        }
    }
在這裏,首先進行了一個 applicationId 配置,該配置不是必須,但庫類型的 Module 將無此配置。

下面自然也就是 最小的SDK版本爲 15,目標版本爲:21 也就是說其中的代碼你使用的全是API21中的 Android。再有就是當前的版本代碼,版本名稱,在Eclipse 中這兩個屬性是在 AndroidManifest.xml 文件中,在這裏把其提出來單獨配置就是爲了下面你可以在不同發佈版本中配置不同的值。

至於這裏的 ndk 部分,這個就是我額外加入的,其作用是可以直接編譯 NDK 代碼,不需要自己執行,具體詳見:[Android] 環境配置之Android Studio開發NDK

buildTypes

在這裏進行配置的是你的編譯配置,可以看見這裏有一個 release ,當然也就是有 debug 部分,兩個部分配置都是一樣。

在這裏主要進行的配置是是否進行代碼混淆,所以有一個代碼混淆的開關,以及代碼混淆的具體文件,文件有兩種,無論哪種都行。


compileOptions 

很多人或許不知道這個部分是幹什麼的,其是看看下面就明瞭了:

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
在這裏你可以進行 Java 的版本配置,以便使用對應版本的一些新特性。


sourceSets 

這個部分,看名字應該有個大概意思就是說源碼設置,其是很多從 Eclipse 中遷移過來的代碼,大部分中都將帶有這個設置,因爲 Eclipse的文件夾與 AS 不盡相同,所以需要手動指定。

    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']
        }

    }
以上是一些常用的設置,其中最後一個是引用 *.so 文件的時候使用的方法。


lintOptions

這個其實應該寫到最後的,因爲這個是設置 編譯的 lint 開關。

程序在buid的時候,會執行lint檢查,有任何的錯誤或者警告提示,都會終止構建,我們可以將其關掉。

    lintOptions {
        abortOnError false
    }

productFlavors
在這裏你可以設置你的產品發佈的一些東西,比如你現在一共軟件需要發佈到不同渠道,且不同渠道中的包名不同,那麼可以在此進行配置;甚至可以設置不同的 AndroidManifest.xml 文件。

    productFlavors {
        flavor1 {
            packageName='com.example.qiujuer.application1'
            manifest.srcFile 'exampleapk/AndroidManifest1.xml'
        }

        flavor2 {
            packageName='com.example.qiujuer.application2'
            manifest.srcFile 'exampleapk/AndroidManifest2.xml'
        }
    }
不過,對於這個我並不常用,可以說基本沒有用。


signingConfigs

這個相信大夥都知道吧,就是爲包簽名的配置,你可以設置具體的簽名文件,簽名密碼等等:

    signingConfigs {
        release {
            storeFile file("×.keystore")
            storePassword "×××"
            keyAlias "××××"
            keyPassword "×××"
        }
    }
這個可以不用自己創建,你可以點擊 build/generate signed apk,在其中選擇你的文件或者創建簽名文件,設置密碼等等,然後選擇記住密碼,然後就會看見有這個配置了。




Case

一些常用的操作配置說完了,來說說,一個簡單的小Case 。

在 APP Module build.gradle 文件根部我們加上:

task clearApk(type: Delete) {
    delete '../release/' + POM_ARTIFACT_ID + '_' + VERSION_NAME + '.apk'
}

task makeApk(type: Copy) {
    from('build/outputs/apk/')
    into('../release/')
    include('app-debug.apk')
    rename('app-debug.apk', POM_ARTIFACT_ID + '_' + VERSION_NAME + '.apk')
}
makeApk.dependsOn(clearApk, build)

代碼分爲3個部分,分別是刪除,拷貝,以及將其連接起來的一個設置。

先說說這個 Case 的目的,其目的是拷貝 build/outputs/apk下面的debug apk文件到項目根目錄的 release 文件夾下,並且更名。

但是細心的朋友應該會看見其中有兩個參數:POM_ARTIFACT_ID  VERSION_NAME 這兩個從哪裏來?

前面最開始講過:gradle.properties 文件,這兩個就是寫在項目根部的 gradle.properties 文件中:


寫好了,怎麼運行呢?兩種方式,第一種,代碼 task 上右擊,run():


第二張,命令行方式:


輸入後回車,等待執行完成,成功後會出現:


現在看看項目中:


的確是成功了!

這只是一個很基本的用法,限於篇幅就差不多這麼多吧,如果大家有疑問,可以評論回覆,我如果積累了一定量,我好針對問題寫新的一些用法,不然我也很沒有頭緒的。

========================================================
作者:qiujuer
博客:blog.csdn.net/qiujuer
網站:www.qiujuer.net
開源庫:Genius-Android
轉載請註明出處:http://blog.csdn.net/qiujuer/article/details/42342667
========================================================

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章