Android Gradle構(gòu)建學(xué)習(xí)(二):構(gòu)建定制

Manifest屬性

通過SDL可以配置一下manifest選項:

  • minSdkVersion
  • targetSdkVersion
  • versionName
  • applicationId (有效的包名 -- 更多詳情請查閱ApplicationId 對比 PackageName)
  • package Name for the test application
  • Instrumentation test runner

在android元素中的defaultConfig元素中定義所有配置。
在構(gòu)建文件中定義的強大之處在于它是動態(tài)的。 例如,可以從一個文件中或者其它自定義的邏輯代碼中讀取版本信息:

def computeVersionName() {
    ...
}

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.0"

    defaultConfig {
        versionCode 12
        versionName computeVersionName()
        minSdkVersion 16
        targetSdkVersion 16
    }
}

注意:不要使用與在給定范圍內(nèi)的getter方法可能引起沖突的方法名。例如,在defaultConfig{...}中調(diào)用getVersionName()將會自動調(diào)用defaultConfig.getVersionName()方法,你自定義的getVersionName()方法就被取代掉了。

Build Types構(gòu)建類型

默認情況下,Android Plugin會自動給項目設(shè)置同時構(gòu)建應(yīng)用程序的debug和release版本。 兩個版本之間的不同主要圍繞著能否在一個安全設(shè)備上調(diào)試,以及APK如何簽名。

Debug版本可采用默認簽名。Release版本在構(gòu)建過程中沒有簽名,需要稍后再簽名。

這些配置通過一個BuildType對象來配置。默認情況下,這兩個實例都會被創(chuàng)建,分別是一個debug版本和一個release版本。

Android plugin允許像創(chuàng)建其他構(gòu)建類型一樣定制debug和release實例。這需要在buildTypes的DSL容器中配置:

android {
    buildTypes {
        debug {
            applicationIdSuffix ".debug"
        }

        jnidebug.initWith(buildTypes.debug)
        jnidebug {
            packageNameSuffix ".jnidebug"
            jnidebugBuild true
        }
    }
}

以上代碼片段實現(xiàn)了以下功能:

  • 配置默認的debug構(gòu)建類型
  • 將debug版本的包名設(shè)置為.debug以便能夠同時在一臺設(shè)備上安裝debug和release版本的apk。
  • 創(chuàng)建了一個名為jnidebug的新構(gòu)建類型,并且這個構(gòu)建類型是debug構(gòu)建類型的一個副本。
  • 繼續(xù)配置jnidebug構(gòu)建類型,允許使用JNI組件,并且也添加了不一樣的包名后綴。

創(chuàng)建一個新的構(gòu)建類型就是簡單的在buildType標簽下添加一個新的元素,并且可以使用initWith()或者直接使用閉包來配置它。

簽名配置

對一個應(yīng)用程序簽名需要以下:

  • 一個Keystory
  • 一個keystory密碼
  • 一個key的別名
  • 一個key的密碼
  • 存儲類型
    位置,鍵名,兩個密碼,還有存儲類型一起形成了簽名配置。

默認情況下,debug被配置成使用一個debug keystory。 debug keystory使用了默認的密碼和默認key及默認的key密碼。 debug keystory的位置在$HOME/.android/debug.keystroe,如果對應(yīng)位置不存在這個文件將會自動創(chuàng)建一個。
可以創(chuàng)建其他配置或者自定義內(nèi)建的默認配置。通過signingConfigs這個DSL容器來配置:

android {
    signingConfigs {
        debug {
            storeFile file("debug.keystore")
        }

        myConfig {
            storeFile file("other.keystore")
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
        }
    }

    buildTypes {
        foo {
            debuggable true
            jniDebugBuild true
            signingConfig signingConfigs.myConfig
        }
    }
}

以上代碼片段修改debug keystory的路徑到項目的根目錄下。在這個例子中,這將自動影響其他使用到debug構(gòu)建類型的構(gòu)建類型。

