Android Unity 插件 - 未找到类异常

标签 android unity3d plugins classnotfoundexception aar

我想导出一个 android 库到 Unity,但是 Android 给出了以下错误:

05-14 12:58:10.601 18408-18408/? E/AndroidRuntime: FATAL EXCEPTION: main
                                               Process: com.joostverbraeken.weargame, PID: 18408
                                               java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.joostverbraeken.weargame/com.joostverbraeken.weargame.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.joostverbraeken.weargame.MainActivity" on path: DexPathList[[zip file "/data/app/com.joostverbraeken.weargame-1/base.apk"],nativeLibraryDirectories=[/data/app/com.joostverbraeken.weargame-1/lib/arm, /data/app/com.joostverbraeken.weargame-1/base.apk!/lib/armeabi-v7a, /vendor/lib, /system/lib]]
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2332)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2481)
at android.app.ActivityThread.access$900(ActivityThread.java:153)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1349)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5436)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:735)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
                                                    Caused by: java.lang.ClassNotFoundException: Didn't find class "com.joostverbraeken.weargame.MainActivity" on path: DexPathList[[zip file "/data/app/com.joostverbraeken.weargame-1/base.apk"],nativeLibraryDirectories=[/data/app/com.joostverbraeken.weargame-1/lib/arm, /data/app/com.joostverbraeken.weargame-1/base.apk!/lib/armeabi-v7a, /vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
at android.app.Instrumentation.newActivity(Instrumentation.java:1068)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2322)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2481) 
at android.app.ActivityThread.access$900(ActivityThread.java:153) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1349) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5436) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:735) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 
                                                    Suppressed: java.lang.NoClassDefFoundError: com.joostverbraeken.weargame.MainActivity
at dalvik.system.DexFile.defineClassNative(Native Method)
at dalvik.system.DexFile.defineClass(DexFile.java:226)
at dalvik.system.DexFile.loadClassBinaryName(DexFile.java:219)
at dalvik.system.DexPathList.findClass(DexPathList.java:338)
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:54)
        ... 13 more
                                                    Suppressed: java.lang.ClassNotFoundException: com.joostverbraeken.weargame.MainActivity
at java.lang.Class.classForName(Native Method)
at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
        ... 12 more
                                                    Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available

我的 AndroidManifest(我从我的库中复制了一个到 Unity)如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.joostverbraeken.weargame">

    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

    <application android:icon="@mipmap/ic_launcher" android:label="@string/app_name">
        <activity android:name=".MainActivity"
            android:label="@string/app_name"
            android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
        <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

依赖关系相当简单,并在 Gradle 中声明:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'], exclude: ['classes.jar'])
    provided files('libs/classes.jar')
    wearApp project(':wear')
    compile 'com.google.android.gms:play-services:8.4.0'
    compile 'com.android.support:support-v4:23.4.0'
}

在一个论坛上,我读到 Unity 需要将依赖项复制到 Assets/Plugins/Android 中,尽管我使用的是 aar 而不是 jar。所以我也将 support-v4-23.3.0-sources.jar 复制到 Assets/Plugins/Android 中,但是 play-services-8.4.0.jar 不是因为它不包含在 Android 系统文件中。包含 play-services-8.4.0.aar,但如果我将其复制到 Unity,则会出现以下错误:

Moving
Temp/StagingArea\android-libraries\play-services-8.4.0\classes.jar to
Temp/StagingArea\android-libraries\play-services-8.4.0\bin\classes.jar:
The system cannot find the file specified.

有人知道如何解决 ClassNotFoundException 吗?

最佳答案

我相信这是由 AndroidManifest.xml 引起的,它与 Unity 生成的 AndroidManiefst.xml 有一些冲突。在这种情况下,unity 不给我们任何错误消息是不友好的,而且只导出 eclipse 项目真的很糟糕。

我今天遇到了同样的异常,所以我做了一些进一步的测试,发现 ClassNotFoundException 只能在 Activity 类中产生。于是我导出了工程,将工程导入到AndriodStudio中重新编译。我在 AndroidManifest.xml 中遇到一些错误,例如主题不正确或图标不正确等。

在更新 AndriodManifest.xml 中所有不正确的配置并重建 AAR 后,一切正常。

希望对您有所帮助。

关于Android Unity 插件 - 未找到类异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37225920/

相关文章:

android - 如何为Android制作一个简单的UI?

android - 如何在这种复杂的数据传输场景中最大限度地提高效率

c# - 如何检测 UI 和 GameObjects 上的点击/触摸事件

c# - 如何在Unity中制作登录窗口

javascript - 多级行扩展网格

Android Studio 4.1调试断点不起作用

android - 使用 MyLocationOverlay 绘制精度圆

unity3d (2d!) - 相机以玩家为中心,但永远不会超过 "map"边界

javascript - 伪造最大设备宽度

c# - 无需开源的可扩展性