【问题标题】:Error meta-data with ARCore in AndroidStudioAndroid Studio 中的 ARCore 元数据错误
【发布时间】:2020-11-19 23:41:26
【问题描述】:

我尝试在 Android Studio 中遵循此 ARCore 指南:https://developers.google.com/ar/develop/java/enable-arcore#manifest

我按照这些步骤操作,但是当我尝试检查设备是否支持 ARCore 时出现错误:

E/ARCore-ArCoreApk: Error while checking app details and ARCore status
com.google.ar.core.exceptions.FatalException: Application manifest must contain meta-data com.google.ar.core.min_apk_version
    at com.google.ar.core.k.e(ArCoreApkImpl.java:41)
    at com.google.ar.core.k.b(ArCoreApkImpl.java:52)
    at com.google.ar.core.k.checkAvailability(ArCoreApkImpl.java:5)

我不明白为什么我应该在清单中指定最小 apk 版本。 我在 build.gradle(:app) 中有它:

minSdkVersion 21

在我拥有的依赖项中:

    implementation 'com.google.ar:core:1.18.0'

在我拥有的存储库中:

    repositories {
    google()

在我的清单中:

<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="XXXXX">

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="Test"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    tools:node="replace"
    android:theme="@style/AppTheme">

    <meta-data android:name="com.google.ar.core" android:value="optional" />


    <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="${applicationId}.provider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/provider_paths" />
    </provider>

    <activity android:name=".MainActivity" android:screenOrientation="sensorLandscape"
        tools:ignore="LockedOrientationActivity" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
</manifest>

在课堂上:

    public void Check_AR()
{
    ArCoreApk.Availability availability = ArCoreApk.getInstance().checkAvailability(getApplicationContext());
    if (availability.isTransient())
    {
        // Re-query at 5Hz while compatibility is checked in the background.
        new Handler().postDelayed(new Runnable()
        {
            @Override
            public void run()
            {
                Check_AR();
            }
        }, 200);
    }
    if (availability.isSupported())
    {
        Flag_AR = true;
    }
    else
    { // Unsupported or unknown.
        Flag_AR = false;
    }
    Log.d("TAG", "Check_AR: " + Flag_AR);
}

谁能帮帮我? 提前谢谢你!

编辑: 当我在 android studio 中分析 APK 时,我可以看到 uses-sdk 在这里并匹配 graddle。 但我有一个错误 xmlns:android="http://schemas.android.com/apk/res/android" --> URI 未注册(设置 | 语言和框架 | 模式和 DTD) 这有关系吗?

【问题讨论】:

    标签: android android-manifest arcore


    【解决方案1】:

    Application manifest 可以引用 build.gradle 声明或 android 清单 (https://developer.android.com/studio/publish/versioning#appversioning) 中的定义:

    注意:如果您的应用直接在元素中定义应用版本,则 Gradle 构建文件中的版本值将覆盖清单中的设置。此外,在 Gradle 构建文件中定义这些设置允许您为应用程序的不同版本指定不同的值。为了获得更大的灵活性并避免在合并清单时可能被覆盖,您应该从元素中删除这些属性,并改为在 Gradle 构建文件中定义您的版本设置。

    似乎 ARCore 在您的 APK 中找不到元数据。可能是 minSdkVersion 放错了地方;没有整个构建文件就很难判断。

    您可以使用Android Studio's APK Analyzer 找出您生成的AndroidManifest.xml 中存在哪些元数据。

    【讨论】:

      【解决方案2】:

      我找到了答案。 只需替换:

       tools:node="replace"
      

      通过

      tools:node="merge"
      

      在清单中。

      【讨论】:

        猜你喜欢
        • 2018-05-07
        • 2021-09-20
        • 1970-01-01
        • 2017-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多