這里也創(chuàng)建了一個新的Single Config(簽名配置)和一個使用這個新簽名配置的新的Build Type(構(gòu)建類型)。

注意:只有默認路徑下的debug keystory不存在時會被自動創(chuàng)建。更改debug keystory的路徑并不會自動在新路徑下創(chuàng)建debug keystory。如果創(chuàng)建一個新的不同名字的SignConfig,但是使用默認的debug keystore路徑來創(chuàng)建一個非默認的名字的SigningConing,那么還是會在默認路徑下創(chuàng)建debug keystory。換句話說,會不會自動創(chuàng)建是根據(jù)keystory的路徑來判斷,而不是配置的名稱。

依賴關(guān)系

Gradle項目可以依賴于其它組件。這些組件可以是外部二進制包,或者是其它的Gradle項目。

1. 本地二進制包依賴
可以在compile配置中,添加對本地jar包或aar包的依賴

dependencies {
    compile files('libs/foo.jar')
}

android {
    ...
}

注意:這個dependencies DSL標簽是標準Gradle API中的一部分,所以它不屬于android標簽

這個compile配置將被用于編譯main application。它里面的所有東西都被會被添加到編譯的classpath中,同時也會被打包進最終的APK。 以下是添加依賴時可能用到的其它一些配置選項:

  • compile main application(主module)。
  • androidTestCompile test application(測試module)。
  • debugCompile debug Build Type(debug類型的編譯)。
  • releaseCompile release Build Type(發(fā)布類型的編譯)。

APK默認配置了兩個或兩個以上的編譯配置:compile和< buildtype >Compile. 創(chuàng)建一個新的Build Type將會自動創(chuàng)建一個基于它名字的新配置。

2. 遠程二進制包依賴
Gradle支持從Maven或者Ivy倉庫中拉取文件。首先必須將倉庫添加到列表中,然后必須在依賴中聲明Maven或者Ivy聲明的文件。

repositories {
   //maven倉庫
    mavenCentral()
}


dependencies {
    //maven文件
    compile 'com.google.guava:guava:11.0.2'
}

android {
    ...
}

注意:mavenCentral()是指定倉庫URL的簡單方法。Gradle支持遠程和本地倉庫。

3. 多項目設(shè)置

Gradle項目也可以通過使用多項目配置依賴于其它Gradle項目。多項目配置的實現(xiàn)通常是在一個根項目路徑下將所有項目作為子文件夾包含進去。

例如,給定以下項目結(jié)構(gòu):

MyProject/
 + app/
 + libraries/
    + lib1/
    + lib2/

我們可以定義3個項目。Grand將會按照以下名字映射它們:

:app
:libraries:lib1
:libraries:lib2

每一個項目都擁有自己的build.gradle文件來聲明自己如何構(gòu)建。 另外,在根目錄下還有一個setting.gradle文件用于聲明所有項目。 這些文件的結(jié)構(gòu)如下:

MyProject/
 | settings.gradle
 + app/
    | build.gradle
 + libraries/
    + lib1/
       | build.gradle
    + lib2/
       | build.gradle

其中setting.gradle的內(nèi)容非常簡單,這里定義了哪一個文件夾才是真正的Gradle項目。

include ':app', ':libraries:lib1', ':libraries:lib2'

其中:app項目可能依賴于這些庫,這是通過以下依賴配置聲明的:

dependencies {
    compile project(':libraries:lib1')
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評論 19 139
  • 1.介紹 如果你正在查閱build.gradle文件的所有可選項,請點擊這里進行查閱:DSL參考 1.1新構(gòu)建系統(tǒng)...
    Chuckiefan閱讀 12,363評論 8 72
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,034評論 25 709
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,273評論 6 342
  • 天下其實就在一張地圖里。指點江山的開始,也是從地圖上找到自己的位置開始的。水系 山脈和疆域才能盡收眼底。 在閱讀...
    Andylee閱讀 765評論 0 2

友情鏈接更多精彩內(nèi)容