AGP的使用主要是在模块build.gradle 中android节点的配置,由于android节点的配置无法查看源码,所以就只能熟能生巧了,死记硬背(●'◡'●)。
下面我们来看下android节点配置的使用
1.Android节点的引入
apply plugin: 'com.android.application'
//或者
plugins{
id 'com.android.application'
}
2.Android节点配置(代码+注释)
//AGP
//com.android.application 提供
android {
compileSdkVersion 30 //编译时使用SDK的版本
//Android Studio 4.2 版本后系统默认配置,用户不需要配置
//buildTools主要是以下工具:aapt packgageTool abd dx
buildToolsVersion "30.0.3"
//默认配置
defaultConfig {
applicationId "com.example.myapplication1" //应用的ID
applicationIdSuffix "fres" //追加后缀
minSdkVersion 23 //最小支持Android系统版本
targetSdkVersion 30 //针对开发使用的Android SDK版本,一般compileSdkVersion保持一致
versionCode 1 //应用的版本号
versionName "1.0" //应用的版本名称
buildConfigField 'String', 'YZAPP_NAME', '"远智教育"' //往BuildConfig中写入一个String字符串
//多dex打包,主要是为了防止65535限制
//一个dex文件只能有65535方法,因为dex文件会把所有类的方法 id 用一个short存储,short对应65535
multiDexEnabled true
//ndk配置 市面上主要有armeabi-v7a arm64-v8a架构
//一般项目只要生成armeabi-v7a架构。
//现在应用商店也有提供两种框架的上传,可以根据需求打对应的框架包
ndk {
abiFilters 'armeabi-v7a'//,"x86" // 'armeabi', ,'arm64-v8a'//, "x86"//,'arm64-v8a'
}
//测试引擎
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
//下面的功能主要是可以在AndroidManifest 获取到build.gradle生成的字段
//例如可以在AndroidManifest的`android:label="${app_name}"` 这样使用,就可以获取到对应的字段测试
//或者一些常见的渠道化配置,APPKEY配置
//<meta-data android:name="JPUSH_APPKEY" android:value="${JPUSH_APPKEY}" />
manifestPlaceholders = [
app_name: "测试",
JPUSH_APPKEY : 'f4451546546445545'
]
}
flavorDimensions "channel", "charge" //维度,就是针对一种类型的产品风味的描述
//排列组合
productFlavors {
huawei {
dimension "channel"
//插入自定义的资源节点,类似于strings.xml 不能有重复的资源节点
resValue 'string', 'app_name1', "自定义appname"
resValue 'string', 'aaa', "aaa"
}
oppo {
dimension "channel"
}
free {
dimension "charge"
}
paid {
dimension "charge"
}
aaa {
dimension "charge"
}
}
//每个BuildType都有一个SourceSet
//包含源码,源文件等信息
sourceSets {
//主要用来导入libs的库
main{
jniLibs.srcDirs=['libs']
}
//主要使用在组件化项目中方便调试
java{
// exclude 'src/main/'
//组件管理
if (rootProject.ext.android.is_application) {
manifest.srcFile "src/main/debug/AndroidManifest.xml"
//当模块是应用的时候,加载module下的文件
java.srcDir "src/main/debug"
} else {
manifest.srcFile "src/main/AndroidManifest.xml"
resources {
//正式版本时,排除debug文件夹下所有调试文件
exclude "src/main/debug/*"
}
}
}
}
//adb操作选项
adbOptions{
adb instll -s
}
//一般有两种 release debug,也可以自定义
buildTypes {
release {
zipAlignEnabled true //是否开启ZipAlign
shrinkResources true //清理无效资源
minifyEnabled false //是否启动代码混淆
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
debug {
}
custom {
//继承上面release的配置
initWith release
applicationIdSuffix ".releaseCutsom"
}
}
//签名信息配置
signingConfigs {
release {
keyAlias "xxxx"
keyPassword "xxxx"
storePassword "xxxx"
storeFile file("../xxxx")
v2SigningEnabled true
v1SigningEnabled true
}
debug {
keyAlias "xxxx"
keyPassword "xxxx"
storePassword "xxxx"
storeFile file("../xxxx")
v2SigningEnabled true
v1SigningEnabled true
}
}
//高版本Android Studio默认java1.8
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
//指定jvm版本
kotlinOptions {
jvmTarget = '1.8'
}
}
1.Android Gradle - Gradle 生命周期_wumeixinjiazu的博客-CSDN博客
2.Android Gradle - Gradle 和 AGP区别_wumeixinjiazu的博客-CSDN博客