1. Gradle File
- 顶层的build.gradle:顶层的build.gradle文件的配置最终会被应用到所有项目中。
- applicationId的选项:在我们曾经定义的AndroidManifest.xml中,那里定义的包名有两个用途:一个是作为程序的唯一识别ID,防止在同一手机装两个一样的程序;另一个就是作为我们R资源类的包名。在以前我们修改这个ID会导致所有用引用R资源类的地方都要修改。但是现在我们如果修改applicationId只会修改当前程序的ID,而不会去修改源码中资源文件的引用。
2. BuidConfilg
配置的数据最终会生成到BuildConfig类中
buildTypes {
debug {
buildConfigField('String','Author','\"mochixuan\"')
}
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
3. Repositories
如果仓库有密码,也可以同时传入用户名和密码
maven {
url "https://company.com/maven2"
credentials {
username 'user'
password '***'
}
}
4. Dependencies
- 每个库名称包含三个元素:组名:库名称:版本号
- 如果我们要保证我们依赖的库始终处于最新状态,我们可以通过添加通配符的方式
implementation 'com.android.support.constraint:constraint-layout:1.0.+'
implementation 'com.android.support.constraint:constraint-layout:+'
- 通过files()方法可以添加文件依赖,如果有很多jar文件,我们也可以通过fileTree()方法添加一个文件夹,除此之外,我们还可以通过通配符的方式添加
implementation fileTree(dir: 'libs', include: ['*.jar'])
5.配置.so库
android {
sourceSets {
main() {
jniLibs.srcDirs 'libs'
jni.srcDirs = []
}
}
//网上还有一种方法
sourceSets.main {
jniLibs.srcDir 'src/main/libs'
}
productFlavors{
arm{
ndk{
abiFilters "armeabi"
}
}
}
}
6.Product flavors
Product flavors和Build Type是不一样的,而且他们的属性也不一样。所有的 product flavor 版本和defaultConfig 共享所有属性。
7.签名
android {
signingConfigs {
release {
storeFile file('../xxx/store.jks')
storePassword 'xxxx'
keyAlias 'xxxx'
keyPassword 'xxxxx'
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}
8. buildTypes
1 .minifyEnabled 会对代码进行混淆和压缩,shrinkResources 会对比R文件对无用资源进行删除
2.minifyEnabled 设置为true时shrinkResources 的设置才会生效
buildTypes {
release {
debuggable true
minifyEnabled true //启用Proguard
shrinkResources true //是否清理无用资源,依赖于minifyEnabled
zipAlignEnabled true //是否启用zipAlign压缩
signingConfig signingConfigs.release
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
debug {
debuggable true
minifyEnabled false //不启用Proguard
shrinkResources false //是否清理无用资源,依赖于minifyEnabled
zipAlignEnabled false //是否启用zipAlign压缩
signingConfig signingConfigs.debug
}
}
9. 定义变量和方法
def name = 'Andy'
def greeting = "Hello, $name!"
def square(def num) {
num * num
}
square 4
10. 打包是改包名和多渠道打包
gradle2.2.3之前
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
//这里修改apk文件名
def fileName = APP_NAME +"_"+defaultConfig.versionName + ".apk"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
gradle2.2.3之后
android.applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = "${APP_NAME}_${defaultConfig.versionName}.apk"
}
}
--------多渠道----------
android {
def APP_NAME = "GradleStyle"
defaultConfig {
flavorDimensions "1.0" //解决维度问题
manifestPlaceholders = [CHANNEL_NAME: 'mochixuan'] //默认渠道
}
buildTypes {
debug {
buildConfigField('String', 'Author', '\"mochixuan\"')
}
release {
android.applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = "${APP_NAME}_${variant.productFlavors[0].name}_${defaultConfig.versionName}.apk"
}
}
}
}
productFlavors {
xiaomi {}
huawei {}
/*yijia {}
vivo {}
oppo {}
wandouji {}
qh360 {}
yingyongbao {}*/
}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [CHANNEL_NAME: name]
}
}
引用
<meta-data android:name="CHANNEL_NAME"
android:value="${CHANNEL_NAME}"/>
11. SourceSets
android {
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
jniLibs.srcDirs = ['libs']
}
}
12. 打包不同文件,不同res文件,不同图片,改包名
sourceSets {
main {
jniLibs.srcDirs 'libs'
}
xiaomi {
res.srcDirs 'src/main/res-xiaomi'
java.srcDirs 'src/main/java-xiaomi'
}
huawei {
res.srcDirs 'src/main/res-huawei'
java.srcDirs 'src/main/java-huawei'
}
}
//改包名
productFlavors {
xiaomi {
applicationId "com.ppdl.gradlestudy.xiaomi"
buildConfigField "String", "ENVIRONMENT", '"dev"'
}
huawei {
applicationId "com.ppdl.gradlestudy.huawei"
buildConfigField "String", "ENVIRONMENT", '"dev"'
}
}