对于ClassNotFoundExceptionAndroid感兴趣的读者,本文将提供您所需要的所有信息,并且为您提供关于Android5.x系统ClassNotFoundException的坑、An
对于ClassNotFoundException Android感兴趣的读者,本文将提供您所需要的所有信息,并且为您提供关于Android 5.x 系统 ClassNotFoundException 的坑、Android :: Extending MapActivity => classNotFound Exception、Android Activity ClassNotFoundException-尝试了一切、Android Caused by: java.lang.ClassNotFoundException解决办法的宝贵知识。
本文目录一览:- ClassNotFoundException Android
- Android 5.x 系统 ClassNotFoundException 的坑
- Android :: Extending MapActivity => classNotFound Exception
- Android Activity ClassNotFoundException-尝试了一切
- Android Caused by: java.lang.ClassNotFoundException解决办法
ClassNotFoundException Android
因此,我今天在开发Android程序时遇到问题。我有一个将XML字符串转换为Java对象(第三方)的类,并且可以在常规Java项目中正常工作,但是在Android上却收到以下奇怪错误:
06-21 22:44:26.402:调试/应用(259):java.lang.ClassNotFoundException:加载程序dalvik.system.PathClassLoader@4001b500中的com.package.mycode.Class06-21 22:44:26.402:调试/应用(259):在dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
我出于明显的原因隐藏了我的应用程序名称和程序包,但我想知道是否有人遇到过此类问题。类在正确的包中,这是我添加的库。我之前引用的其他类也可以进行。还有其他原因ClassNotFoundException
抛出吗?
谢谢杰克
答案1
小编典典private static void fixClassLoaderIssue(){ ClassLoader myClassLoader = MyClass.class.getClassLoader(); Thread.currentThread().setContextClassLoader(myClassLoader);}
这是我目前拥有的代码,相信可以解决此问题。MyClass只是我项目中的一个类。就像我说的,一位同事向我展示了它,但这似乎很简单。
Android 5.x 系统 ClassNotFoundException 的坑
Android 5.x 的 ART 虚拟机处理 dex 文件的时候,只处理了 classes.dex-classes99.dex,超过部分丢弃,具体源码可以查看这里,在编译的时候默认 dexOption.preDexLibraries=true,如果依赖了太多的 lib,每个 lib 编译成一个 dex,导致 app 中有超过 100 个 dex,使用 5.x 手机作为开发机的时候就会出现莫名其妙的 ClassNotFoundException,只需要在 App 的 build.gradle 中 android 下添加 dexOptions {preDexLibraries=false} 即可
Android :: Extending MapActivity => classNotFound Exception
我想创建一个MapView,但扩展MapActivity会抛出一个classNotFoundException:
/AndroidRuntime( 374): at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2585)
E/AndroidRuntime( 374): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
E/AndroidRuntime( 374): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
E/AndroidRuntime( 374): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
E/AndroidRuntime( 374): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 374): at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime( 374): at android.app.ActivityThread.main(ActivityThread.java:4627)
E/AndroidRuntime( 374): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 374): at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime( 374): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
E/AndroidRuntime( 374): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
E/AndroidRuntime( 374): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 374): Caused by: java.lang.classNotFoundException: com.androidcourse.phonemapper.view.MapShowActivity in loader dalvik.system.PathClassLoader[/system/framework/com.google.android.maps.jar:/data/app/com.androidcourse.phonemapper-2.apk]
E/AndroidRuntime( 374): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
E/AndroidRuntime( 374): at java.lang.classLoader.loadClass(ClassLoader.java:573)
E/AndroidRuntime( 374): at java.lang.classLoader.loadClass(ClassLoader.java:532)
E/AndroidRuntime( 374): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
E/AndroidRuntime( 374): at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2577)
我有一个Google Maps API密钥,我将项目设置为Google Api,我使用的是Android Google Api AVD(模拟器),我确实在AndroidManifest.xml中包含了该标记.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.androidcourse.phonemapper" android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<application android:icon="@drawable/icon" android:label="@string/app_name">
<uses-library android:name="com.google.android.maps" />
……………..
<activity android:name=".view.WelcomeActivity" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainlayout"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<com.google.android.maps.MapView
android:id="@+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
android:apiKey="api_key_is_here_just_wont_show_it_to_everybody"
/>
</RelativeLayout>
解决方法:
尝试将包设置为“com.androidcourse.phonemapper.view”:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.androidcourse.phonemapper.view" android:versionCode="1"
android:versionName="1.0">
然后引用它:
<activity android:name=".WelcomeActivity"
Android Activity ClassNotFoundException-尝试了一切
我刚刚将应用重构为框架库和应用,但是现在当我尝试在模拟器中启动该应用时,我得到了以下错误堆栈跟踪:
06-02 18:22:35.529: E/AndroidRuntime(586): FATAL EXCEPTION: main06-02 18:22:35.529: E/AndroidRuntime(586): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.matthewrathbone.eastersays/com.matthewrathbone.eastersays.EasterSimonSaysActivity}: java.lang.ClassNotFoundException: com.matthewrathbone.eastersays.EasterSimonSaysActivity in loader dalvik.system.PathClassLoader[/data/app/com.matthewrathbone.eastersays-1.apk]06-02 18:22:35.529: E/AndroidRuntime(586): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)06-02 18:22:35.529: E/AndroidRuntime(586): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)06-02 18:22:35.529: E/AndroidRuntime(586): at android.app.ActivityThread.access$2300(ActivityThread.java:125)06-02 18:22:35.529: E/AndroidRuntime(586): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)06-02 18:22:35.529: E/AndroidRuntime(586): at android.os.Handler.dispatchMessage(Handler.java:99)06-02 18:22:35.529: E/AndroidRuntime(586): at android.os.Looper.loop(Looper.java:123)06-02 18:22:35.529: E/AndroidRuntime(586): at android.app.ActivityThread.main(ActivityThread.java:4627)06-02 18:22:35.529: E/AndroidRuntime(586): at java.lang.reflect.Method.invokeNative(Native Method)06-02 18:22:35.529: E/AndroidRuntime(586): at java.lang.reflect.Method.invoke(Method.java:521)06-02 18:22:35.529: E/AndroidRuntime(586): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)06-02 18:22:35.529: E/AndroidRuntime(586): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)06-02 18:22:35.529: E/AndroidRuntime(586): at dalvik.system.NativeStart.main(Native Method)06-02 18:22:35.529: E/AndroidRuntime(586): Caused by: java.lang.ClassNotFoundException: com.matthewrathbone.eastersays.EasterSimonSaysActivity in loader dalvik.system.PathClassLoader[/data/app/com.matthewrathbone.eastersays-1.apk]06-02 18:22:35.529: E/AndroidRuntime(586): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)06-02 18:22:35.529: E/AndroidRuntime(586): at java.lang.ClassLoader.loadClass(ClassLoader.java:573)06-02 18:22:35.529: E/AndroidRuntime(586): at java.lang.ClassLoader.loadClass(ClassLoader.java:532)06-02 18:22:35.529: E/AndroidRuntime(586): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)06-02 18:22:35.529: E/AndroidRuntime(586): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)06-02 18:22:35.529: E/AndroidRuntime(586): ... 11 more
通常,这意味着清单文件在某种程度上是错误的,但是我已经仔细检查了所有我能想到的内容。
这是我的活动课:
package com.matthewrathbone.eastersays;import android.os.Bundle;import com.rathboma.simonsays.Assets.Season;import com.rathboma.simonsays.SeasonPicker;import com.rathboma.simonsays.SimonSaysActivity; public class EasterSimonSaysActivity extends SimonSaysActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); } @Override public SeasonPicker getSeasonPicker() { return new SeasonPicker(){ @Override public Season getSeason() { // TODO Auto-generated method stub return Season.EASTER; } }; } }
如你所见,清单中正确列出了它:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.matthewrathbone.eastersays" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".EasterSimonSaysActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application></manifest>
我不知道如何解决此问题,将不胜感激。我在SO上扫描了许多类似的问题,却没有看到这种特殊的行为。
更多信息:
- 我已经检查了生成的APK,并且该类在classes.dex文件中有一个条目
- 我曾尝试在Eclipse中清理/构建项目
- 我尝试使用全新的设备映像,但该映像上没有APK的副本
- 我已将库项目更改为常规Java,然后又更改为android项目,没有区别
- 将抽象的SimonSaysActivity添加到清单没有区别。
- 我尝试将每个依赖项都设为一个android库项目,并同步他们需要的android版本,但这样做没有帮助
- 找到了解决方案(请参阅下文)。对于每个发表了答案/评论的人:你们都很高兴,感谢你帮助我解决问题!
看起来是SDK工具升级引入的。感谢以下在此链接的注释中的@Nick:http ://iqadd.com/item/noclassdeffounderror-adt-fix
答案1
小编典典花了一些时间在自己的项目上,在尝试运行我的主项目时,我能够复制你的问题并获得完全相同的异常堆栈跟踪,所以我认为这可能是原因:
就像我的想法一样,这全都涉及到如何在Android主项目(一个简单的Eclipse配置设置)中引用Android库项目。
错误的方式:
右键单击主项目,选择Properties -> Java Build Path -> Projects -> Add
…,这会将Android库Project作为依赖项添加到Android主项目的构建路径中,此操作无效。如果在主项目中定义了所有必需的Android相关资源,则在编译时不会出现任何错误,但是在运行应用程序时,你会得到问题中所述的异常。
正确的方法:
右键单击主项目,Properties -> Android
在“库”部分中选择,在此处添加你的Android库项目。查看官方开发指南,参考图书馆项目。这应该可以解决所有问题。还要注意,你必须使用相对路径引用实际的Android库项目,如“ 库项目-开发注意事项”中所述。
希望这可以帮助。
Android Caused by: java.lang.ClassNotFoundException解决办法
Android Caused by: java.lang.classNotFoundException解决办法
出现问题:
08-13 18:29:22.924: E/AndroidRuntime(1875): Caused by: java.lang.classNotFoundException:XXXXX in loader dalvik.system.PathClassLoader[/data/app/XXXX.apk]
我想大家经常因为疏忽出现ClassNotFoundException的异常,这个异常在Android开发中无非就是告诉你类没有找到,那么什么原因导致没找到呢?
其实一般分为2种情况:
1、启动activity的时候,在AndroidManifest.xml 可能压根你就忘了添加一个activity,或者说activity的包名或者名字写错了,这个犯错几率很高的
2、你的使用的class,是一个外部的jar包,当在工程中编译使用时,发布成APK并没有包含JAR文件,所以APK在执行的时候就找不到JAR文件,会报错。
所以一定在“Order and Export”里,勾选使用的jar包。切记!
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
我们今天的关于ClassNotFoundException Android的分享就到这里,谢谢您的阅读,如果想了解更多关于Android 5.x 系统 ClassNotFoundException 的坑、Android :: Extending MapActivity => classNotFound Exception、Android Activity ClassNotFoundException-尝试了一切、Android Caused by: java.lang.ClassNotFoundException解决办法的相关信息,可以在本站进行搜索。
本文标签: