java - 膨胀类 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 的版本)而普及
解决方案
我在使用 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)。重启模拟器。出现提示时,不要保存当前状态。
在上面的链接上查看更多信息
推荐阅读
- excel - 如何检测邮箱地址和更新栏目?
- javascript - 动态加载后编译less文件
- python - Kivy MDGridLayout 固定列大小
- python - 计算两个张量之间的损失时的 Pytorch 错误。TypeError: __init__() 接受 1 个位置参数,但给出了 3 个
- json - 如何扩展 JSON 字符串中的 bash 变量?
- performance - 有没有办法在 nagios/icinga 性能数据中为标签添加多个值
- python - 对 neo4j 节点进行时间版本控制的最佳方法是什么?
- database - 通过 API 创建 MongoDB Atlas 数据库的副本
- reactjs - 仅在带有道具的路线上做出反应而不进行 api 调用
- sql - 为什么我违反了完整性约束?(ORA-02291)