【问题标题】:How does the build system get google_play_services_version from the .aar?构建系统如何从 .aar 中获取 google_play_services_version?
【发布时间】:2015-04-09 11:22:14
【问题描述】:

谁能帮我了解使用 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 文件夹传递给带有 -S 标志的 aapt 工具来满足清单要求。

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

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

【问题讨论】:

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


    【解决方案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 存储库中为 所有 gms 模块提取 .aar。

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

    SDK m2 存储库中的 .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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-03
      • 1970-01-01
      • 2018-05-14
      • 1970-01-01
      • 2013-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多