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

來源:互聯網
上載者:User

標籤:android studio   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 Model 的。另外在 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'
該檔案中就僅僅只包含了一句話,在你的項目中如果有多個 Model 存在的時候,就可以選擇包含哪些進行編譯。


build.gradle項目:


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

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

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

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


APP Model


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

第一行:

apply plugin: 'com.android.application'
表示的是添加外掛程式,其是可以理解為該 model 為一個 com.android.application 程式,也就是應用程式,如果你的 Model 是一個庫,那麼自然也就是:

apply plugin: 'com.android.library'


dependencies :

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

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

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

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

  • [Android][Android Studio] Gradle項目中添加JNI組建檔案(.so檔案)
  • [Android][Android Studio] *.jar 與 *.aar 的產生與*.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 配置,該配置不是必須,但 庫類型的 Model 將無此配置。

下面自然也就是 最小的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 Model 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
========================================================

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.