web-dev-qa-db-fra.com

ClassNotFoundException après la mise à jour ADT

J'ai récemment mis à jour Android SDK & Eclipse ADT plugin vers la dernière version. Maintenant, lorsque j'essaie d'exécuter un projet Android Android $, le LogCat affiche un ClassNotFoundException.

J'ai essayé de créer un nouvel appareil mais le problème persiste.

Manifeste

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.example.myapp"
Android:versionCode="1"
Android:versionName="1.0" >

<uses-sdk
    Android:minSdkVersion="8"
    Android:targetSdkVersion="17" />

<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />

<application
    Android:allowBackup="true"
    Android:icon="@drawable/ic_launcher"
    Android:label="@string/app_name"
    Android:theme="@style/AppTheme" >
    <activity
        Android:name="com.example.myapp.MainActivity"
        Android:label="@string/app_name"
        Android:windowSoftInputMode="stateHidden" >
        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />

            <category Android:name="Android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

LogCat

05-17 13:09:56.357: E/AndroidRuntime(969): FATAL EXCEPTION: main
05-17 13:09:56.357: E/AndroidRuntime(969): Java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.myapp/com.example.myapp.MainActivity}: Java.lang.ClassNotFoundException: Didn't find class "com.example.myapp.MainActivity" on path: /data/app/com.example.myapp-1.apk
05-17 13:09:56.357: E/AndroidRuntime(969):  at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2106)
05-17 13:09:56.357: E/AndroidRuntime(969):  at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2230)
05-17 13:09:56.357: E/AndroidRuntime(969):  at Android.app.ActivityThread.access$600(ActivityThread.Java:141)
05-17 13:09:56.357: E/AndroidRuntime(969):  at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1234)
05-17 13:09:56.357: E/AndroidRuntime(969):  at Android.os.Handler.dispatchMessage(Handler.Java:99)
05-17 13:09:56.357: E/AndroidRuntime(969):  at Android.os.Looper.loop(Looper.Java:137)
05-17 13:09:56.357: E/AndroidRuntime(969):  at Android.app.ActivityThread.main(ActivityThread.Java:5041)
05-17 13:09:56.357: E/AndroidRuntime(969):  at Java.lang.reflect.Method.invokeNative(Native Method)
05-17 13:09:56.357: E/AndroidRuntime(969):  at Java.lang.reflect.Method.invoke(Method.Java:511)
05-17 13:09:56.357: E/AndroidRuntime(969):  at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:793)
05-17 13:09:56.357: E/AndroidRuntime(969):  at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:560)
05-17 13:09:56.357: E/AndroidRuntime(969):  at dalvik.system.NativeStart.main(Native Method)
05-17 13:09:56.357: E/AndroidRuntime(969): Caused by: Java.lang.ClassNotFoundException: Didn't find class "com.example.myapp.MainActivity" on path: /data/app/com.example.myapp-1.apk
05-17 13:09:56.357: E/AndroidRuntime(969):  at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.Java:65)
05-17 13:09:56.357: E/AndroidRuntime(969):  at Java.lang.ClassLoader.loadClass(ClassLoader.Java:501)
05-17 13:09:56.357: E/AndroidRuntime(969):  at Java.lang.ClassLoader.loadClass(ClassLoader.Java:461)
05-17 13:09:56.357: E/AndroidRuntime(969):  at Android.app.Instrumentation.newActivity(Instrumentation.Java:1054)
05-17 13:09:56.357: E/AndroidRuntime(969):  at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2097)
05-17 13:09:56.357: E/AndroidRuntime(969):  ... 11 more

J'ai remarqué que le nouveau fichier APK s'appelle myapp-1.apk, alors qu'il était généralement appelé myapp.apk. Quelqu'un peut-il me dire comment réparer?

59
user2340612

Essayez d'aller à Projet -> Propriétés -> Java Chemin de génération -> Ordre et exportation et assurez-vous que Bibliothèques privées Android sont cochées pour votre projet et pour tous les autres projets de bibliothèque que vous utilisez. Nettoyez ensuite tous les projets et voyez ce qui se passe.

137
Krauxe

Je sais que je suis très en retard pour poster une réponse ici. La solution de contournement mentionnée par Krauxe ne m'a pas aidé. Mon projet a deux projets de bibliothèque et deux pots. J'ai trouvé une solution publiée par "laaptu" dans la page les bibliothèques ne sont plus ajoutées à l'APK après la mise à niveau vers ADT 22 .

1
Vysakh Prem

J'ai le pack Eclipse ADT et en plus de la réponse de @ Krauxe, la mise à jour du fichier Eclipse .project comme ci-dessous a fonctionné pour moi:

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
    <name>RedbeaconPro</name>
    <comment></comment>
    <projects>
    </projects>
    <buildSpec>
        <buildCommand>
            <name>com.Android.ide.Eclipse.adt.ResourceManagerBuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>com.Android.ide.Eclipse.adt.PreCompilerBuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.Eclipse.jdt.core.javabuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>com.Android.ide.Eclipse.adt.ApkBuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
    </buildSpec>
    <natures>
        <nature>com.Android.ide.Eclipse.adt.AndroidNature</nature>
        <nature>org.Eclipse.jdt.core.javanature</nature>
    </natures>
</projectDescription>
1
jaxvy

Si vous utilisez également le plug-in Maven dans votre projet, "Maven -> Maven Update ..." peut provoquer le même problème que ClassNotFoundException. Comme vous le savez, le dossier de sortie des classes par défaut doit être/bin/classes qui est spécifié dans le fichier .classpath et Eclipse Build Path. Mais une fois que vous faites "Maven-> Maven Update ...", le dossier de sortie sera défini comme "target/classes". Vous pouvez le trouver (output = "target/classes") dans votre fichier .classpath.

Fichier .classpath:

...    
<classpath>
            <classpathentry kind="src" path="gen"/>
            <classpathentry kind="src" output="target/classes" path="src/main/Java">
...

Comment résoudre ce problème, veuillez spécifier explicitement le dossier de sortie des classes comme "bin/classes" dans le fichier pom.xml.

fichier pom.xml:

...
<build>
            <sourceDirectory>src/main/Java</sourceDirectory>
            <outputDirectory>bin/classes</outputDirectory>
...
0
Richard