构建系统是如何从.aar获得google_play_services_version的



有人能帮助我了解在使用google-play-services.aar时资源合并是如何工作的吗?

实现谷歌播放服务的AndroidManifest.xml可能有以下内容:

<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />

如果使用google-play-services_lib,则在res/values/version.xml中找到google_play_services_version整数,并且通过将google-play-services/res文件夹传递给带有-S标志的aapt工具来满足清单要求。

但是,当解压缩google-play-services.aar时,我看不到那个xml文件,只是简单地将解压缩后的.aar的res文件夹传递给aapt,就会引发关于No resource found的相关投诉。

依赖.aar的应用程序如何将google_play_services_version整数获取到其R.java中?

在探究了这一点之后,我找到了一个足够接近我的目的的答案。

自Play Services 6.5以来,您现在可以选择性地添加某些Google Play Services模块,而不是以前的单片库。Google Play Services版本资源在Play Services子模块中定义。

当你在渐变构建中添加依赖项时,它可能看起来像这样:

dependencies {
compile 'com.google.android.gms:play-services:+'
}

使用此功能,gradle从安装在SDK中的m2 repo中为所有提取.aar。

当我手动打开它时,我在基本播放服务包中找不到版本号,这就是引发这个问题的原因。但后来我发现,播放服务的依赖性实际上正在引入其他几个播放服务模块。

这是由SDK m2 repo中的.pom明确表示的。./extras/google/m2repository/com/google/android/gms/play-services/7.0.0/play-services-7.0.0.pom的pom将其他播放服务模块显示为deps:

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.google.android.gms</groupId>
<artifactId>play-services</artifactId>
<version>7.0.0</version>
<packaging>aar</packaging>
<dependencies>
<dependency>
<groupId>com.google.android.gms</groupId>
<artifactId>play-services-ads</artifactId>
<version>7.0.0</version>
<scope>compile</scope>
<type>aar</type>
</dependency>
...
<dependency>
<groupId>com.google.android.gms</groupId>
<artifactId>play-services-wearable</artifactId>
<version>7.0.0</version>
<scope>compile</scope>
<type>aar</type>
</dependency>
</dependencies>
</project>

各个子模块的R.txt文件中都有google_play_services_version。

int integer google_play_services_version 0x7f050000

它被用作类路径资源,并进入每个gms模块的各种R.java文件。然后,在manifestMerging步骤中,它被添加到整个包的最终AndroidManifest.xml中。

相关内容

  • 没有找到相关文章

最新更新