在AndroidStudio3.0升级gradle笔记

本片文章主要记录,升级gradle到4.4版本之后。
之前的语法与现在的语法对照笔记


升级gradle版本到4.4

修改当前项目下gradle目录下的gradle-wrapper.properties文件

1
2
3
4
5
6
7
#Thu Jun 21 11:21:10 CST 2018
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
// 这里的版本改为了4.4
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip

语法差异

修改生成之后的apk包名及路径

old 语法

1
2
3
4
5
6
7
8
9
applicationVariants.all { variant ->
//排除debug包,仅release做目录和包名修改
if (variant.buildType.name == 'release') {
variant.outputs.each { output ->
// 修改生成apk的路径及包名 目录:[app/build/outputs/release/] 包名:[customName.apk]
output.outputFile = new File(output.outputFile.parent + "/${variant.buildType.name}","customName.apk".toLowerCase())
}
}
}

new 语法

1
2
3
4
5
6
7
8
9
10
applicationVariants.all { variant ->		
if (variant.buildType.name == 'release') {
// 修改生成apk的路径及包名 目录:[app/build/outputs/release/]
variant.getPackageApplication().outputDirectory = new File(project.buildDir.absolutePath+"/outputs/${variant.buildType.name}")
//重命名 包名:[customName.apk]
variant.getPackageApplication().outputScope.apkDatas.forEach{ apkData ->
apkData.outputFileName = "customName.apk".toLowerCase()
}
}
}

新依赖项配置

新配置 已弃用配置 行为
implementation compile 依赖项在编译时对模块可用,并且仅在运行时对模块的消费者可用。 对于大型多项目构建,使用 implementation 而不是 api/compile 可以显著缩短构建时间,因为它可以减少构建系统需要重新编译的项目量。 大多数应用和测试模块都应使用此配置。
api compile 依赖项在编译时对模块可用,并且在编译时和运行时还对模块的消费者可用。 此配置的行为类似于 compile(现在已弃用),一般情况下,您应当仅在库模块中使用它。 应用模块应使用 implementation,除非您想要将其 API 公开给单独的测试模块。
compileOnly provided 依赖项仅在编译时对模块可用,并且在编译或运行时对其消费者不可用。 此配置的行为类似于 provided(现在已弃用)。
runtimeOnly apk 依赖项仅在运行时对模块及其消费者可用。 此配置的行为类似于 apk(现在已弃用)。

其他差异

  • 差异1 (app/build.gradle)

new 版本
buildToolsVersion:这里没有构建工具的版本 buildToolsVersion 属性了

  • 差异2 (项目/ build.gradle)

google():Android Studio 3.0 现在默认使用 Google 的 Maven 存储库

//指定的是Gradle插件的版本,由之前的 2.3.3 改成了 3.1.3。
classpath ‘com.android.tools.build:gradle:3.1.3’

  • 差异3

错误信息:style attribute ‘@android:attr/windowEnterAnimation’ not found.
解决方案:
这是aapt2导致的,3.0默认启用了aapt2。
解决办法:在project的根目录下的gradle.properties最后添加关闭aapt2的代码:

1
android.enableAapt2=false
  • 差异4

错误信息:Warning:android-apt plugin is incompatible with future version of Android Gradle plugin.
解决方案:
把Project的classpath ‘com.neenbedankt.gradle.plugins:android-apt:1.8’删除
同时把Module中apply plugin: ‘com.neenbedankt.android-apt’的也删除,
然后把dependencies中原来使用apt的改为annotationProcessor

然后重新sync Project,就ok了。