首页 > 解决方案 > 膨胀类 com.google.ar.sceneform.ArSceneView 时出错

问题描述

我有一个错误,这是我的 Logcat

2020-07-26 12:14:50.756 30507-30507/com.tuto.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.tuto.myapplication, PID: 30507
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tuto.myapplication/com.tuto.myapplication.MainActivity}: android.view.InflateException: Binary XML file line #27 in com.tuto.myapplication:layout/activity_main: Binary XML file line #22 in com.tuto.myapplication:layout/sceneform_ux_fragment_layout: Binary XML file line #22 in com.tuto.myapplication:layout/sceneform_ux_fragment_layout: Error inflating class com.google.ar.sceneform.ArSceneView
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3782)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101)
 Caused by: android.view.InflateException: Binary XML file line #27 in com.tuto.myapplication:layout/activity_main: Binary XML file line #22 in com.tuto.myapplication:layout/sceneform_ux_fragment_layout: Binary XML file line #22 in com.tuto.myapplication:layout/sceneform_ux_fragment_layout: Error inflating class com.google.ar.sceneform.ArSceneView
 Caused by: android.view.InflateException: Binary XML file line #22 in com.tuto.myapplication:layout/sceneform_ux_fragment_layout: Binary XML file line #22 in com.tuto.myapplication:layout/sceneform_ux_fragment_layout: Error inflating class com.google.ar.sceneform.ArSceneView
 Caused by: android.view.InflateException: Binary XML file line #22 in com.tuto.myapplication:layout/sceneform_ux_fragment_layout: Error inflating class com.google.ar.sceneform.ArSceneView
 Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Constructor.newInstance0(Native Method)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:343)       android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1016)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:971)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:1133)
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1094)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:692)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:536)
    at com.google.ar.sceneform.ux.BaseArFragment.onCreateView(BaseArFragment.java:162)
    at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2600)
    at androidx.fragment.app.FragmentManagerImpl.ensureInflatedFragmentView(FragmentManagerImpl.java:1138)
    at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:851)
    at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1133)
    at androidx.fragment.app.FragmentManagerImpl.addFragment(FragmentManagerImpl.java:1393)
    at androidx.fragment.app.FragmentManagerImpl.onCreateView(FragmentManagerImpl.java:3205)
    at androidx.fragment.app.FragmentController.onCreateView(FragmentController.java:134)
    at androidx.fragment.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:357)
    at androidx.fragment.app.FragmentActivity.onCreateView(FragmentActivity.java:336)
    at android.view.LayoutInflater.tryCreateView(LayoutInflater.java:1079)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1007)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:971)
