web-dev-qa-db-ja.com

ADT更新後のClassNotFoundException

最近、Android SDK&Eclipse ADTプラグインを最新バージョンに更新しました。既存のAndroidプロジェクトを実行しようとすると、LogCatはClassNotFoundException

新しいデバイスを作成しようとしましたが、問題はまだ存在します。

マニフェスト

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

新しいAPKファイルの名前はmyapp-1.apkでしたが、通常はmyapp.apkと呼ばれていました。誰かが修正方法を教えてもらえますか?

59
user2340612

プロジェクト->プロパティ-> Javaビルドパス->注文とエクスポートに移動して、Androidプライベートライブラリがチェックされていることを確認してくださいプロジェクトおよび他のすべてのライブラリプロジェクトに対して使用します。その後、すべてのプロジェクトをクリーンアップし、何が起こるかを確認します。

137
Krauxe

ここに返信を投稿するのが非常に遅いことを知っています。 Krauxeが言及した回避策は私を助けませんでした。私のプロジェクトには、2つのライブラリプロジェクトと2つのjarがあります。ページに「laaptu」によって投稿されたソリューションが見つかりました ADT 22へのアップグレード後にライブラリがAPKに追加されなくなりました

1
Vysakh Prem

私はEclipse ADTバンドルと@Krauxeの答えに加えて、Eclipse .projectファイルを次のように更新してくれました:

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

プロジェクトでもMavenプラグインを使用している場合、「Maven-> Maven Update ...」はClassNotFoundExceptionと同じ問題を引き起こす可能性があります。ご存じのように、デフォルトのクラス出力フォルダーは、.classpathファイルとEclipseビルドパスで指定されている/ bin/classesである必要があります。ただし、「Maven-> Maven Update ...」を実行すると、出力フォルダーは「target/classes」として設定されます。 .classpathファイルでそれを見つけることができます(output = "target/classes")。

.classpathファイル:

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

この問題の解決方法pom.xmlファイルでクラス出力フォルダーを「bin/classes」として明示的に指定してください

pom.xmlファイル:

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