1. 程式人生 > >build.gradle配置檔案的用法

build.gradle配置檔案的用法

    溫故而知新可以為師矣。build檔案的各種配置肯定一查一大把,這個是為了方便自己使用查詢寫的。

1、配置libs".jar"檔案

dependencies {
    ...
    compile fileTree(include: ['*.jar'], dir: 'libs')
}

2、從eclipse工程轉到AS工程,裡面用到.so檔案的jni的配置:

android{
    .....
    sourceSets {
        main {
            jni.srcDirs = []
            jniLibs.srcDirs = ['libs'
] }
}
3、依賴工程的配置:xxx為你引入的工程的名字
dependencies {
    compile project(':xxx')
    }
一般來說如果在modules setting裡面新增依賴就會自動配置的,但是以防萬一還是要看看build檔案有沒有,如果沒有的話是不會依賴上去的。

不過要想在modules setting裡面配置的依賴的話,還需要前一步需要在專案的setting.gradle檔案裡面看看有沒有配置這個專案,如果沒有的話
在modules setting裡面是找不到的

4、多渠道打包配置(這裡以友盟的配置為例):

a)在manifest檔案裡面配置友盟渠道:

<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}"/>
b)build檔案的配置:

配置簽名:

  android{
......
/***配置簽名,如果是開發中的話要配置debug,如果是發包的話要配置release否則會出現app無法開啟的錯誤***/
signingConfigs {
    /*debug {
        storeFile file('xxx.keystore')
        storePassword "xxx"
        keyAlias "xxx"
keyPassword "xxx" }*/ release { storeFile file('xxx.keystore') storePassword "xxx" keyAlias "xxx" keyPassword "xxxx" } }
  }
配置渠道號和打包出來的名字:
  android{
........
buildTypes {
    release {
        minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release/***配置簽名,如果是開發中的話要配置debug,如果是發包的話要配置release否則會出現app無法開啟的錯誤***/
        // 自定義輸出配置
applicationVariants.all { variant ->
            variant.outputs.each { output ->
                def outputFile = output.outputFile
                if (outputFile != null && outputFile.name.endsWith('.apk')) {
                    // 輸出apk名稱為xx+productFlavors.apk
def fileName = "xx${variant.productFlavors[0].name}.apk"
output.outputFile = new File(outputFile.parent, fileName)
                }
            }
        }
    }
}
/**渠道號**/
productFlavors {
    "52731"{}
    "52732"{}
    "52733"{}
    "52734"{}
 
}
/**和manifest的<meta-data     android:name="UMENG_CHANNEL"   android:value="${UMENG_CHANNEL_VALUE}"/>對應**/
productFlavors.all {
    flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}

lintOptions {
    checkReleaseBuilds false
// Or, if you prefer, you can continue to check for errors in release builds,
    // but continue the build even when errors are found:
abortOnError false
}
....
  }

5、配置分包(解決方法數超過65k的問題):

a)build檔案的gradle配置

android {
    ......defaultConfig {
       ....../*是否可以分包,設定為true*/
multiDexEnabled true
}

    afterEvaluate {
        tasks.matching {
            it.name.startsWith('dex')
        }.each { dx ->
            if (dx.additionalParameters == null) {
                dx.additionalParameters = []
            }
            dx.additionalParameters += '--multi-dex' // enable multidex
            // optional
            // dx.additionalParameters += "--main-dex-list=$projectDir/<filename>".toString() // enable the main-dex-list
}
    }
b)自定義application,讓你的application繼承MultiDexApplication:
public class MyApplication extends MultiDexApplication 
c)在manifest檔案裡面把你的application配置上去:
<application
android:name=".MyApplication"
android:allowBackup="false"
android:icon="@drawable/ic_launche"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@style/AppTheme">

一下摘錄自:http://www.androidchina.net/7463.html,感謝!

Gradle是Android Studio中預設的構建系統。Gradle 採用了 Groovy 語言作為主要的指令碼語言。我們app專案的 build.gradle 和APP Moudle裡的build.gradle檔案,就是一個 Groovy 類。接下來讓我就介紹下Gradle的基本功能和高階技巧。

基本用法

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.0"
    defaultConfig {
        applicationId "com.renny.gradletest"
        minSdkVersion 17
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.+'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
}

上面的程式碼就是剛建好的Android工程時,studio為我們建立的預設Module裡的build.gradle ,採用的Gradle版本是2.3.3。而Gradle大部分功能配置也是在個檔案裡實現的。
apply plugin::用來指定用的是哪個外掛,開發中常見的值有

'com.android.application':Android APP外掛(打包得到的是.apk檔案)
'com.android.library':Android庫外掛(打包得到的是.aar檔案)
'java':普通的java外掛(打包得到的是.jar檔案)

android{}用來指定Android打包外掛的相關屬性,其包含如下節點

