构建系统如何从 .aar 中获取 google_play_services_version?
How does the build system get google_play_services_version from the .aar?
任何人都可以帮助我了解使用 google-play-services.aar 时资源合并的工作原理吗?
实现 google 播放服务的 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
旗帜。
但是当解压缩 google-play-services.aar 我没有看到那个 xml 文件并且只是将解压缩的 .aar 的 res 文件夹传递给 aapt 提出了相关的抱怨No resource found
。
依赖于 .aar 的应用程序如何将 google_play_services_version 整数放入其 R.java 中?
在仔细研究之后,我找到了一个与我的目的足够接近的答案。
从 Play Services 6.5 开始 you can now selectively add certain Google Play Services modules instead of the monolithic library 它曾经是。 google_play_services_version 资源在播放服务子模块中定义。
当您将依赖项添加到 gradle 构建时,它可能如下所示:
dependencies {
compile 'com.google.android.gms:play-services:+'
}
使用此方法,gradle 从安装在 SDK 中的 m2 存储库中为 所有 gms 模块提取 .aar。
当我手动解压时,我在base 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 将其他播放服务模块显示为 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 文件。然后在清单合并步骤中将其添加到整个包的最终 AndroidManifest.xml。
任何人都可以帮助我了解使用 google-play-services.aar 时资源合并的工作原理吗?
实现 google 播放服务的 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
旗帜。
但是当解压缩 google-play-services.aar 我没有看到那个 xml 文件并且只是将解压缩的 .aar 的 res 文件夹传递给 aapt 提出了相关的抱怨No resource found
。
依赖于 .aar 的应用程序如何将 google_play_services_version 整数放入其 R.java 中?
在仔细研究之后,我找到了一个与我的目的足够接近的答案。
从 Play Services 6.5 开始 you can now selectively add certain Google Play Services modules instead of the monolithic library 它曾经是。 google_play_services_version 资源在播放服务子模块中定义。
当您将依赖项添加到 gradle 构建时,它可能如下所示:
dependencies {
compile 'com.google.android.gms:play-services:+'
}
使用此方法,gradle 从安装在 SDK 中的 m2 存储库中为 所有 gms 模块提取 .aar。
当我手动解压时,我在base 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 将其他播放服务模块显示为 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 文件。然后在清单合并步骤中将其添加到整个包的最终 AndroidManifest.xml。