【发布时间】:2023-04-10 20:39:02
【问题描述】:
好的,所以几周以来我一直在尝试解决这个问题,并且在 StackOverflow 上大量查看类似问题并尝试将它们应用于我自己的情况,但无济于事。我担心我只是在做一些非常愚蠢的事情,或者忘记了一些愚蠢的事情,会浪费别人的时间,但我现在没有选择和想法,所以如果最终出现这种情况,我深表歉意。我没有使用 Eclipse 或 Android Studio,只是 CLI Maven。我需要在我的应用程序中使用 DrawerLayout,但由于在运行时无法找到类(可能是 support-v4 包的其余部分),应用程序在尝试实例化它时崩溃。所以,一步一步来。
这是创建 DrawerLayout 的代码行:
DrawerLayout drawer = new android.support.v4.widget.DrawerLayout(this);
这是应用程序在尝试创建 DrawerLayout 的新实例时如何崩溃的堆栈跟踪。
E/AndroidRuntime( 2065): FATAL EXCEPTION: main
E/AndroidRuntime( 2065): Process: com.patron.main, PID: 2065
E/AndroidRuntime( 2065): java.lang.NoClassDefFoundError: android.support.v4.widget.DrawerLayout
E/AndroidRuntime( 2065): at com.patron.main.FlashMenu.onCreate(FlashMenu.java:120)
E/AndroidRuntime( 2065): at android.app.Activity.performCreate(Activity.java:5933)
E/AndroidRuntime( 2065): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
E/AndroidRuntime( 2065): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
E/AndroidRuntime( 2065): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
E/AndroidRuntime( 2065): at android.app.ActivityThread.access$800(ActivityThread.java:144)
E/AndroidRuntime( 2065): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
E/AndroidRuntime( 2065): at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime( 2065): at android.os.Looper.loop(Looper.java:135)
E/AndroidRuntime( 2065): at android.app.ActivityThread.main(ActivityThread.java:5221)
E/AndroidRuntime( 2065): at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime( 2065): at java.lang.reflect.Method.invoke(Method.java:372)
E/AndroidRuntime( 2065): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
E/AndroidRuntime( 2065): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
W/ActivityManager( 1228): Force finishing activity com.patron.main/.FlashMenu
这是我在 POM.xml 中包含依赖项的方式:
<dependency>
<groupId>com.android.support</groupId>
<artifactId>support-v4</artifactId>
<version>21.0.3</version>
<type>aar</type>
<exclusions>
<exclusion>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</exclusion>
</exclusions>
</dependency>
我正在使用 google 在 android-sdk/extras/android/m2repository 文件夹中提供的本地 maven 存储库,正如另一篇 SO 帖子所建议的那样。显然它可以编译并运行正常,所以我相信它可以正确找到它。当我调用 mvn dependency:build-classpath 来查看编译时类路径时,它向我显示了这个:
然后在 7zip 中手动打开该 AAR 文件夹并检查类 jar 以确保 DrawerLayout 在那里,我可以肯定地看到它是:
因此,在这一点上,我不确定我可以更改或做些什么来让此支持包在运行时可用。我详细检查了类路径,我相信我不会两次导入 support-v4 包,只是一次,并且根据两次导入它的错误性质来判断,如果那样的话,我认为我无法编译是问题所在。我尝试手动设置依赖项的范围以编译(应该是正确的),然后设置为运行时并提供以防万一没有任何运气。如果有人对解决此 NoClassDefFoundError 的问题有任何想法,将不胜感激。
【问题讨论】: