【发布时间】:2017-04-12 00:57:44
【问题描述】:
我正在尝试在场景上添加原生对话框以使用 exoplayer 播放视频。 到目前为止,我已经成功地正确显示了对话框,但是当我开始调用 exoplayer 的东西时,我在 logcat 中得到了这个异常:
原因:java.lang.NoClassDefFoundError:解析失败: Lcom/eppz/plugins/DemoPlayer;在 com.eppz.plugins.EPPZ_DialogFragment.preparePlayer(EPPZ_DialogFragment.java:96) 在 com.eppz.plugins.EPPZ_DialogFragment.onCreateView(EPPZ_DialogFragment.java:87) 在 android.app.Fragment.performCreateView(Fragment.java:2352) 在 android.app.FragmentManagerImpl.moveToState(FragmentManager.java:995) 在 android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1171) 在 android.app.BackStackRecord.run(BackStackRecord.java:815) 在 android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1578) 在 android.app.FragmentManagerImpl$1.run(FragmentManager.java:483) 在 android.os.Handler.handleCallback(Handler.java:751) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6077) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 引起 由:java.lang.ClassNotFoundException:com.eppz.plugins.DemoPlayer 在 java.lang.VMClassLoader.findLoadedClass(Native Method) 在 java.lang.ClassLoader.findLoadedClass(ClassLoader.java:742) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:362) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:312) 在 com.eppz.plugins.EPPZ_DialogFragment.preparePlayer(EPPZ_DialogFragment.java:96) 在 com.eppz.plugins.EPPZ_DialogFragment.onCreateView(EPPZ_DialogFragment.java:87) 在 android.app.Fragment.performCreateView(Fragment.java:2352) 在 android.app.FragmentManagerImpl.moveToState(FragmentManager.java:995) 在 android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1171) 在 android.app.BackStackRecord.run(BackStackRecord.java:815) 在 android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1578) 在 android.app.FragmentManagerImpl$1.run(FragmentManager.java:483) 在 android.os.Handler.handleCallback(Handler.java:751) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6077) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 引起:java.lang.NoClassDefFoundError:解析失败: Lcom/google/android/exoplayer/ExoPlayer$Listener;在 com.eppz.plugins.EPPZ_DialogFragment.preparePlayer(EPPZ_DialogFragment.java:96) 在 com.eppz.plugins.EPPZ_DialogFragment.onCreateView(EPPZ_DialogFragment.java:87) 在 android.app.Fragment.performCreateView(Fragment.java:2352) 在 android.app.FragmentManagerImpl.moveToState(FragmentManager.java:995) 在 android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1171) 在 android.app.BackStackRecord.run(BackStackRecord.java:815) 在 android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1578) 在 android.app.FragmentManagerImpl$1.run(FragmentManager.java:483) 在 android.os.Handler.handleCallback(Handler.java:751) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6077) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 引起:java.lang.ClassNotFoundException:找不到类 路径上的“com.google.android.exoplayer.ExoPlayer$Listener”: DexPathList[[压缩文件 "/data/app/com.eppz.plugins.alert-1/base.apk"],nativeLibraryDirectories=[/data/app/com.eppz.plugins.alert-1/lib/arm, /data/app/com.eppz.plugins.alert-1/base.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib]] 在 dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:380) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:312) 在 com.eppz.plugins.EPPZ_DialogFragment.preparePlayer(EPPZ_DialogFragment.java:96) 在 com.eppz.plugins.EPPZ_DialogFragment.onCreateView(EPPZ_DialogFragment.java:87) 在 android.app.Fragment.performCreateView(Fragment.java:2352) 在 android.app.FragmentManagerImpl.moveToState(FragmentManager.java:995) 在 android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1171) 在 android.app.BackStackRecord.run(BackStackRecord.java:815) 在 android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1578) 在 android.app.FragmentManagerImpl$1.run(FragmentManager.java:483) 在 android.os.Handler.handleCallback(Handler.java:751) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6077) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
我刚刚添加了一个纹理视图并在我的 android 部分中添加了 exoplayer,就像它是一个普通项目一样。
我不知道我可以添加什么,所以如果您需要更多信息,请随时询问:) 有什么想法吗?
问候,
【问题讨论】:
-
嗨,你找到解决办法了吗?
-
当然,没问题。但是,ExoPlayer 是否会被 AppCompatActivity 继承?
-
我不确定你的问题。您的意思是通过 AppCompat 继承直接通过您的活动访问 Exoplayer 吗?这会很方便,但 Exoplayer 是一个独立的组件,它不包含在 app compat 中(上次我检查过)。您必须根据此github.com/google/ExoPlayer 将 Exoplayer 声明为依赖项
-
好的,我想我明白了。我看到了 repo,发现 ExoPlayer 没有扩展 AppCompatActivity。我的情况有些不同,因为我有一个扩展 AppCompatActivity 的 A 类。当我创建它的库并尝试在 unity3d 中获取 A 类时,我收到 NoClassDefFound 错误。如果我删除这个实现,那么我可以找到 A 类。但我想要 A 类扩展 AppCompatActivity。
-
这很奇怪,它应该可以工作,你如何制作它的库?你是否在统一和你的库中定位相同的 sdk 版本(曾经从那里得到一个问题)。