什麼是Gradlejava
Gradle 是一個構建工具,他能夠幫咱們編譯 構建 打包項目 能夠配置本身的task任務,能夠很方便的去引用第三方的類庫android
apply from: "config.gradle" //這裏能夠引用本身定義的後綴爲.gradle的文件 ,能夠將全部的配置信息提取到自定義gradle
buildscript {
//遠程maven Google jcenter jitpack 鏈接所需引用的服務器
repositories {
google()
jcenter()
}
dependencies {
//gradle 插件引用 內有關於項目編譯構建....的任務
classpath 'com.android.tools.build:gradle:3.4.1'
}
}
//配置全部modle的引用服務器
allprojects {
repositories {
google()
jcenter()
maven { url "https://jitpack.io" }
}
}
//清除任務
task clean(type: Delete) {
delete rootProject.buildDir
}
複製代碼
//標明此module可運行,,其餘會有libary....
apply plugin: 'com.android.application'
android {
compileSdkVersion rootProject.ext.android.compileSdkVersion//編譯版本
buildToolsVersion rootProject.ext.android.buildToolsVersion //編譯時使用的構建工具的版本
defaultConfig {
//項目包名
applicationId rootProject.ext.android.applicationId
//最小可運行的sdk B版本
minSdkVersion rootProject.ext.android.minSdkVersion
//目標版本
targetSdkVersion rootProject.ext.android.targetSdkVersion
//版本號
versionCode rootProject.ext.android.versionCode
//版本名
versionName rootProject.ext.android.versionName
//開啓分包
multiDexEnabled true
//junit單元測試
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
//中文資源
resConfigs 'en'
//ndk 配置
ndk {
// 設置支持的SO庫架構
abiFilters 'armeabi', 'x86', 'armeabi-v7a'//,'x86_64', 'arm64-v8a'
}
//只使用xhdpi 下的資源文件
resConfigs "xhdpi"
//分包,指定某個類在main dex
multiDexEnabled true
multiDexKeepProguard file('multiDexKeep.pro') // 打包到main dex的這些類的混淆規制,沒特殊需求就給個空文件
multiDexKeepFile file('maindexlist.txt') // 指定哪些類要放到main dex
}
//開啓databind支持
dataBinding {
enabled = true
}
//簽名信息
signingConfigs {
production {
//簽名文件路徑
storeFile rootProject.ext.signing.storeFile
//密碼
storePassword rootProject.ext.signing.storePassword
//別名
keyAlias rootProject.ext.signing.keyAlias
//別名密碼
keyPassword rootProject.ext.signing.keyPassword
}
}
//構建類型
buildTypes {
//debug模式
debug {
//能夠版本名稱後面追加相關信息
versionNameSuffix "-debug"
//包名添加後綴 能夠控制不一樣構建類型不一樣的包名
applicationIdSuffix ".debug"
//自定義資源信息至關於value 下的String.xml裏的內容 debug環境下 定義響應的項目名稱
resValue "string", "app_name", rootProject.ext.android.debugAppName
//manifest 參數配置項目圖標 debug環境下的桌面圖標顯示 在 manifest 清單文件中引用
manifestPlaceholders = [app_icon: rootProject.ext.android.debugAppIcon]
//配置簽名信息
signingConfig signingConfigs.production
//是否開啓混淆
minifyEnabled false
//對齊優打包的apk
zipAlignEnabled false
//去除無用資源
shrinkResources false
//混淆文件路徑
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
//開啓這個能夠debug調試
debuggable true
//自定義參數 在 Buildconfig使用 這裏不一樣的環境定義不一樣的url
buildConfigField("String", "API_URL", rootProject.ext.apiUrl.debugUrl)
}
//預上線
preRelease {
resValue "string", "app_name", rootProject.ext.android.preReleaseAppName
manifestPlaceholders = [app_icon: rootProject.ext.android.preReleaseAppIcon]
zipAlignEnabled true
shrinkResources true
versionNameSuffix "-preRelease"
applicationIdSuffix ".preRelease"
signingConfig signingConfigs.production
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
buildConfigField("String", "API_URL", rootProject.ext.apiUrl.preRelease)
}
//線上正式
release {
resValue "string", "app_name", rootProject.ext.android.releaseAppName
manifestPlaceholders = [app_icon: rootProject.ext.android.releaseAppIcon]
zipAlignEnabled true
shrinkResources true
signingConfig signingConfigs.production
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
buildConfigField("String", "API_URL", rootProject.ext.apiUrl.release)
}
//修改apk包名
applicationVariants.all { variant ->
variant.outputs.all { output ->
outputFileName = "app-${variant.name}-${defaultConfig.versionName}-${defaultConfig.versionCode}.apk"
}
}
}
//jdk 配置
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
//lib包配置
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
// 多渠道/多環境 的不一樣配置
flavorDimensions("default")
productFlavors {
qudao1 {
dimension "default"
//自定義項目名稱
resValue "string", "app_name", "渠道1"
//自定義參數 在BUildConfig 裏調用
buildConfigField("String", "orgId", '""')
}
qudao2 {
dimension "default"
resValue "string", "app_name", "渠道2"
buildConfigField("String", "orgId", rootProject.ext.channel.csOrgId)
}
}
//執行lint檢查,有任何的錯誤或者警告提示,都會終止構建,咱們能夠將其關掉。
lintOptions {
abortOnError false
checkReleaseBuilds false
}
//文件重複
packagingOptions {
exclude 'lib/arm64-v8a/ffmpeg.so'
}
//混淆對應文件輸出
applicationVariants.all { variant ->
variant.outputs.each { output ->
if (variant.getBuildType().isMinifyEnabled()) {
variant.assemble.doLast{
copy {
from variant.mappingFile
into "${projectDir}/mappings"
rename { String fileName ->
"mapping-${variant.name}.txt"
}
}
}
}
}
}
}
configurations {
//編譯期排除commons模塊
compile.exclude module: 'commons'
//在整個構建過程當中排除com.squareup.retrofit2:adapter-rxjava
all*.exclude group: 'com.squareup.retrofit2', module: 'adapter-rxjava'
}
//全局強制使用
configurations.all {
resolutionStrategy {
force 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
}
}
dependencies {
//lib jar 引用
implementation fileTree(dir: 'libs', include: ['*.jar'])
//動態版本號
implementation 'com.android.support.constraint:constraint-layout:+'
implementation project(path: ':utilslib')
//重複引用問題
compile (‘com.squareup.retrofit2:adapter-rxjava:2.1.0’){
// 衝突時優先使用該版本
force = true
// 依據構建名稱排除
exclude module: 'rxjava'
// 依據組織名稱排除
exclude group: 'com.squareup.retrofit'
// 依據組織名稱+構件名稱排除
exclude group: 'com.squareup.retrofit', module: 'rxjava'
// 爲本依賴關閉依賴傳遞特性
transitive = false
}
}
複製代碼
須要在根項目引用 apply from: "config.gradle"
api
ext {
apiUrl = [
releaseUrl : '"http://www.baidu.com/"',
preReleaseUrl: '"http://www.baidu.com/"',
debugUrl : '"http://www.baidu.com/"',
]
appKey = [
buglyAppId: '"4a8eea659f"'
]
signing = [
storeFile : file("./app/jks/key.jks"),
storePassword: "123456",
keyAlias : "news",
keyPassword : "123456"
]
android = [
applicationId : "com.ll.ll",
compileSdkVersion: 28,
minSdkVersion : 19,
targetSdkVersion : 28,
debugAppName : "應用預覽版",
releaseAppName : "應用正式版",
preReleaseAppName: "預上線版本",
debugAppIcon : "@mipmap/ic_launcher_round",
releaseAppIcon : "@mipmap/ic_launcher",
preReleaseAppIcon: "@mipmap/ic_launcher",
versionCode : 1,
versionName : "1.0.0"
]
libsVersion = [
supportLibraryVersion = "28.0.0",
]
dependencies = [
//support
appcompat_v7: "com.android.support:appcompat-v7:$rootProject.supportLibraryVersion",
design : "com.android.support:design:$rootProject.supportLibraryVersion",
// recyclerview_v7: "com.android.support:recyclerview-v7:$rootProject.supportLibraryVersion",
// cardview_v7 : "com.android.support:cardview-v7:$rootProject.supportLibraryVersion",
]
}
複製代碼