Android Studio 中 ARCore 的错误元数据
Error meta-data with ARCore in AndroidStudio
我尝试在 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>
在class中:
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 在这里并且与 gradle 相匹配。
但我有一个错误
xmlns:android="http://schemas.android.com/apk/res/android"
--> URI 未注册(设置 | 语言和框架 | 架构和 DTD)
这可以相关吗?
Application manifest
可以引用 build.gradle
声明或 android 清单中的定义 (https://developer.android.com/studio/publish/versioning#appversioning):
Note: If your app defines the app version directly in the element, the version values in the Gradle build file will override the settings in the manifest. Additionally, defining these settings in the Gradle build files allows you to specify different values for different versions of your app. For greater flexibility and to avoid potential overwriting when the manifest is merged, you should remove these attributes from the element and define your version settings in the Gradle build files instead.
ARCore 似乎无法在您的 APK 中找到元数据。 minSdkVersion 可能放错了地方;没有整个构建文件很难判断。
您可以使用 Android Studio's APK Analyzer 找出生成的 AndroidManifest.xml
中存在哪些元数据。
我找到了答案。
只需更换:
tools:node="replace"
来自
tools:node="merge"
在清单中。
我尝试在 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>
在class中:
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 在这里并且与 gradle 相匹配。 但我有一个错误 xmlns:android="http://schemas.android.com/apk/res/android" --> URI 未注册(设置 | 语言和框架 | 架构和 DTD) 这可以相关吗?
Application manifest
可以引用 build.gradle
声明或 android 清单中的定义 (https://developer.android.com/studio/publish/versioning#appversioning):
Note: If your app defines the app version directly in the element, the version values in the Gradle build file will override the settings in the manifest. Additionally, defining these settings in the Gradle build files allows you to specify different values for different versions of your app. For greater flexibility and to avoid potential overwriting when the manifest is merged, you should remove these attributes from the element and define your version settings in the Gradle build files instead.
ARCore 似乎无法在您的 APK 中找到元数据。 minSdkVersion 可能放错了地方;没有整个构建文件很难判断。
您可以使用 Android Studio's APK Analyzer 找出生成的 AndroidManifest.xml
中存在哪些元数据。
我找到了答案。 只需更换:
tools:node="replace"
来自
tools:node="merge"
在清单中。