2020-07-26 12:14:50.758 30507-30507/com.tuto.myapplication E/AndroidRuntime:     at android.view.LayoutInflater.rInflate(LayoutInflater.java:1133)
    at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555)
    at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161)
    at com.tuto.myapplication.MainActivity.onCreate(MainActivity.java:77)
    at android.app.Activity.performCreate(Activity.java:8086)
    at android.app.Activity.performCreate(Activity.java:8074)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1313)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101)
 Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/filament/gltfio/Gltfio;
    at com.google.ar.sceneform.rendering.EngineInstance.gltfioInit(EngineInstance.java:96)
    at com.google.ar.sceneform.rendering.EngineInstance.createEngine(EngineInstance.java:110)
    at com.google.ar.sceneform.rendering.EngineInstance.getEngine(EngineInstance.java:42)
    at com.google.ar.sceneform.rendering.Renderer.initialize(Renderer.java:542)
    at com.google.ar.sceneform.rendering.Renderer.<init>(Renderer.java:109)
    at com.google.ar.sceneform.SceneView.initialize(SourceFile:37)

   2020-07-26 12:14:50.759 30507-30507/com.tuto.myapplication E/AndroidRuntime: Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.filament.gltfio.Gltfio" on path: DexPathList[[zip file "/data/app/com.tuto.myapplication-R6xbR4NAzgk5zRoAjKzIxA==/base.apk", zip file "/data/app/com.tuto.myapplication-R6xbR4NAzgk5zRoAjKzIxA==/split_lib_dependencies_apk.apk", zip file "/data/app/com.tuto.myapplication-R6xbR4NAzgk5zRoAjKzIxA==/split_lib_resources_apk.apk", zip file "/data/app/com.tuto.myapplication-R6xbR4NAzgk5zRoAjKzIxA==/split_lib_slice_0_apk.apk", zip file "/data/app/com.tuto.myapplication-R6xbR4NAzgk5zRoAjKzIxA==/split_lib_slice_1_apk.apk", zip file "/data/app/com.tuto.myapplication-R6xbR4NAzgk5zRoAjKzIxA==/split_lib_slice_2_apk.apk", zip file "/data/app/com.tuto.myapplication-R6xbR4NAzgk5zRoAjKzIxA==/split_lib_slice_3_apk.apk", zip file "/data/app/com.tuto.myapplication-R6xbR4NAzgk5zRoAjKzIxA==/split_lib_slice_4_apk.apk", zip file "/data/app/com.tuto.myapplication-R6xbR4NAzgk5zRoAjKzIxA==/split_lib_slice_5_apk.apk", zip file "/data/app/com.tuto.myapplication-R6xbR4NAzgk5zRoAjKzIxA==/split_lib_slice_6_apk.apk", zip file "/data/app/com.tuto.myapplication-R6xbR4NAzgk5zRoAjKzIxA==/split_lib_slice_7_apk.apk", zip file "/data/app/com.tuto.myapplication-R6xbR4NAzgk5zRoAjKzIxA==/split_lib_slice_8_apk.apk", zip file "/data/app/com.tuto.myapplication-R6xbR4NAzgk5zRoAjKzIxA==/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.tuto.myapplication-R6xbR4NAzgk5zRoAjKzIxA==/lib/arm64, /data/app/com.tuto.myapplication-R6xbR4NAzgk5zRoAjKzIxA==/base.apk!/lib/arm64-v8a, /data/app/com.tuto.myapplication-R6xbR4NAzgk5zRoAjKzIxA==/split_lib_dependencies_apk.apk!/lib/arm64-v8a, /data/app/com.tuto.myapplication-R6xbR4NAzgk5zRoAjKzIxA==/split_lib_resources_apk.apk!/lib/arm64-v8a, /data/app/com.tuto.myapplication-R6xbR4NAzgk5zRoAjKzIxA==/split_lib_slice_0_apk.apk!/lib/arm64-v8a, /data/app/com.tuto.myapplication-R6xbR4NAzgk5zRoAjKzIxA==/split_lib_slice_1_apk.apk!/lib/arm64-v8a, /data/app/com.tuto.myapplication-R6xbR4NAzgk5zRoAjKzIxA==/split_lib_slice_2_apk.apk!/lib/arm64-v8a, /data/app/com.tuto.myapplication-R6xbR4NAzgk5zRoAjKzIxA==/split_lib_slice_3_apk.apk!/lib/arm64-v8a, /data/app/com.tuto.myapplication-R6xbR4NAzgk5zRoAjKzIxA==/split_lib_slice_4_apk.apk!/lib/arm64-v8a, /data/app/com.tuto.myapplication-R6xbR4NAzgk5zRoAjKzIxA==/split_lib_slice_5_apk.apk!/lib/arm64-v8a, /data/app/com.tuto.myapplication-R6xbR4NAzgk5zRoAjKzIxA==/split_lib_slice_6_apk.apk!/lib/arm64-v8a, /data/app/com.tuto.myapplication-R6xbR4NAzgk5zRoAjKzIxA==/split_lib_slice_7_apk.apk!/lib/arm64-v8a, /data/app/com.tuto.myapplication-R6xbR4NAzgk5zRoAjKzIxA==/split_lib_slice_8_apk.apk!/lib/arm64-v8a, /data/app/com.tuto.myapplication-R6xbR4NAzgk5zRoAjKzIxA==/split_lib_slice_9_apk.apk!/lib/arm64-v8a, /system/lib64, /system/product/lib64, /hw_product/lib64, /system/product/lib64]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        ... 53 more
    Suppressed: java.io.IOException: No original dex files found for dex location /data/app/com.tuto.myapplication-R6xbR4NAzgk5zRoAjKzIxA==/split_lib_resources_apk.apk
    at dalvik.system.DexFile.openDexFileNative(Native Method)
    at dalvik.system.DexFile.openDexFile(DexFile.java:365)
    at dalvik.system.DexFile.<init>(DexFile.java:107)
    at dalvik.system.DexFile.<init>(DexFile.java:80)
    at dalvik.system.DexPathList.loadDexFile(DexPathList.java:444)
    at dalvik.system.DexPathList.makeDexElements(DexPathList.java:403)
    at dalvik.system.DexPathList.<init>(DexPathList.java:164)
    at dalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java:126)
    at dalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java:101)
    at dalvik.system.PathClassLoader.<init>(PathClassLoader.java:74)
    at com.android.internal.os.ClassLoaderFactory.createClassLoader(ClassLoaderFactory.java:87)
