GVKun编程网logo

ClassNotFoundException Android

9

对于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

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 系统 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

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-尝试了一切

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解决办法

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解决办法的相关信息,可以在本站进行搜索。

本文标签: