一.Gradle配置构建工程所需的文件
1.settings.gradle
文件位于项目根目录,用于指示 Gradle 在构建应用时应将哪些模块(Module)包括在内。对大多数项目而言,该文件很简单,只包括app如下:
include ':app'
但是很多情况下我们要将我们需要的模块分割出去,就需要增加更多的模块(Module)进来,例如我的一个工程如下
include ':app', ':piclibrary', ':videolibrary', ':StackBlur', ':ptr-lib', ':Mp3Audiolibrary'
2.顶级构建文件(工程下的build.gradle)
最基本的结构如下,新建一个project之后自动生成的。顶级 build.gradle 文件位于项目根目录,用于定义适用于项目中所有模块的构建配置。默认情况下,这个顶级构建文件使用 buildscript {} 代码块来定义项目中所有模块共用的 Gradle 存储区和依赖项。
// Top-level build file where you can add configuration options common to all sub-projects/modules.
//buildscript代码块中代码是用来配置Gradle自身使用的
buildscript {
//配置远程仓库google和jcenter
repositories {
google()
jcenter()
}
//依赖
dependencies {
//需要Gradle插件3.1.3版本的
classpath 'com.android.tools.build:gradle:3.1.3'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
//所有的module中共有的,但是为了保证每个项目的独立性,我们一般不会在这里面操作太多共有的东西。
allprojects {
//远程仓库jcenter,google
repositories {
google()
jcenter()
}
}
//在我们操作clean project动作的时候,会清除app下面的build文件夹中的相应的文件
task clean(type: Delete) {
delete rootProject.buildDir
}
3.模块级构建文件
模块级 build.gradle 文件位于每个 // 目录,用于配置适用于其所在模块的构建设置。您可以通过配置这些构建设置来提供自定义打包选项(例如附加构建类型和产品风味),以及替换(覆盖)
main/ 应用清单或顶级 build.gradle 文件中的设置。
下面是一个基本的配置简单的module级别的build.gradle,如下图:
apply plugin: 'com.android.application'
android {
//用于编程的sdk版本
compileSdkVersion 27
//编译打包工具版本
buildToolsVersion '27.0.3'
defaultConfig {
//app的id
applicationId "test.gong.com.myapplication"
//最小兼容版本
minSdkVersion 19
//最理想运行版本
targetSdkVersion 27
//app的版本code
versionCode 1
//app版本name
versionName "1.0"
//3.0.0以上,解决打包渠道报错
flavorDimensions "versionCode"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
//签名配置
signingConfigs {
key {
keyAlias 'chinaradio'
keyPassword 'www.cnr.cn'
storeFile file('ChinaRadioKeyStore.keystore')
storePassword 'www.cnr.cn'
}
}
//打包版本样式
buildTypes {
unsigned {
signingConfig signingConfigs.key
}
debug {
signingConfig signingConfigs.key
// 显示Log(在java代码中使用BuildConfig.LOG_DEBUG,下面的域名参数一样的方式)
buildConfigField "boolean", "LOG_DEBUG", "true"
//测试版本服务器域名
buildConfigField "String", "API_HOST", "com.cnr.debug"
}
release {
signingConfig signingConfigs.key
// 不显示Log
buildConfigField "boolean", "LOG_DEBUG", "false"
//正式版本服务器域名
buildConfigField "String", "API_HOST", "com.cnr.release"
//不混淆
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//自定义输出配置
android.applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = "chinaRadio_v${variant.productFlavors[0].name}_v${variant.versionName}.apk"
}
}
}
}
/*Android Studio打包需要String文件翻译解决办法*/
lintOptions {
checkReleaseBuilds false
abortOnError false
}
//渠道,使用的友盟的统计功能
productFlavors {
Umeng {}
baidu {}
vivo {}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
}
}
//依赖
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
这是一个很简单的配置,复杂配置这里不做描述,因为各种应用场景不同配置不同,遇到问题自行百度即可。
4.工程根目录下的gradle.properties
您可以在其中配置项目范围 Gradle 设置,例如 Gradle 后台进程的最大堆大小
5.工程根目录下的local.properties
为构建系统配置本地环境属性,例如 SDK 安装路径。由于该文件的内容由 Android Studio 自动生成并且专用于本地开发者环境,因此您不应手动修改该文件
,或将其纳入您的版本控制系统。
二.导入外部工程时候注意事项
1.导入外部工程时候查看工程构建的gradle插件和gradle版本分别在“工程根目录的build.gradle”和“工程目录–>gradle–>wrapper–>gradle-wrapper.properties”。gradle插件和gradle版本修改成和本地相同。
2.查看app中build.gradle中compileSdkVersion 和 buildToolsVersion 的版本;compileSdkVersion 基本不能改(下面好多的依赖库版本和sdk版本相关联,但是如果感觉版本太低也可以改为本地较新的),buildToolsVersion 只要是没有本地的高,建议改为和As中一样的。
3.如果本地gradle插件和gradle版本比较老了,那就更新为新的和导入工程中的一致(那么其他工程的gradle插件和gradle也要改)。
三.常见更新之后报错
3.1.gradle插件和gradle更新时候,更新失败。
解决方法在AndroidStudio与Gradle插件和Gradle中已经给出了。
3.2.其他问题
更新完gradle插件和gradle之后还是会有各种依赖库或者插件的兼容性问题而报错
1.工程中配置了友盟的打包渠道,用到了flavor,在gradle插件更新到3.0.0以后回报如下的错误:
All flavors must now belong to a named flavor dimension.
官方的解释是:为了保证各个渠道包要保持某些属性的一致,解决方法是给flavor添加统一的dimension属性,方法如下
在和versionName平级的地方添加统一的dimension属性,这里的值”versionCode”可以是其他任意的字符串。
...省略代码...
versionCode 61
versionName "4.2.5"
flavorDimensions "versionCode"
...省略代码...
2.注解的使用问题
在gradle插件升级为3.0.0之后,再使用如ButterKnife这类注解框架的时候,会报如下的错误
Error:java.lang.RuntimeException: Annotation processors must be explicitly declared now. The following dependencies on the compile classpath are found to contain annotation processor. Please add them to the annotationProcessor configuration.
意思就是3.0.0之后,要我们自己声明支持注解插件功能,解决方法在app的build.gradle中添加如下的代码。
...省略代码...
versionCode 61
versionName "4.2.5"
flavorDimensions "versionCode"
javaCompileOptions {
// 显式声明支持注解
annotationProcessorOptions {
includeCompileClasspath true
}
}
...省略代码...
其实除了上面的问题之外还有其他的问题,你的配置功能越多那么兼容性问题越多,这里不一一列举 了。遇到问题可以百度也可以去AndroidStudio介绍网站查看构建的说明。