简体   繁体   中英

Error inflating class com.google.ar.sceneform.ArSceneView

I have an error this is my 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

this is my code 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>

customArFragment:

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

}

thank you

//EDIT1: Just edited the stacktrace in order to be exploitable. Needed to add some details so I have to writer some lines.

Please add some explanations; details about each block of code...

Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum

The most common cause of this type of error seems to be running on devices which don't support OpenGL ES3.1 or later - see the discussion here: https://github.com/google-ar/sceneform-android-sdk/issues/4

This can be either on older or less capable devices or when running in the emulator on a platform that does not have this version or a later version.

There are also reports that having mismatched Sceneform libraries can cause the same problem (not sure if the error is 100% the same) - ie an example from the discussion above (with version bolded to highlight):

implementation "com.google.ar.sceneform.ux:sceneform-ux: 1.10.0 "

implementation "com.google.ar.sceneform:animation: 1.8.0 "

I was facing the same error with AVD for API 29. In SDK Manager, for your selected API level, download "Google APIs Intel x86 Atom System Image" or "Intel x86 Atom System Image" or all "Google API intel...."

Note: Above downloads requires huge space and data

Then faced another error "Google Play services for ar keeps stopping"

for this error below link helped https://developers.google.com/sceneform/develop/emulator

So here is the answer

Sceneform requires OpenGL ES 3.0 or higher. Make sure your emulator is configured to use the latest version of OpenGL ES: Click More in the running emulator's toolbar. Select Settings > Advanced > OpenGL ES API level > Renderer maximum (up to OpenGL ES 3.1). Restart the emulator. When prompted, do not save the current state.

Check more on link above

build.gradle Add the following configuration to the file.

android{
....
compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM