Android Studio 是谷歌推出一个Android集成开发工具,基于IntelliJ IDEA
- 基于Gradle的构建支持
- 支持ProGuard 和应用签名
Gradle 是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。
1、Gradle版本和Gradle插件的关系
在Gradle爆红之前,常用的构建工具是ANT,然后又进化到Maven。ANT和Maven这两个工具其实也还算方便,现在还有很多地方在使用。但是二者都有一些缺点,所以让更懒得人觉得不是那么方便。比如,Maven编译规则是用XML来编写的。XML虽然通俗易懂,但是很难在xml中描述if{某条件成立,编译某文件}/else{编译其他文件}这样有不同条件的任务。
Gradle选择了Groovy。Groovy基于Java并拓展了Java。Java程序员可以无缝切换到使用Groovy开发程序。Groovy说白了就是把写Java程序变得像写脚本一样简单。写完就可以执行,Groovy内部会将其编译成Java class然后启动虚拟机来执行。当然,这些底层的渣活不需要你管。 除了可以用很灵活的语言来写构建规则外,Gradle另外一个特点就是它是一种DSL,即Domain Specific Language,领域相关语言。
Gradle详解
低版本的插件不支持高版本的gradle
- Gradle版本配置在gradle-wrapper.properties里:
//gradle版本号
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
复制代码
-
gradle插件版本配置在project的build.gradle里
buildscript中的repositories 和 allprojects的repositories的区别
//buildscript中的repositories:是gradle脚本执行所需依赖,分别是对应的maven库和插件
buildscript {
repositories {
jcenter()
maven {
url 'https://maven.google.com/'
name 'Google'
}
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.0' //gradle插件版本
}
}
//allprojects的repositories:项目本身需要的依赖。
allprojects {
repositories {
jcenter()
mavenCentral()
maven { url "https://jitpack.io" }
}
}
复制代码
2、api、implementation、compile关系
gradle插件3.0 支持 api、implementation,废弃了compile
api: 和compile使用一致;
implementation: implementation编译的依赖只作用于当前的module。
-
如果APP module依赖了core module,core module中使用implementation编译的三方库,core module可以使用三方库,app module中无法使用该三方库;
-
如果core module 使用implementation依赖了base module,则APP module中也无法使用base module。
升级到gradle插件(gradle-tools)3.0.0:需要gradle版本升级到4.1以上;android studio版本升级到3.0.0以上。
3、buildTypes 构建类型
buildConfigField
构建时配置的参数:buildConfigField "type", "name", "value"
if(BuildConfig.LOG_DEBUG){ //使用
//Debug,打印日志
}else{
//release,关闭日志
}
buildConfigField "String", "SERVER_HOST", "200.200.200.50"
String host = BuildConfig.SERVER_HOST; //取值
复制代码
minifyEnabled 是否进行混淆
buildTypes { //位于module中的,build.gradle中的,android {} ,括号里
debug {
buildConfigField "boolean", "LOG_DEBUG", "true"
minifyEnabled false
zipAlignEnabled false
shrinkResources false
debuggable true
signingConfig signingConfigs.debug
}
release {
// 不显示Log
buildConfigField "boolean", "LOG_DEBUG", "false"
minifyEnabled true //混淆
zipAlignEnabled true //对齐app所有资源,运行时Android与应用程序间的交互更加有效率;
debuggable false
shrinkResources true // 移除无用的resource文件,可以减小apk包的大小
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
复制代码
4、依赖更新
项目依赖的远程包如果有更新,会有提醒或者自动更新吗? 不会的,需要你手动设置changing标记为true,这样gradle会每24小时检查更新,通过更改resolutionStrategy可以修改检查周期。
configurations.all {
// check for updates every build
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
复制代码
5、lintOptions
stackoverflow地址
android {
lintOptions {
// true--关闭lint报告的分析进度
quiet true
// true--错误发生后停止gradle构建
abortOnError false
// true--只报告error
ignoreWarnings true
// true--忽略有错误的文件的全/绝对路径(默认是true)
//absolutePaths true
// true--检查所有问题点,包含其他默认关闭项
checkAllWarnings true
// true--所有warning当做error
warningsAsErrors true
// 关闭指定问题检查
disable 'TypographyFractions','TypographyQuotes'
// 打开指定问题检查
enable 'RtlHardcoded','RtlCompat', 'RtlEnabled'
// 仅检查指定问题
check 'NewApi', 'InlinedApi'
// true--error输出文件不包含源码行号
noLines true
// true--显示错误的所有发生位置,不截取
showAll true
// 回退lint设置(默认规则)
lintConfig file("default-lint.xml")
// true--生成txt格式报告(默认false)
textReport true
// 重定向输出;可以是文件或'stdout'
textOutput 'stdout'
// true--生成XML格式报告
xmlReport false
// 指定xml报告文档(默认lint-results.xml)
xmlOutput file("lint-report.xml")
// true--生成HTML报告(带问题解释,源码位置,等)
htmlReport true
// html报告可选路径(构建器默认是lint-results.html )
htmlOutput file("lint-report.html")
// true--所有正式版构建执行规则生成崩溃的lint检查,如果有崩溃问题将停止构建
checkReleaseBuilds true
// 在发布版本编译时检查(即使不包含lint目标),指定问题的规则生成崩溃
fatal 'NewApi', 'InlineApi'
// 指定问题的规则生成错误
error 'Wakelock', 'TextViewEdits'
// 指定问题的规则生成警告
warning 'ResourceAsColor'
// 忽略指定问题的规则(同关闭检查)
ignore 'TypographyQuotes'
}
}
复制代码