来自aar库的google_play_services_version值出错

我有图书馆和项目,这取决于图书馆。 库被存储在我的私人maven回购作为一个文件。 图书馆有不同的依赖关系,其中之一是谷歌地图。 所以我在build.gradle文件中指定了它,并在lib manifest清单中设置了meta-data标签

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

当我尝试编译我的项目时出现错误

找不到与指定名称匹配的资源(值为'@ integer / google_play_services_version'的'值')

这是常见的错误,但我从来没有见过问题,因为我用aar文件描述。

我的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 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> 

我的项目清单

 <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> 

我的应用程序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') } 

所以主要的逻辑是在库里面。 项目只是有一些风格的变化。 正如我可以看到里面的文件里面有所有的值和参数库的R.txt文件,也有行

int integer google_play_services_version 0x7f080002

但无论如何,当我正在编译项目时,我得到错误。 我该如何解决这个问题?
一个最简单和最坏的解决scheme是在我的库中对这个值进行硬编码,但是我觉得这很糟糕。

另一个大问题是为什么我需要在库中指定清单值,这个值只在库中使用? 为什么不使用它,留下发展没有这个问题

Solutions Collecting From Web of "来自aar库的google_play_services_version值出错"

我认为它不尊重游戏资源,因为你没有对你的短暂依赖。 您只用工件符号导入自己的aar ( 请参阅第52.4.1.2节 )。 如果你希望依赖是可传递的,你必须明确地设置它们(就像你在库构build文件中那样)。

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

尝试添加

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

到您的主清单文件

 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" /> 

但是你没有提到谷歌播放服务版本。 创build一个xml文件(即version.xml)

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

还添加

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

在你的清单文件中。