it-swarm.com.de

ClassNotFoundException nach ADT-Aktualisierung

Ich habe kürzlich das Android SDK & Eclipse ADT-Plugin auf die neueste Version aktualisiert. Wenn ich jetzt versuche, ein bereits vorhandenes Android= Projekt auszuführen, zeigt LogCat ein ClassNotFoundException.

Ich habe versucht, ein neues Gerät zu erstellen, aber das Problem besteht immer noch.

Manifest

<?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

Mir ist aufgefallen, dass die neue APK-Datei myapp-1.apk heißt, während sie normalerweise myapp.apk heißt. Kann mir jemand sagen, wie man das behebt?

59
user2340612

Gehen Sie zu Projekt -> Eigenschaften -> Java Build Path -> Order & Export und stellen Sie sicher, dass Android Private Libraries aktiviert sind für Ihr Projekt und für alle anderen Bibliotheksprojekte , die Sie verwenden Bereinigen Sie anschließend alle Projekte und sehen Sie, was passiert.

137
Krauxe

Ich weiß, dass ich sehr spät bin, um hier eine Antwort zu schreiben. Die von Krauxe erwähnte Problemumgehung hat mir nicht geholfen. Mein Projekt hat zwei Bibliotheksprojekte und zwei Gläser. Ich habe eine Lösung gefunden, die von "laaptu" auf der Seite veröffentlicht wurde Bibliotheken werden nach dem Upgrade auf ADT 22 nicht mehr zu APK hinzugefügt .

1
Vysakh Prem

Ich habe das Eclipse ADT-Bundle und zusätzlich zur Antwort von @ Krauxe hat das Aktualisieren der Eclipse .project-Datei wie folgt für mich funktioniert:

<?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

Wenn Sie das Maven-Plugin auch in Ihrem Projekt verwenden, kann "Maven -> Maven Update ..." dasselbe Problem verursachen wie ClassNotFoundException. Wie Sie wissen, sollte der Standardklassen-Ausgabeordner/bin/classes sein, der in der .classpath-Datei und im Eclipse-Erstellungspfad angegeben ist. Sobald Sie jedoch "Maven-> Maven Update ..." ausführen, wird der Ausgabeordner als "Ziel/Klassen" festgelegt. Sie finden es (output = "target/classes") in Ihrer .classpath-Datei.

.classpath Datei:

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

So beheben Sie dieses Problem, Geben Sie den Klassenausgabeordner in der Datei pom.xml explizit als "bin/classes" an..

pom.xml-Datei:

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