0

任何人都可以帮助我了解使用 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中找到整数,并通过将文件夹传递给带有标志的 aapt 工具来res/values/version.xml满足清单要求。google-play-services/res-S

但是,当解压缩 google-play-services.aar 时,我看不到该 xml 文件,只是将解压缩的 .aar 的 res 文件夹传递给 aapt 会引发有关No resource found.

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

4

1 回答 1

1

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

从 Play Services 6.5开始,您现在可以有选择地添加某些 Google Play Services 模块,而不是以前的单一库。google_play_services_version 资源在 play-service 子模块中定义。

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

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

使用它,gradle 为SDK 中安装的 m2存储库中的所有gms 模块提取 .aar。

当我手动解压基本 play-services 包时,我找不到版本号,这就是引发这个问题的原因。但后来我看到 play-services 依赖项实际上是引入了其他几个 play-services 模块。

SDK m2 存储库中的 .pom 明确说明了这一点。pom at./extras/google/m2repository/com/google/android/gms/play-services/7.0.0/play-services-7.0.0.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。

于 2015-04-12T06:22:28.113 回答