2015-04-09 4 views
0

Может ли кто-нибудь помочь мне понять, как слияние ресурсов работает при использовании google-play-services.aar?Как система сборки получает google_play_services_version из .aar?

AndroidManifest.xml, который реализует услуги в Google Play, возможно, что-то вроде ниже:

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

При использовании Google-плей-services_lib, то google_play_services_version целое число встречается в res/values/version.xml и что проявляется требование выполняется путем пропускания google-play-services/res папка с инструментом aapt с флагом -S.

Но при распаковке google-play-services.aar я не вижу этого xml-файла и просто передаю распакованную папку res .aar для aapt, вызывает связанную жалобу о No resource found.

Как приложение, зависящее от .aar, получает целое число google_play_services_version в его R.java?

ответ

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-сервиса.

При добавлении зависимостей в Gradle сборки, это может выглядеть следующим образом:

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

Используя это, Gradle тянет в .aar для всех СБХ модулей из м2 репо, установленных в SDK.

Я не смог найти номер версии в базовом пакете игровых сервисов, когда я распаковал его вручную, что и вызвало этот вопрос. Но потом я увидел, что зависимость от игровых сервисов на самом деле тянет несколько других модулей игровых сервисов.

Это указано в .pom в SDK m2 repo. П на ./extras/google/m2repository/com/google/android/gms/play-services/7.0.0/play-services-7.0.0.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> 

Различный суб-модули имеет google_play_services_version в своих файлах R.txt.

int integer google_play_services_version 0x7f050000 

Это используется как ресурс пути к классам и пробивается в различные файлы R.java для каждого модуля gms. Затем он добавляется в окончательный файл AndroidManifest.xml для всего пакета во время этапа manifestMerging.