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 MultiDexApplicationc)在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。
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:icon
,android: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.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.pnggradle會預設匹配生成每種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