什麼是Gradle
Gradle 是一個構建工具,他可以幫我們編譯 構建 打包專案 可以配置自己的task任務,可以很方便的去引用第三方的類庫
根專案的gradle 整個專案的gradle配置檔案
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
}
複製程式碼
app module的配置
//標明此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
}
}
複製程式碼
自定義gradle
需要在根專案引用 apply from: "config.gradle"
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",
]
}
複製程式碼