gradle读书笔记

2019/09/03 posted in  客户端
Tags:  #android

date: 2019-09-03 19:46

gradle读书笔记

repositories代码块将JCenter配置成一个仓库,在这种情况下,一个仓库意味着一系列的依赖包,或者说,在我们应用和依赖项目中可使用的一系列可下载的函数库。JCenter是一个很有名的Maven库。

dependencies代码块用于配置构建过程中的依赖包。这也意味着你不能将你的应用或依赖项目所需要的依赖包包含在顶层构建文件中。默认情况下,唯一被定义的依赖包是Gradle的Android插件。每个Android模块都需要有Android插件,因为该插件可使其执行Android相关的任务。

只要你使用了allprojects,模块就会被耦合到项目。这意味着,其很可能在没有主项目构建文件的情况下,无法独立构建模块。最初,这看起来可能不是一个问题,但是如果你后面想要分离一个内部依赖库到自己的项目,那么你将需要重构你的构建文件。

第一个,compileSdkVersion,是要用来编译应用的AndroidAPI版本。第二个,buildToolsVersion,是构建工具和编译器使用的版本号。

assemble:集合项目的输出。clean:清理项目的输出。check:运行所有检查,通常是单元测试和集成测试。build:同时运行assemble和check。Java基础插件添加了源集的概念。Android插件构建于这些约定,这样经验丰富的Gradle用户就可以看到这些暴露的任务。在这些基本的任务之上,Android插件也添加了很多Android特有的任务。

connectedCheck:在连接设备或模拟器上运行测试。deviceCheck:一个占位任务,专为其他插件在远端设备上运行测试。installDebug和installRelease:在连接的设备或模拟器上安装特定版本。所有的installtasks都会有相关的uninstall任务。

在Gradle中,有一些便捷和可扩展的概念可用来定位这些常见问题。前面提到过,每个由AndroidStudio创建的新项目都会生成debug和release构建类型。另外一个概念是productflavor(不同定制的产品),其让管理多个应用或依赖库版本成为可能。构建类型和productflavor经常结合在一起使用,可以很容易地处理测试和生产应用的免费和付费版本。构建类型和productflavor的结合结果被称之为构建variant。


android{productFlavors{red{applicationId'com.gradleforandroid.red'versionCode3}blue{applicationId'com.gradleforandroid.blue'minSdkVersion14versionCode4}}}

和构建类型类似,productflavor也可以拥有它们自己的源集目录。为一个特殊的flavor创建一个文件夹就和创建一个有flavor名称的文件夹一样简单。你甚至可以为一个特定构建类型和flavor的结合体创建一个文件夹。该文件夹的名称将是flavor名称+构建类型的名称。例如,如果你想让blueflavor的release版本有一个不同的应用图标,那么文件夹将会被叫作blueRelease。合并文件夹的组成将比构建类型文件夹和productflavor文件夹拥有更高优先级。

源集的引入额外增加了构建进程的复杂性。Gradle的Android插件在打包应用之前将main源集和构建类型源集合并在一起。此外,library项目也可以提供额外的资源,这些也需要被合并。这同样适用于manifest文件。例如,在你应用的debugvariant中可能需要额外的Android权限来存储log文件。你并不想在main源集中申明该权限,因为这会吓跑潜在客户。相反,你可以在debug构建类型的源集中额外添加一个manifest文件来申明额外的权限。

签名配置:

android{signingConfigs{staging.initWith(signingConfigs.debug)release{storeFilefile("release.keystore")storePassword"secretpassword"keyAlias"gradleforandroid"keyPassword"secretpassword"}}}

这是建立多模块项目最简单、最直接的方式。在项目的settings.gradle文件中声明了所有的模块,如下所示:include':app',':library'该代码确保了app和library模块包含在构建配置中。你需要做的就是添加模块的目录名。

dependencies{compileproject(':library')}

AppEngine插件添加了许多任务,其中使用最多的是appengineRun和appengineUpdate。appengineRun任务用来开启一个本地开发服务器,这样就可以在上传到GoogleAppEngine之前,本地测试整个后端。第一次运行该任务时,构建可能需要一段时间,因为Gradle需要下载AppEngineSDK。我们早已通过downloadSdk=true来设置下载行为。要想停止服务器,你可以使用appengineStop。

Closures是匿名代码块,可以接受参数和返回值。它们可以被视为变量,被当作参数传递给方法。