本节主要内容讲解Gradle语法和常用的基础配置。
在项目工程创建一个配置文件config.gradle:
ext {
username = "Android"
isModule = false
androidId = [
compileSdkVersion: 29,
buildToolsVersion: "29.0.2",
minSdkVersion : 22,
targetSdkVersion : 29,
versionCode : 1,
versionName : "1.0"
]
appId = [
app : "com.source.gradledemo",
lib_gradle: "com.source.gradledemo.lib_gradle"
]
url = [
"debug" : "http://www.baidu.com",
"release": "http://www.jd.com",
]
dependencies = [
appcompat : "androidx.appcompat:appcompat:1.1.0",
constraintlayout: "androidx.constraintlayout:constraintlayout:1.1.3"
]
}
然后在模块gradle中依赖:
apply from:"config.gradle"
最后使用,如在app的build.gradle中的完整配置:
apply plugin: 'com.android.application'
println("hello gradle")
//println "${username}"
//println "${rootProject.ext.username}"
def androidId = rootProject.ext.androidId
def appId = rootProject.ext.appId
def support = rootProject.ext.dependencies
android {
compileSdkVersion androidId.compileSdkVersion
buildToolsVersion androidId.buildToolsVersion
defaultConfig {
applicationId appId.applicationId
minSdkVersion androidId.minSdkVersion
targetSdkVersion androidId.targetSdkVersion
versionCode androidId.versionCode
versionName androidId.versionName
// 开启分包
multiDexEnabled true
// 设置分包配置
// multiDexKeepFile file('multidex-config.txt')
// 将svg图片生成 指定维度的png图片
// vectorDrawables.generatedDensities('xhdpi','xxhdpi')
// 使用support-v7兼容(5.0版本以上)
vectorDrawables.useSupportLibrary = true
// 只保留指定和默认资源
resConfigs('zh-rCN')
// 配置so库CPU架构(真机:arm,模拟器:x86)
// x86 x86_64 mips mips64
ndk {
//abiFilters('armeabi', 'armeabi-v7a')
// 为了模拟器启动
abiFilters('x86', 'x86_64')
}
// 源集 - 设置源集的属性,更改源集的 Java 目录或者自由目录等
sourceSets {
main {
if (!isModule) {
// 如果是组件化模式,需要单独运行时
manifest.srcFile 'src/main/AndroidManifest.xml'
java.srcDirs = ['src/main/java']
res.srcDirs = ['src/main/res']
resources.srcDirs = ['src/main/resources']
aidl.srcDirs = ['src/main/aidl']
assets.srcDirs = ['src/main/assets']
} else {
// 集成化模式,整个项目打包
manifest.srcFile 'src/main/AndroidManifest.xml'
}
}
}
}
// 签名配置(隐形坑:必须写在buildTypes之前)
signingConfigs {
debug {
// 天坑:填错了,编译不通过还找不到问题
storeFile file('C:/Android/.android/debug.keystore')
storePassword "android"
keyAlias "androiddebugkey"
keyPassword "android"
}
release {
// 签名证书文件
storeFile file('C:/Users/Ivy/Desktop/gradledemo.jks')
// 签名证书的类型
//storeType "netease"
// 签名证书文件的密码
storePassword "123456"
// 签名证书中密钥别名
keyAlias "gradledemo"
// 签名证书中该密钥的密码
keyPassword "123456"
// 是否开启V2打包
v2SigningEnabled true
}
}
buildTypes {
debug {
// 对构建类型设置签名信息
signingConfig signingConfigs.debug
buildConfigField("String", "BASE_URL", "\"${url.debug}\"")
}
release {
// 对构建类型设置签名信息
signingConfig signingConfigs.release
buildConfigField("String", "BASE_URL", "\"${url.release}\"")
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
//打包命令:
//gradlew assembleDebug 在build\Output中生成debug签名的apk
//gradlew assembleRelease 在build\Output中生成Release签名的apk
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
//implementation 'androidx.appcompat:appcompat:1.1.0'
//implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation support.appcompat
implementation support.constraintlayout
//最简单的写法
//support.each { k, v -> implementation v }
implementation project(path: ':lib_gradle')
}
这个配置有几点的说明:
1. 签名配置(隐形坑:必须写在buildTypes之前)
2. 可以在gradle里面写BASE_URL变量用来标志使用加载的URL如:
3.依赖的几种写法
//最简单的写法
//support.each { k, v -> implementation v }
4. 打包命令
gradlew assembleDebug 在build\Output中生成debug签名的apk
gradlew assembleRelease 在build\Output中生成Release签名的apk
其他lib包的gradle配置也差不多这样:
apply plugin: 'com.android.library'
def androidId = rootProject.ext.androidId
def appId = rootProject.ext.appId
def support = rootProject.ext.dependencies
android {
compileSdkVersion androidId.compileSdkVersion
buildToolsVersion androidId.buildToolsVersion
defaultConfig {
minSdkVersion androidId.minSdkVersion
targetSdkVersion androidId.targetSdkVersion
versionCode androidId.versionCode
versionName androidId.versionName
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation support.appcompat
implementation support.constraintlayout
}
END.