Error con el valor google_play_services_version de la biblioteca aar

Tengo biblioteca y proyecto que depende de esa biblioteca. La biblioteca se almacena en mi repo privado de maven como archivo aar. La biblioteca tiene diferentes dependencias y una de ellas es google maps. Así que lo especificó en el archivo build.gradle y establecer meta-data tag dentro lib manifiesto

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

Cuando intento compilar mi proyecto hay un error

No se encontró ningún recurso que coincida con el nombre dado (en 'valor' con el valor '@ integer / google_play_services_version')

Éste es error común pero nunca vi problema como describí con el archivo del aar.

Mi archivo lib build.gradle

 apply plugin: 'com.android.library' apply plugin: 'com.jfrog.artifactory' apply plugin: 'maven-publish' def packageName = 'com.myapplib' def libraryVersion = '1.0.3' android { compileSdkVersion 22 buildToolsVersion "22.0.1" publishNonDefault true defaultConfig { minSdkVersion 15 targetSdkVersion 21 } buildTypes { def BOOLEAN = "boolean" def TRUE = "true" def FALSE = "false" def LOG_HTTP_REQUESTS = "LOG_HTTP_REQUESTS" def LOG_IMAGES_REQUESTS = "LOG_IMAGES_REQUESTS" def REPORT_CRASHES = "REPORT_CRASHES" def TRACK_GTM = "TRACK_GTM" release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' buildConfigField BOOLEAN, LOG_IMAGES_REQUESTS, FALSE buildConfigField BOOLEAN, LOG_HTTP_REQUESTS, FALSE buildConfigField BOOLEAN, TRACK_GTM, TRUE buildConfigField BOOLEAN, LOG_ERRORS_WITH_GTM, TRUE buildConfigField BOOLEAN, REPORT_CRASHES, TRUE } debug { ext.enableCrashlytics = false buildConfigField BOOLEAN, LOG_IMAGES_REQUESTS, TRUE buildConfigField BOOLEAN, LOG_HTTP_REQUESTS, TRUE buildConfigField BOOLEAN, TRACK_GTM, FALSE buildConfigField BOOLEAN, LOG_ERRORS_WITH_GTM, FALSE buildConfigField BOOLEAN, REPORT_CRASHES, FALSE } } } dependencies { compile 'org.apache.commons:commons-lang3:3.1' compile('com.crashlytics.sdk.android:crashlytics:2.3.2@aar') { transitive = true; } compile 'com.android.support:support-v4:22.1.+' //Explicitly specified maps version compile('com.google.android.gms:play-services-maps:7.5.0@aar') { transitive = true; } } publishing { publications { aar(MavenPublication) { groupId packageName version = libraryVersion artifactId project.getName() // Tell maven to prepare the generated "*.aar" file for publishing artifact("$buildDir/outputs/aar/${project.getName()}-release.aar") } } } artifactory { contextUrl = 'http://myapp.com/artifactory' publish { repository { // The Artifactory repository key to publish to repoKey = 'libs-release-local' username = "admin" password = "password" } defaults { // Tell the Artifactory Plugin which artifacts should be published to Artifactory. publications('aar') publishArtifacts = true // Properties to be attached to the published artifacts. properties = ['qa.level': 'basic', 'dev.team': 'core'] // Publish generated POM files to Artifactory (true by default) publishPom = true } } } 

Lib Manifest

 <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.myapplib" android:versionCode="4" android:versionName="1.0.3"> <uses-sdk android:minSdkVersion="15" android:targetSdkVersion="21" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <application android:name="com.myapplib.app.MyApplication" android:allowBackup="true" android:icon="@drawable/ic_logo" android:theme="@style/AppTheme" > <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> <activity android:name="com.myapplib.gui.LaunchActivity" android:label="@string/app_name" > </activity> <activity android:name="com.myapplib.gui.LandingPageActivity" android:noHistory="true" android:label="@string/app_name" > </activity> <activity android:name="com.myapplib.gui.PreferenceActivity" android:noHistory="true" android:label="@string/app_name" > </activity> </application> </manifest> 

Mi proyecto Manifiesto

 <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.myapp" android:versionCode="8" android:versionName="1.0.7"> <application android:name="com.myapp.app.MyApplication" android:allowBackup="true" android:icon="@drawable/app_logo" android:label="@string/app_name" android:largeHeap="true" android:theme="@style/AppTheme" tools:replace="icon"> <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="@string/google_api_key" /> <meta-data android:name="com.crashlytics.ApiKey" android:value="${crashlytics-api-key}" /> </application> </manifest> 

Mi aplicación build.gradle

 apply plugin: 'com.android.application' apply plugin: 'io.fabric' android { compileSdkVersion 15 buildToolsVersion "22.0.1" defaultConfig { applicationId "com.myapp" minSdkVersion 15 targetSdkVersion 22 } } dependencies { compile(group: 'com.myapplib', name: 'myapplib', version: '1.0.3', ext: 'aar') } 

Así que la lógica principal está dentro de la biblioteca. El proyecto sólo tiene algunos cambios de estilo. Como puedo ver dentro de archivo aar hay archivo R.txt con todos los valores y parámetros de la biblioteca y también hay línea

Int entero google_play_services_version 0x7f080002

Pero de todos modos cada vez que estoy compilando proyecto estoy recibiendo error. ¿Como puedo resolver esto?
Una solución más fácil y mala es codificar este valor dentro de mi biblioteca, pero creo que es horrible.

Otra gran pregunta es ¿por qué necesito especificar dentro de mi valor de manifiesto de la biblioteca, que sólo utiliza dentro de esa biblioteca? ¿Por qué simplemente no lo uso dentro y salir se desarrolla sin que el problema

Creo que no es honrar los recursos de juego, porque usted no tiene dependencias transitorias en usted. Usted está importando su propio aar con la notación de artefacto solamente ( vea la Sección 52.4.1.2 ). Si desea que las dependencias sean transitivas, debe establecerlas explícitamente (como lo hizo en el archivo de compilación de la biblioteca.

 dependencies { compile(group: 'com.myapplib', name: 'myapplib', version: '1.0.3', ext: 'aar') { transitive = true; } } 

Trate de agregar

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

En su archivo de manifiesto principal

 May be library not work properly. Try to add your library from extras/google/google_play_services again and then add in your manifest file May be help this one : <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> 

Pero no mencionaste la versión de Google Play Services. Crear un archivo xml (es decir, version.xml)

  <?xml version ="1.0" encoding = "utf-8"?> <resources> <integer name ="google_play_services_version">your_version_here</integer> </resources> 

También agregue

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

En su archivo de manifiesto.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.