2020-07-26 12:14:50.759 30507-30507/com.tuto.myapplication E/AndroidRuntime:     at com.android.internal.os.ClassLoaderFactory.createClassLoader(ClassLoaderFactory.java:116)
    at android.app.ApplicationLoaders.getClassLoader(ApplicationLoaders.java:130)
    at android.app.ApplicationLoaders.getClassLoaderWithSharedLibraries(ApplicationLoaders.java:75)
    at android.app.LoadedApk.createOrUpdateClassLoaderLocked(LoadedApk.java:914)
    at android.app.LoadedApk.getClassLoader(LoadedApk.java:1015)
    at android.app.LoadedApk.getResources(LoadedApk.java:1264)
    at android.app.ContextImpl.createAppContext(ContextImpl.java:2611)
    at android.app.ContextImpl.createAppContext(ContextImpl.java:2599)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7075)
    at android.app.ActivityThread.access$2200(ActivityThread.java:296)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2208)
            ... 6 more
    Suppressed: java.io.IOException: No original dex files found for dex location /data/app/com.tuto.myapplication-R6xbR4NAzgk5zRoAjKzIxA==/split_lib_slice_0_apk.apk
    at dalvik.system.DexFile.openDexFileNative(Native Method)
    at dalvik.system.DexFile.openDexFile(DexFile.java:365)
    at dalvik.system.DexFile.<init>(DexFile.java:107)
    at dalvik.system.DexFile.<init>(DexFile.java:80)
    at dalvik.system.DexPathList.loadDexFile(DexPathList.java:444)
    at dalvik.system.DexPathList.makeDexElements(DexPathList.java:403)
    at dalvik.system.DexPathList.<init>(DexPathList.java:164)
    at dalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java:126)
    at dalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java:101)
    at dalvik.system.PathClassLoader.<init>(PathClassLoader.java:74)
    at com.android.internal.os.ClassLoaderFactory.createClassLoader(ClassLoaderFactory.java:87)
    at com.android.internal.os.ClassLoaderFactory.createClassLoader(ClassLoaderFactory.java:116)
    at android.app.ApplicationLoaders.getClassLoader(ApplicationLoaders.java:130)
    at android.app.ApplicationLoaders.getClassLoaderWithSharedLibraries(ApplicationLoaders.java:75)
    at android.app.LoadedApk.createOrUpdateClassLoaderLocked(LoadedApk.java:914)
    at android.app.LoadedApk.getClassLoader(LoadedApk.java:1015)
    at android.app.LoadedApk.getResources(LoadedApk.java:1264)
    at android.app.ContextImpl.createAppContext(ContextImpl.java:2611)
    at android.app.ContextImpl.createAppContext(ContextImpl.java:2599)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7075)
    at android.app.ActivityThread.access$2200(ActivityThread.java:296)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2208)
            ... 6 more

这是我的代码 MainActivity.java:

