android - Unity Android with AppCompat Rejecting re-init on previously failed class java.lang.Class

标签 android unity-game-engine android-support-library android-appcompat

您好,我正在构建一个使用 Android 库作为插件之一的 Unity 应用程序。此 Android 库使用 AppCompat。

从 Unity 博客中了解到,由于多种原因(主要是 APK 大小),Unity 在构建过程中不包含 appcompat 库,但它仍然允许手动添加该库。 (博客在这里:http://blogs.unity3d.com/2015/07/16/android-themes-in-unity/)

因此我在 Assets/Plugins/Android/中添加了库,然后我的 Unity 应用程序能够成功构建并生成 APK 文件。

当我试图打开应用程序时,问题就来了,该应用程序应该会启动 android 库中定义的 Activity 。此特定 Activity 使用 appcompat 库。我从 logcat 收到以下错误消息

I/art     (19482): Rejecting re-init on previously-failed class java.lang.Class<android.support.v7.app.AppCompatActivity>
I/art     (19482): Rejecting re-init on previously-failed class java.lang.Class<android.support.v7.app.AppCompatActivity>
W/ActivityManager(  890):   Force finishing activity amillardo.test.blasterescopic/com.test.player.MainActivity
I/art     (19482): Rejecting re-init on previously-failed class java.lang.Class<android.support.v7.app.ActionBarActivity>
I/art     (19482): Rejecting re-init on previously-failed class java.lang.Class<android.support.v7.app.ActionBarActivity>
I/art     (19482): Rejecting re-init on previously-failed class java.lang.Class<com.test.player.MainActivity>
E/AndroidRuntime(19482): FATAL EXCEPTION: main
E/AndroidRuntime(19482): Process: amillardo.test.blasterescopic, PID: 19482
E/AndroidRuntime(19482): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{amillardo.test.blasterescopic/com.test.player.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.test.player.MainActivity" on path: DexPathList[[zip file "/data/app/amillardo.test.blasterescopic-1/base.apk"],nativeLibraryDirectories=[/data/app/amillardo.test.blasterescopic-1/lib/arm, /system/lib, /vendor/lib, system/vendor/lib, system/vendor/lib/egl, system/lib/hw]]
E/AndroidRuntime(19482):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2322)
E/AndroidRuntime(19482):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2474)
E/AndroidRuntime(19482):     at android.app.ActivityThread.access$800(ActivityThread.java:144)
E/AndroidRuntime(19482):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1359)
E/AndroidRuntime(19482):     at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime(19482):     at android.os.Looper.loop(Looper.java:155)
E/AndroidRuntime(19482):     at android.app.ActivityThread.main(ActivityThread.java:5696)
E/AndroidRuntime(19482):     at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(19482):     at java.lang.reflect.Method.invoke(Method.java:372)
E/AndroidRuntime(19482):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)
E/AndroidRuntime(19482):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
E/AndroidRuntime(19482): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.test.player.MainActivity" on path: DexPathList[[zip file "/data/app/amillardo.test.blasterescopic-1/base.apk"],nativeLibraryDirectories=[/data/app/amillardo.test.blasterescopic-1/lib/arm, /system/lib, /vendor/lib, system/vendor/lib, system/vendor/lib/egl, system/lib/hw]]
E/AndroidRuntime(19482):     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
E/AndroidRuntime(19482):     at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
E/AndroidRuntime(19482):     at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
E/AndroidRuntime(19482):     at android.app.Instrumentation.newActivity(Instrumentation.java:1083)
E/AndroidRuntime(19482):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2312)
E/AndroidRuntime(19482):     ... 10 more
E/AndroidRuntime(19482):     Suppressed: java.lang.NoClassDefFoundError: com.test.player.MainActivity
E/AndroidRuntime(19482):         at dalvik.system.DexFile.defineClassNative(Native Method)
E/AndroidRuntime(19482):         at dalvik.system.DexFile.defineClass(DexFile.java:226)
E/AndroidRuntime(19482):         at dalvik.system.DexFile.loadClassBinaryName(DexFile.java:219)
E/AndroidRuntime(19482):         at dalvik.system.DexPathList.findClass(DexPathList.java:321)
E/AndroidRuntime(19482):         at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:54)
E/AndroidRuntime(19482):         ... 14 more
E/AndroidRuntime(19482):     Suppressed: java.lang.ClassNotFoundException: com.test.player.MainActivity
E/AndroidRuntime(19482):         at java.lang.Class.classForName(Native Method)
E/AndroidRuntime(19482):         at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
E/AndroidRuntime(19482):         at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
E/AndroidRuntime(19482):         at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
E/AndroidRuntime(19482):         ... 13 more
E/AndroidRuntime(19482):     Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
I/TrimMemoryManager( 1561): [trimMemory] 20
E/ActivityManager(  890): App crashed! Process: amillardo.test.blasterescopic

是的,我被困在这里了。有人有什么建议吗?谢谢!

最佳答案

在尝试了所有我能想到的方法后,我终于成功了!

我怀疑这是因为 appcompat 库实际上需要或依赖于 support-v4 库。

最初我只将 appcompat 库从 android sdk 导入到我的 unity 项目中。但是当我导入 support-v4 库时,错误不再存在!

所以希望这能帮助到任何需要它的人。

关于android - Unity Android with AppCompat Rejecting re-init on previously failed class java.lang.Class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32243791/

相关文章:

java - Android 在使用 Eclipse 导入库项目时出现问题

android - 如何通过短暂的休息多次更改应用程序小部件(远程 View )的 ImageView ?

java - Facebook SDK : Android, Request 的类是什么

android - 在硬件菜单按钮单击操作栏中打开子菜单

c# - 尝试在 Unity 中自动运行单元测试

android - Android Studio不能正确创建新项目

android - SwitchCompat 改变颜色

android JNI报告找不到方法

iphone - 我尝试构建的任何应用程序都会在 Unity 初始屏幕上崩溃

ios - Oculus 唇形同步 iOS 支持