华为设备:您应用的AndroidManifest.xml中的元数据标签的值不正确

时间:2019-05-31 15:25:47

标签: android google-play-services manifest huawei

我正在使用一个已经使用了大约4年的大规模应用程序,在上一个版本中实现了一些新库,在实现之后,我们在尝试检查Google Play服务是否可用时遇到了一些问题,这仅在装有Android 8+的华为设备上发生。日志猫向我们显示了此堆栈跟踪

Caused by: java.lang.IllegalStateException: The meta-data tag in your app's AndroidManifest.xml does not have the right value. Expected 12451000 but found 4323000.  You must have the following declaration within the <application> element:     <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />

清单上有正确的值

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

如果我们遵循google_play_services_version的值,则可以从play-services-basement-16.1.0.aar中找到期望的值

<integer name="google_play_services_version">12451000</integer>

这是在gradle上实现的库

implementation "com.android.support.constraint:constraint-layout:$constraint"
implementation "com.android.support:appcompat-v7:$support"
implementation "com.android.support:design:$support"
implementation "com.android.support:cardview-v7:$support"
implementation "com.android.support:recyclerview-v7:$support"
implementation "com.android.support:design:$support"
implementation "com.android.support:support-v4:$support"
implementation "com.android.support:mediarouter-v7:$support" //New Lib
implementation "com.android.support:animated-vector-drawable:$support" //New Lib
implementation "com.android.support:design:$support"
implementation "com.android.support:support-vector-drawable:$support"

//Play services
implementation "com.google.android.gms:play-services-maps:$playServices"
implementation "com.google.android.gms:play-services-analytics:$playServices"
implementation "com.google.android.gms:play-services-gcm:$playServices"
implementation "com.google.android.gms:play-services-safetynet:$playServices"
implementation "com.google.android.gms:play-services-wearable:$playServices"

使用此版本

ext {
    //build
    sdkCompileVersion = 27
    sdkMinVersion = 16
    sdkTargetVersion = 27
    sdkBuildToolsVersion = '27.0.3'

    //dependencies
    support = '27.1.0'
    playServices = '16.0.0'
    newRelic = '5.18.0'
    constraint = '1.1.2'
}

有谁想解决这个问题,谢谢?

1 个答案:

答案 0 :(得分:0)

您是否在应用程序中的任何地方硬编码了gms版本的值?像这样  applicationInfo.metaData.putInt("com.google.android.gms.version", 4323000);

添加的新库之一也可能声明了旧的/不同的com.google.android.gms.version

如果仅在华为上发生,则华为可能会尝试使用某些值进行覆盖。

要确认它是您自己的图书馆还是华为,您必须将其硬编码到清单中,然后分析内置的apk并检查其中合并的最终值。如果该值符合预期,则可能是华为在这样做。

您也可以尝试以下链接: https://stackoverflow.com/a/52249677/6668797

如果库使用的是旧版本/不同版本,则它将用您的版本覆盖。

如果仍然无法解决问题,请提供以下详细信息: 请共享完整的堆栈跟踪。 是否在任何Nexus / Pixel设备上发生? 哪些是新添加的库?