【问题标题】:java.lang.ClassNotFoundException: Didn't find class on path: dexpathlistjava.lang.ClassNotFoundException:在路径上找不到类:dexpathlist
【发布时间】:2014-04-19 10:10:25
【问题描述】:

我目前正在做一个项目,我必须使用纯原生 ndk。当我尝试从 Irrlicht 引擎源运行 helloworld 示例时,它起作用了。然后我尝试按照与该示例相同的格式在我的项目中使用它。但我得到了:

03-14 01:40:05.308: E/AndroidRuntime(799): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.irrlicht.example1/android.app.POMActivity}: java.lang.ClassNotFoundException: Didn't find class "android.app.POMActivity" on path: DexPathList[[zip file "/data/app/com.irrlicht.example1-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.irrlicht.example1-2, /system/lib]]

在运行我的项目时。

这是我的 main.cpp 文件:

#include <android/log.h>
#include <jni.h>
#include <android_native_app_glue.h>
#include "android_tools.h"
#ifdef _IRR_ANDROID_PLATFORM_
void android_main(android_app* app)
{
__android_log_print(4 , "pom" , "nothing");
}

#endif

在 Android.mk 中:

LOCAL_PATH := $(call my-dir)/..
IRRLICHT_PROJECT_PATH := $(LOCAL_PATH)
include $(CLEAR_VARS)
LOCAL_MODULE := Irrlicht
LOCAL_SRC_FILES := /home/karthik/Android/Essentials/ogl-es/lib/Android/libIrrlicht.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := HelloWorldMobile1
LOCAL_CFLAGS := -D_IRR_ANDROID_PLATFORM_ -pipe -fno-exceptions -fno-rtti -fstrict-aliasing
LOCAL_C_INCLUDES := -I ../../include -I /home/karthik/Android/Essentials/ogl-es/include -I /home/karthik/Android/json/jsoncpp-src-0.5.0/libs/linux-gcc-4.8 -I /home/karthik/Android/json/jsoncpp-src-0.5.0/include/json 
LOCAL_SRC_FILES :=  android_tools.cpp main.cpp
LOCAL_LDLIBS := -lEGL -llog -lGLESv1_CM -lGLESv2 -lz -landroid -ldl 
LOCAL_STATIC_LIBRARIES := Irrlicht android_native_app_glue
include $(BUILD_SHARED_LIBRARY)
$(call import-module,android/native_app_glue)

我已经在 AndroidManifest.xml 中给出了 Activity 名称:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.irrlicht.example1"
    android:versionCode="1"
    android:versionName="1.0">
...
<application android:icon="@drawable/irr_icon" android:label="HelloWorldMobile1" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:debuggable="true">
        <activity android:name="android.app.POMActivity"
        android:label="HelloWorldMobile1"
        android:launchMode="singleTask"
        android:configChanges="orientation|keyboardHidden"
        android:screenOrientation="portrait"
        android:clearTaskOnLaunch="true">
        <meta-data android:name="android.app.lib_name" android:value="HelloWorldMobile1" />                     

我在这里做错了什么?如果需要,我会发布完整的代码。

【问题讨论】:

  • 你是否使用了任何外部 jar 文件?
  • @SiddharthVyas 不,我没有在其中使用外部 jar 文件。
  • 您的应用程序是多索引的吗?如果是这样,那就解释了问题。
  • 当我做一个签名的 apk 时,这个错误没有发生。只是调试
  • 您找到可行的解决方案了吗?

标签: java android c++ android-ndk


【解决方案1】:

如果您在删除某些 gradle 依赖项后收到此错误,请检查您的清单并确保您删除了与该依赖项对应的所有条目。

【讨论】:

【解决方案2】:

对我来说,这个问题是在我创建了一个签名的 APK 之后出现的。为了修复它,我使用 Run / Build APK 生成了一个新的调试 apk。之后, Run(cmd+r) 再次工作而没有此错误。

【讨论】:

    【解决方案3】:

    我遇到了同样的问题。我尝试了一天的一切可能,但没有任何效果。 导致问题的依赖项是使用较低的编译 sdk、目标 sdk 和最小 sdk。我为项目创建了库模块,复制了所有源并将 sdk 版本与应用程序 sdk 版本匹配。最后它就像一个魅力。

    【讨论】:

      【解决方案4】:

      我有同样的错误,一些答案在新手问题上误导了我。我的自定义视图描述符中有错误的包,如下所示。我希望它可以帮助某人。

      <com.my.app.wrong.package.MyActivity
          android:id="@+id/myActivity"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:layout_marginLeft="16dp"
          android:layout_marginRight="16dp"
          android:paddingTop="16dp"
          android:paddingBottom="8dp"
          android:gravity="left" />
      

      【讨论】:

        【解决方案5】:

        这解决了我的问题:

        在我的情况下,我得到了以下异常(请注意,我的应用程序类导致了异常,而不是我的活动):

        ClassNotFoundException: Didn't find class "com.example.MyApplication" on path: DexPathList
        

        我只在等于或低于 API 19 的设备上遇到此异常,原因是我同时扩展了 MultiDexApplication() 类并覆盖了 attachBaseContext!当我删除 attachBaseContext 时,一切都正常了。

        class MyApplication : MultiDexApplication() {
        
        override fun onCreate() {
            super.onCreate()
            // ...
        }
        
        override fun attachBaseContext(base: Context?) {
            super.attachBaseContext(base)
            MultiDex.install(this)
        }
        

        因此,如果您碰巧遇到我遇到的这种情况(这不太可能),则无需同时扩展MultiDexApplication() 并覆盖attachBaseContext,执行其中一项操作就足够了。

        【讨论】:

        • 如果您扩展MultiDexApplication,则无需调用MultiDex.install(this)
        • @BugsBunnyBR 没错!我就是这么说的!
        【解决方案6】:

        Flipper 不适用于 0.61.x,因此在您的 MainApplication.java 中注释/删除 initializeFlipper(this) 应该可以解决问题。

        镇静丸。

        【讨论】:

          【解决方案7】:

          对我来说,我最终做的是禁用 minifyEnabled falseshrinkResources false

          【讨论】:

            【解决方案8】:

            将 Java 代码转换为 Kotlin 代码可能会导致此问题,因此在您的项目中配置 kotlin 可能会消除此问题

            【讨论】:

              【解决方案9】:

              删除“android/app/.settings”文件夹

              删除“android/.settings”文件夹

              删除“android/.build”文件夹

              删除“android/.idea”文件夹

              yarn react-native run android

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2017-03-16
                • 2017-12-23
                • 2018-04-13
                • 2019-07-02
                • 1970-01-01
                • 1970-01-01
                • 2016-06-25
                相关资源
                最近更新 更多