Android Gradle 使用指南(收藏向)
程序员文章站
2022-04-29 15:11:41
...
前言
目前 Android 的开发大都使用 Android Studio 了,而 Android Studio 所使用的 Gradle 也是大有文章,其中有许多可以定制和使用的技巧。
Gradle 的语法是使用的 Groovy 语言,这里不做详细介绍了。
下面是我总结的一些常用的选项以及释义:
apply plugin: 'com.android.application'
android {
compileSdkVersion 27 // 编译代码使用的Android版本
buildToolsVersion '27.0.3' // 使用的编译工具的版本
// 指定使用的库,例如org.apache.http.legacy是一个HttpClient的库,在23以上的系统使用HttpClient就可以加上这个
useLibrary 'org.apache.http.legacy'
// 1.定义所有公共的默认配置,其本质是一个ProductFlavor
defaultConfig {
applicationId "com.afei.myapplication" // 指定APP包名,默认为null,此时会从AndroidManifest.xml文件中读取
minSdkVersion 23 // APP最低支持的Android版本
targetSdkVersion 27 // APP的目标Android版本,通常填写目前最新的Android版本
versionCode 1 // APP版本号,没有配置时会从AndroidManifest.xml文件中读取
versionName "1.0" // APP版本名称,没有配置时会从AndroidManifest.xml文件中读取
resConfigs "zh", "xxhdpi" // 配置那些类型的资源被打包到apk中
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" // 配置单元测试使用的Runner
// manifest占位符,可动态配置AndroidManifest.xml文件,通过${CHANNEL}取得该值
manifestPlaceholders.put("CHANNEL", "google")
// 自定义BuildConfig,在代码中通过BuildConfig.URL获取该值
buildConfigField 'String', 'URL', '"http://www.google.com"'
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a' // 配置生成的so文件包含的平台架构
}
externalNativeBuild {
cmake {
cppFlags "-frtti -fexceptions" // 通常不在这里配置 cppFlags 了
// 使用下面这种语法向变量传递参数:
// arguments "-D变量名=参数".
arguments "-DANDROID_ARM_NEON=TRUE",
// 使用下面这种语法向变量传递多个参数(参数之间使用空格隔开):
// arguments "-D变量名=参数1 参数2"
"-DANDROID_CPP_FEATURES=rtti exceptions"
}
}
}
// 2.APP签名配置
signingConfigs {
// release包的签名配置
release {
storeFile file("releasekey.jks") // 传入JKS文件路径
storePassword "password" // 公钥
keyAlias "afei" // 私钥名
keyPassword "123456" // 私钥密码
}
// debug包的签名配置
debug {
// 同上。可以不配置,默认使用的是 $HOME/.android/debug.jks
}
}
// 3.构建类型,内置有debug和release两种
buildTypes {
// release包的构建配置
release {
signingConfig signingConfigs.release // 指定使用上述signingConfigs中的release包的签名配置
minifyEnabled true // 是否混淆,release一般开启
proguardFile 'proguard-rules.pro' // 指定单个混淆文件
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' // 指定多个混淆文件
multiDexEnabled false // 是否拆分为多个dex,当方法数超过65535时需要开启
zipAlignEnabled true // 是否整理优化apk,能提高运行效率,更快的读写apk的资源,默认开启
shrinkResources true // 是否自动清理未使用的资源文件,默认为false
}
// debug包的签名配置
debug {
signingConfig signingConfigs.debug // 指定使用上述signingConfigs中的debug包的签名配置
applicationIdSuffix ".debug" // 配置包名的后缀,例如包名会变成com.afei.myapplication.debug,一般不使用
debuggable true // 配置是否生成一个可供调试的apk
minifyEnabled false // 是否混淆,debug一般关闭
}
jnidebug {
initWith debug // 复制debug的配置
applicationIdSuffix ".jnidebug"
jniDebuggable true // 配置是否生成一个可供调试JNI代码的apk
}
}
// 4. 配置生成的apk文件名,all表示所有的
applicationVariants.all { variant ->
variant.outputs.all {
// 注意这里buildTime()方法是我们下面自定义的一个获取时间的方法,例如MyApplication_v1.0_20190225_debug.apk
outputFileName = "MyApplication_v${defaultConfig.versionName}_${buildTime()}_${variant.buildType.name}.apk"
}
}
// 6. Java编译选项,例如要使用Java1.8的新特性(例如lambda表达式)需要加上如下声明
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
// 7. adb配置
adbOptions {
timeOutInMs = 5*1000 // 设置超时时间
installOptions '-r','-t','-g' // 设置adb install的安装选项
// -l 锁定该应用
// -r 替换已存在的应用
// -t 允许测试包
// -s 把应用安装在SD卡上
// -d 允许降级安装
// -g 给应用授予所有运行时的权限
}
// 8. dex配置
dexOptions {
javaMaxHeapSize '2g' // 执行dx命令为其分配的最大堆内存,用于解决执行dx时内存不够的情况
jumboMode true // 默认为false,当方法超过65535时,需要开启jumboMode才可以构建成功
threadCount 2 // 配置gradle运行dx命令使用的线程数量
}
// 9. lint配置
lintOptions {
abortOnError false // lint发现错误时是否停止构建,默认true
absolutePaths true // 配置错误的输出里是否显示绝对路径,默认true
check 'NewApi', 'Override' // 配置哪些项目需要lint检查,可通过lint --list查看有哪些选项
checkAllWarnings false // 是否检查所有警告的issue,包括默认关闭的issue,默认false
checkReleaseBuilds true // 配置在release构建中lint是否检查致命的错误,默认true
ignoreWarnings true // 是否忽略警告级别的检查,默认false
noLines true // error输出是否包含源代码的行号
quiet false // 是否开启安静模式,安静模型下分析进度和信息将不会显示
showAll true // 是否显示所有输出,并且不会对过长的消息进行截断
warningsAsErrors false // 是否把警告当作错误处理
}
// 10. Native构建配置
externalNativeBuild {
// cmake构建配置
cmake {
path "CMakeLists.txt" // CMakeLists.txt文件路径
}
}
// 11. 源代码集合
sourceSets {
main {
java.srcDirs = ['src/main/java', 'src/main/aidl']
}
}
}
// 自定义获取指定格式时间字符串的方法
def buildTime() {
def date = new Date()
def formattedDate = date.format("yyyMMdd")
return formattedDate
}
// 依赖
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:27.1.1'
}
最后,官方介绍文档为:https://developer.android.com/studio/build
其中也有许多我没介绍到的地方值得参考。
下一篇: vue如何将v-for中的表格导出来