public class MainActivity extends AppCompatActivity implements Scene.OnUpdateListener {

private customArFragment mCustomArFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    try {
        mCustomArFragment = (customArFragment) getSupportFragmentManager().findFragmentById(R.id.fragment);
        mCustomArFragment.getArSceneView().getScene().addOnUpdateListener(this);
    }catch (Exception e){
        e.printStackTrace();
    }

}

public void setUpDatabase(Config config, Session session){
    Bitmap nature = BitmapFactory.decodeResource(getResources(),R.drawable.nature);
    AugmentedImageDatabase aid = new AugmentedImageDatabase(session);
    aid.addImage("nature" , nature);
    config.setAugmentedImageDatabase(aid);
}


@Override
public void onUpdate(FrameTime frameTime) {
    Frame frame = mCustomArFragment.getArSceneView().getArFrame();
    Collection<AugmentedImage> images = frame.getUpdatedTrackables(AugmentedImage.class);
    for (AugmentedImage image : images){
        if (image.getTrackingState() == TrackingState.TRACKING){
            if (image.getName().equals("nature")){
                Anchor anchor = image.createAnchor(image.getCenterPose());
                createModel(anchor);
            }
        }
    }
}

private void createModel(Anchor anchor) {
    ModelRenderable.builder()
            .setSource(this , Uri.parse("untitled.sfb"))
            .build()
            .thenAccept(modelRenderable -> { placeModel(modelRenderable,anchor); });

}

private void placeModel(ModelRenderable modelRenderable, Anchor anchor) {
    AnchorNode anchorNode = new AnchorNode(anchor);
    anchorNode.setRenderable(modelRenderable);
    mCustomArFragment.getArSceneView().getScene().addChild(anchorNode);
}

}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<fragment
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/fragment"
    android:name="com.tuto.myapplication.customArFragment"/>
</androidx.constraintlayout.widget.ConstraintLayout>

自定义ArFragment:

public class customArFragment extends ArFragment {
@Override
protected Config getSessionConfiguration(Session session) {
    Config config = new Config(session);
    config.setUpdateMode(Config.UpdateMode.LATEST_CAMERA_IMAGE);
    config.setFocusMode(Config.FocusMode.AUTO);
    session.configure(config);
    this.getArSceneView().setupSession(session);

    ((MainActivity)getActivity()).setUpDatabase(config,session);

    return config;
}

}

谢谢你

//EDIT1:刚刚编辑了堆栈跟踪以便可以利用。需要添加一些细节,所以我必须写一些行。

请添加一些解释;每个代码块的详细信息...

Lorem Ipsum 只是印刷和排版行业的虚拟文本。自 1500 年代以来,Lorem Ipsum 一直是行业的标准虚拟文本,当时一位不知名的印刷商采用了一种类型的厨房并将其加扰以制作一本类型样本书。它不仅经历了五个世纪,而且经历了电子排版的飞跃,基本保持不变。它在 1960 年代随着包含 Lorem Ipsum 段落的 Letraset 工作表的发布而流行起来,最近又随着 Aldus PageMaker 等桌面出版软件(包括 Lorem Ipsum 的版本)而普及

标签: javaandroidandroid-studioarcore

解决方案


我在使用 API 29 的 AVD 时遇到了同样的错误。在 SDK 管理器中,对于您选择的 API 级别,下载“Google APIs Intel x86 Atom System Image”“Intel x86 Atom System Image”或所有“Google API intel .... "

注意:以上下载需要巨大的空间和数据

然后遇到另一个错误“Google Play services for ar 不断停止”

对于此错误,以下链接帮助 https://developers.google.com/sceneform/develop/emulator

所以这里是答案

Sceneform 需要 OpenGL ES 3.0 或更高版本。确保您的模拟器配置为使用最新版本的 OpenGL ES:单击正在运行的模拟器工具栏中的更多。选择设置 > 高级 > OpenGL ES API 级别 > 渲染器最大值(最高 OpenGL ES 3.1)。重启模拟器。出现提示时,不要保存当前状态。

在上面的链接上查看更多信息


推荐阅读