android. gradle教,Android Gradle 使用指南(收藏向)

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'

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值