compileSdkVersion(apiLevel):設定編譯時用的Android版本
buildToolsVersion(buildToolsVersionName):設定編譯時使用的構建工具的版本
defaultConfig:設定一些預設屬性,其可用屬性是buildTypes和productFlavors之和。(productFlavors預設檔案裡沒有,會在後面介紹)

buildTypes:配置構建型別,可打出不同型別的包,常見的有debug和release兩種,當然你還可以再增加N種

productFlavors:配置不同風格的APP,在buildTypes的基礎上還可以讓每一個型別的APP擁有不同的風格,所以最終可以打出的APK的數量就是buildTypes乘以productFlavors。構建的變數名稱是productFlavors+buildTypes。

QQ截圖20170824154702.pngQQ截圖20170824154702.png

dependencies:配置依賴,這項可定是從eclipse換到studio後感覺最方便的一處了。各種外部依賴直接一行程式碼搞定,不用手動下依賴包了。
其中compile fileTree(dir: 'libs', include: ['*.jar'])的意思是依賴libs目錄下全部的jar檔案。

進階用法

好了,上面的基本配置只是Gradle簡單的用法,其實我們可以用Gradle玩出很多花樣來。

manifest動態配置

很多第三方SDK需要在AndroidManifest.xml中配置你的一些key資訊,以友盟推送為例:

<meta-data 
android:value="YOUR_APP_KEY" 
android:name="UMENG_APPKEY"/>

但是你不同測試包和正式包的key是不同的,那麼就可以這麼修改:

<meta-data
    android:name="UMENG_APPKEY"
    android:value="${UMENG_APPKEY}" />

然後在productFlavors中的各個版本中加上不同的資訊,這樣你打出的不同包採用的appkey也會不一樣。

 manifestPlaceholders = [UMENG_CHANNEL: "0",
                UMENG_APPKEY : "123456789"]

不僅這些自定義元資料可以動態配置,android:iconandroid:label這些標籤也可以修改,這樣打出的不同包就有不同的圖示了,方便做區分

Moudle動態依賴

在元件化app裡面,我們可能在測試包和正式包需要依賴不同元件。比如測試環境需要除錯模組,但正式環境不需要。假如productFlavors如下,除錯模組名字為module-test

productFlavors {
    ceshi{
    }
    publish{
    }
}

那麼在dependencies裡面就可以這麼依賴test模組:

 ceshiCompile project(':module-test')

同樣buildTypes也是適用的,兩者可以一起或單獨使用:

 debugCompile project(':module-test')

 ceshidebugCompile project(':module-test')

程式碼中讀取變數

上面的這些功能都是gradle單獨配置的,但我們往往針對不同的構建包有不同的需要在程式碼中體現的需求:日誌列印,Toast等等。
雖然BuildConfig.DEBUG欄位就可以判斷,但我們可以用buildConfigField向程式碼中傳遞自定義的值,比如不同構建包需要不同Host開頭的api地址,不同的https證書路徑等,用法為:

buildConfigField 'type', 'name', '"vaule"'

比如:

 defaultConfig {
   buildConfigField 'String', 'author', '"renny"'
}
QQ截圖20170824164629.pngQQ截圖20170824164629.png

上面的是加在defaultConfig 中的,而加在buildTypes或productFlavors中就會在不同構建版本出現不同的值。如果再配置上不同的applicationId,那麼就可以在同一個手機上同時安裝不同構建版本的應用。

productFlavors {
    ceshi{
        applicationId "com.renny.test"
       buildConfigField "String", "API_TEST", "http://test.renny.com/android"
   }
    publish{
        applicationId "com.example.publish"
      buildConfigField "String", "API_PUBLISH", "http://publish.renny.com/android"
   }
}

經過上面的介紹,你可能會發現buildTypes和productFlavors定義很相似,不過他們的差別在於改變 buildType 不會改變應用程式的程式碼,它們只是處理的東西不同,你可以通過 buildType 來獲取更多的技術細節(例如:build optimization,log level 等等),但是app的內容不會改變,相反的,使用productFlavor 配置可以改變app的內容(ps:內容可以設想成 package 理解,buildType 沒法改 applicationId)。

Gradle task

Gradle task適合用來完成一些既繁瑣又容易出錯的重複性手工作,比如批量修改,複製,重新命名檔案。
比如applicationVariants.all這個task可以針對每個構建版本設定各種屬性,比如修改每個構建版本生成的apk名字:

   applicationVariants.all { variant ->
        variant.outputs.each { output ->
            output.outputFile = new File(
                    output.outputFile.parent,
                    ("app-${variant.buildType.name}"+"-" + new Date().format('yyyyMMdd') + ".apk").toLowerCase())
        }
    }
QQ截圖20170825120317.pngQQ截圖20170825120317.png

gradle會預設匹配生成每種productFlavors*buildTypes的構建版本,如果你想跳過其中的幾種就可以這麼做:

