java.lang.ClassNotFoundException:在path上找不到类:dexpathlist
我目前正在一个项目中,我必须使用纯粹的本地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"); }
#万一
在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" />
我在这里做错了什么? 如果必要,我会发布完整的代码。
我有一个类似的问题,这是我的解决scheme:
- 右键单击您的项目,然后select属性 。
- 从左边的菜单中selectJava Build Path 。
- select订单和导出选项卡。
- 从列表中确认您添加到您的项目的库或外部jar子被检查 。
- 最后,清理你的项目并运行。
你也可以检查这个答案。
这似乎是你的情况的问题。 您在清单中的活动的相对path不正确:
<activity android:name="android.app.POMActivity"
将其replace为:
<activity android:name=".POMActivity"
要么
<activity android:name="com.irrlicht.example1.POMActivity"
我尝试了所有可能的select,但结果是零。 最后,我find了对我有帮助的正确解决scheme。 只要去禁用即时运行转到文件 – >设置 – >build立,执行,部署 – >即时运行 – >取消checkbox即时运行 。 运行你的应用程序一次,这个apk文件正常工作..
我应该通过看明白这个问题
dex错误
但是花了半天的时间来解决这个问题。
我通过以下的Android开发者页面的指令来解决这个问题: https : //developer.android.com/studio/build/multidex.html
首先把这个添加到gradle.build文件中:
defaultConfig { ... minSdkVersion 14 targetSdkVersion 21 ... // Enabling multidex support. multiDexEnabled true } dependencies { compile 'com.android.support:multidex:1.0.0' }
然后扩展Application类(或者在AndroidManifest.xml
声明应用程序类或者使用MultiDexApplication
类来覆盖attachBaseContext()
函数,如上面的链接所示。
这一切,它解决了这个问题。
设备上的应用程序的删除和项目的清理工作对我来说
- 删除bin文件夹
- 改变图书馆的顺序
- 清理和重build
为我工作。
我解决了它的使用: ./gradlew --stop
命令在android studioterminal。 执行此命令后,清理并重build项目。
对于任何一个谁有multidex使写这个
里面build.gradle
apply plugin: 'com.android.application' android { defaultConfig { multiDexEnabled true } dexOptions { javaMaxHeapSize "4g" } } dependencies { compile 'com.android.support:appcompat-v7:+' compile 'com.google.android.gms:play-services:+' compile 'com.android.support:multidex:1.0.1' }
像下面这样写一个类EnableMultiDex
import android.content.Context; import android.support.multidex.MultiDexApplication; public class EnableMultiDex extends MultiDexApplication { private static EnableMultiDex enableMultiDex; public static Context context; public EnableMultiDex(){ enableMultiDex=this; } public static EnableMultiDex getEnableMultiDexApp() { return enableMultiDex; } @Override public void onCreate() { super.onCreate(); context = getApplicationContext(); } }
并在AndroidManifest.xml
中将这个className写入Application标签
<application android:name="YourPakageName.EnableMultiDex" android:hardwareAccelerated="true" android:icon="@drawable/wowio_launch_logo" android:label="@string/app_name" android:largeHeap="true" tools:node="replace">
如果项目正在编译之前清除caching通过使用:
./gradlew clean
要么
./gradlew cleanBuildCache
或为Windows
gradlew cleanBuildCache
只要尝试清洁项目和重build项目 。
只要将您的文件夹名称从lib
更改为libs
,
然后你会在你的项目中看到一些错误标记,解决这个问题点击项目>
Properties > Java Build Path > libraries
:
删除所有带有红色标记的库,然后在清理项目之后apply > ok >
。 TADA看魔术:)
在我尝试给出的答案后,我发现了另一个相同的exception的原因,我不得不添加我手动使用库到我的主库通过
Right click on my main library > Properties > Android > Go to the very bottom of the screen and click (Add) > Select my other library that caused the crash > Apply
在这个解决scheme之前,我在eclipse的.java文件中使用了“Fix Project setup”,但是这不起作用,所以我不得不在这里手动添加它,
如果在删除一些gradle依赖项后收到此错误,请检查清单并确保删除了与该依赖项相对应的所有条目。
在使用multidex时,尝试使用MultiDexAppication而不是Application来扩展应用程序类,并覆盖Android 5.0以下所需的方法(因为5.0和更高版本支持multidex)
@Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(BaseApplication.this); }
并在依赖添加此
compile 'com.android.support:multidex:1.0.1'
根据我的理解,我得到更新之后android studio 2.1到2.3的问题,由于即时function,我的应用程序将无法运行时,我从输出复制apk并放入SD卡。 对于这个问题,我构buildapk的构build选项在Android Studio中构buildapk。
当您在布局中具有自定义视图时,也会发生此exception:
<com.example.MyView android:layout_width="match_parent" android:layout_height="match_parent" />
并将视图的包名称从“com.example”更改为不同的内容,但您忘记在布局中更改它。
我们不需要定制扩展MultiDexApplication的 Application类。 相反,我们可以在AndroidManifest.xml中这样做
<application android:name="android.support.multidex.MultiDexApplication" android:hardwareAccelerated="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme">
随着build.gradle (Module:app)上的这个,
defaultConfig { ... minSdkVersion 14 targetSdkVersion 21 // Enabling multidex support. multiDexEnabled true } dependencies { compile 'com.android.support:multidex:1.0.2' }
谢谢。