构建系统如何从.aar获取google_play_services_version?

时间:2015-04-09 11:22:15

标签: android android-library r.java-file aapt aar

任何人都可以帮助我了解资源合并在使用google-play-services.aar时的工作原理吗?

实现Google Play服务的AndroidManifest.xml可能具有以下内容:

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

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

但是当解压缩google-play-services.aar时,我没有看到xml文件,只是将解压缩的.aar的res文件夹传递给aapt会显示有关-S的相关投诉。

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

1 个答案:

答案 0 :(得分:1)

在戳了之后,我找到了一个足够接近我的目的的答案。

自Play Services 6.5 you can now selectively add certain Google Play Services modules instead of the monolithic library以来。 google_play_services_version资源在play-service子模块中定义。

将依赖项添加到gradle构建时,它可能如下所示:

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

使用此方法,gradle从SDK中安装的m2 repo中获取所有 gms模块的.aar。

当我手动解压缩时,我无法在基本play-services包中找到版本号,这就是提示这个问题的原因。但后来我发现播放服务依赖实际上正在吸引其他几个游戏服务模块。

这是由SDK m2 repo中的.pom明确指出的。 ./extras/google/m2repository/com/google/android/gms/play-services/7.0.0/play-services-7.0.0.pom处的pom将其他play-services模块显示为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中。