variantFilter { variant ->
    if (variant.buildType.name.equals('release')) {
        variant.setIgnore(!variant.getFlavors().get(1).name.equals('ceshi'));
    }
    if (variant.buildType.name.equals('debug')) {
        variant.setIgnore(variant.getFlavors().get(1).name.equals('ceshi'));
    }
}


相關推薦

build.gradle配置檔案用法

    溫故而知新可以為師矣。build檔案的各種配置肯定一查一大把,這個是為了方便自己使用查詢寫的。 1、配置libs".jar"檔案: dependencies { ... compile fileTree(include: ['*.jar'], di

Aandroid Srudio 構建檔案build.gradle配置

Project目錄下app下的build.gradle檔案apply plugin: 'com.android.application' android { compileSdkVersion 24 buildToulsVersion "25.0.2"

Android之build.gradle配置簽名

1 問題 android簽名除了我們用android studio build->generate Signed Apks ... 我們還可以自己用build.gradle構建,容易忘記還是記錄下來       2 配置如下 1

flutter 除錯模式下簽名 build.gradle配置

很簡單,直接在android/app/build.gradle 中新增debug 引數即可,預設沒有。 除錯的時候生成app-debug.apk Initializing gradle... Resolving dependencies... Gradle task 'assembleDebug'...

flutter 除錯模式下簽名 build.gradle配置

很簡單,直接在android/app/build.gradle 中新增debug 引數即可,預設沒有。 除錯的時候生成app-debug.apk Initializing gradle... Resolving dependencies... Gradle task 'assembleDeb

Android Project和app中兩個build.gradle配置的區別

一般建立一個android專案後回出現兩個gradle:一個build.gradle(app),一個build.gradle(Project),顧名思義就是一個是用來配置整個工程的的一個是用來配置app的。   一、gradle中dependencies 的區別:下面英文就是對compile和c

build.gradle配置

buildscript { ext { buildToolsVersion = “27.0.3” minSdkVersion = 16 compileSdkVersion = 27 targetSdkVersion = 26 supportLibVersion

Gradle配置檔案解析

使用Gradle建立好專案之後,專案的根目錄下會有一個build.gradle檔案,該檔案就是Gradle的核心配置檔案 plugins { id 'java' } group 'com.lwj.service' version '1.0-SNAPSHOT' /*jdk版本*/ sou

安卓開發經驗——Android Studio的project中兩個build.gradle配置的區別

一般建立一個android專案後回出現兩個gradle: build.gradle(Project):用來配置整個工程的 build.gradle(app):一個是用來配置app的 對compile和classpath區別的解釋: I’m g

AndroidStudio工具使用、build.gradle配置介紹(二)

1:Project Structure 專案配置介紹 上面的配置都會在專案的build.gradle檔案中顯示出來 Sdk Location中可以配置AS的SDK,NDK,JDK 2:build.gradle構建檔案介紹 構建檔

使用groovy理解gradle配置檔案

groovy語言特點: 1、動態弱型別,不需要明確指定型別,也就是說變數可以以多種方式使用,變數和方法的定義使用的都是def關鍵字。 2、groovy是動態型別語言,也就是說具體的型別取決於物件本身,而不是宣告的引用變數,這樣做的好處groovy不要求宣告變

Android studio build.gradle配置,debug下使用正式簽名,重新命名apk

在build.gradle檔案中,android節點下進行配置。 android { compileSdkVersion 22 buildToolsVersion '22.0.1' signingConfigs { release

build.gradle配置變數,在Activity中使用

build.gradle程式碼片段 完整版 apply plugin: 'com.android.application' apply from: rootProject.file('gradle/signing.gradle') apply plugin: 'andro

history、less和.bash_profile配置檔案用法一點

(1)history顯示歷史命令。 定義帶時間戳的歷史命令: $ export HISTTIMEFORMAT="%c " 顯示歷史命令: $ history | less PS: 刪除 ~/.bash_history 才可以把時間戳寫信歷史命令配置檔案中。這個檔案會被重新生成。 (2)less與cat命令類似

Android通過build.gradle配置應用版本等資訊

android { compileSdkVersion Integer.parseInt(System.properties['compileSdkVersion']) buildTo

gradle 配置檔案

apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion "23.0.2

Ant 中的build.xml配置檔案生成報告、發郵件完整版

<?xml version="1.0" encoding="UTF-8"?> <project name="ant-jmeter-test" default="run" basedir="."> <tstamp> <

build.gradle配置說明

module/build.gradle apply plugin: 'com.android.application' //說明module的型別,com.android.application為程式,com.android.library為庫 andro

Android開發者必看:build.gradle 配置指南

二、通用配置 在我們新建專案時,Android Studio 會自動為我們生成兩個build.gradle檔案,一個位於根目錄,一個位於app資料夾下,下面是gradle檔案的構成圖: MyApp ├── build.gradle └── app └── build.gradle 三、

Android Studio 通過配置build.gradle打包簽名檔案

一在工程下放入簽名檔案 二在gradle裡配置在Android節點下 //簽名設定 signingConfigs { release { sto