Android ClassNotFoundException:パス上にクラスが見つかりませんでした


97
10-22 15:29:40.897: E/AndroidRuntime(2561): FATAL EXCEPTION: main
10-22 15:29:40.897: E/AndroidRuntime(2561): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.gvg.simid/com.gvg.simid.Login}: java.lang.ClassNotFoundException: Didn't find class "com.gvg.simid.Login" on path: DexPathList[[zip file "/data/app/com.gvg.simid-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.gvg.simid-1, /vendor/lib, /system/lib]]
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2137)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.os.Looper.loop(Looper.java:137)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.app.ActivityThread.main(ActivityThread.java:5103)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at java.lang.reflect.Method.invokeNative(Native Method)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at java.lang.reflect.Method.invoke(Method.java:525)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at dalvik.system.NativeStart.main(Native Method)
10-22 15:29:40.897: E/AndroidRuntime(2561): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.gvg.simid.Login" on path: DexPathList[[zip file "/data/app/com.gvg.simid-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.gvg.simid-1, /vendor/lib, /system/lib]]
10-22 15:29:40.897: E/AndroidRuntime(2561):     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:53)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2128)
10-22 15:29:40.897: E/AndroidRuntime(2561):     ... 11 more

それがマニフェストに正しくリストされているので、何が原因であるのか本当にわかりません:

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

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_LOGS" />
    <uses-permission android:name="android.permission.READ_OWNER_DATA" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_OWNER_DATA" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />

    <uses-feature android:name="android.hardware.usb.host" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.gvg.simid.Login"
            android:label="@string/app_name" 
            android:screenOrientation="landscape">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

ビルドパスに「Android Private Libraries」も追加し、「注文とエクスポート」の一番上に移動しましたが、それでも同じエラーが発生しました。

編集:プロジェクトを完全に再構築しましたが、エラーを再現できませんでした。何が原因かわからない。


2
プロガードを使用していますか?
Juangcg 2013年

Proguardが有効になっていません。
Phito 2013年

この記事をチェックしてください:stackoverflow.com/questions/10866431/...
Juangcg

代わりにandroid:nameで「.Login」を試してください。Androidは、プレフィックスを検出できない場合、プレフィックスの残りを単独で追加します。Eclipseでの奇妙な解析の問題である可能性があります
Darryl Bayliss

@Juangcg私はこれを作成する前にその投稿を読みましたが、残念ながらそこから試してみたすべてがうまくいきませんでした。
ピト2013年

回答:


76

私のプロジェクトでも同じ問題がありました。これは、私のプロジェクトとプロジェクトに追加したライブラリプロジェクトの間のAndroidサポートライブラリバージョンの競合が原因で発生しました。同じバージョンのandroidサポートライブラリをプロジェクトに含め、ライブラリプロジェクトに組み込み、クリーンビルド ...すべてが機能します...


3
ありがとう!!!もうやったことは確かですが、チェックしてバージョンが違う!どうもありがとう!
Rodrigo Venancio 2014

2
次回SDKを「更新」するときに覚えておくためにこれにコメントします。この回答を見てください
エンリケサンマルティン14

1
サポートライブラリを使用しないと問題が発生する理由は何ですか?
ブッダ

33

この次の方法は私のために働きました

  • を右クリックしてproject選択properties
  • 「プロパティ」パネルが開きます。左側のメニューからJava Build Path->に移動しますOrder and Export
  • 下のリストで、横にあるチェックボックスをオフにします "Android Dependencies"
  • 最後に clean your projectに実行します

8
それでうまくいきました。「Android Dependencies」の意味は何ですか、なぜこの特定の場合に役立つのですか?
Oleg Gryb 2014

私には完璧に働きました!どうもありがとう!
prajitdas 2014

7
これらの指示は日食ですか?Androidスタジオでは、これらの手順を実行できません。私は何projectですか?どういう意味ですか?
Adam Johns

1
はい、これらの手順は日食用です
Chris

2
このリンクは、Androidのスタジオのためのステップがあるstackoverflow.com/questions/18533054/...を
ジョセフ・Selvaraj

13

Android Studioでこの問題が発生している方のために、私はマージ後に同じ問題を抱えていました。何らかの理由で、問題が解決しなかった後cleaninvalidate cash/restart操作が狂ってしまいました。

結局、コマンドラインから一度gradle buildを実行することで修正できます。プロジェクトディレクトリで以下を実行するだけです。

./gradlew assemble clean
./gradlew assemble

私はそれが私が経験しなければならなかった時間の無駄とフラストレーションを誰かが救うことを願っています。


私にも働きました
davedavedave '29

12

私は同じ問題を抱えていました、これは私のために働きました

1)相対パスの代わりにメインフェストでの活動の完全パス。

2)「ビルド」フォルダを削除し、プロジェクトをクリーンアップします。


ビルドフォルダを削除するのがうまくいきました。この問題で数時間失いました。ありがとう
Guy S

私も働いた。ありがとう。
Dushyant Suthar 2017

これは本当の取引です。XD
noob-Sci-Bot


7

これは、APPのビルドパスを変更すると発生します。これは、ライブラリまたは.jarファイルを追加、削除、または変更する場合に発生します。最良の解決策は、Eclipse再起動することです。


7

新規Library ProjectとしてモジュールとしてAndroidプロジェクトに追加Kotlinし、ライブラリで使用している場合は、追加することを忘れないでください。

apply plugin: 'kotlin-android'

モジュールのGradleファイルの先頭に移動します。Android Studioは、新しいモジュールを作成したときにこの行を追加しません。これは、私のように時間を浪費する可能性があります。

編集:しばらくして、私はこの問題に再び苦労しましたが、今回はプロジェクトへの依存関係としてモジュールを追加するのを忘れました。:)


私のためにそれを解決し、私は答えを投稿したかっただけです。誰がソリューションのSOの2ページにスキップしますか?
久野

この問題は、Javaライブラリプロジェクトを使用すると発生します...この解決策で問題が解決しました
Devrath

6

Android Studio 2.0以降で新しいInstant Run機能を使用しているときにこのエラーが発生する場合、これは彼らの側のある種のバグです。
これを修正するには、デバイス/エミュレーターでアプリを手動で停止する必要があります。アプリが停止していない場合は、Android Studioからを選択しますBuildRebuild Project
次に、[ 実行 ]ボタンをクリックするか、Shift + F10キーを押します


6

multidex enableを持っている人はこれを書いてください

build.gradle

apply plugin: 'com.android.application'

android {
 defaultConfig {
      multiDexEnabled true
  }
 dexOptions {
        javaMaxHeapSize "4g"
    }
}

dependencies {
    compile 'com.android.support:appcompat-v7:+'
    compile 'com.google.android.gms:play-services:+'
    compile 'com.android.support:multidex:1.0.1'
}

EnableMultiDex以下のようなクラスを書く

import android.content.Context;
import android.support.multidex.MultiDexApplication;

public class EnableMultiDex extends MultiDexApplication {
    private static EnableMultiDex enableMultiDex;
    public static Context context;

    public EnableMultiDex(){
        enableMultiDex=this;
    }

    public static EnableMultiDex getEnableMultiDexApp() {
        return enableMultiDex;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();

    }
}

そして、AndroidManifest.xmlこのclassNameをApplicationタグ内に書き込みます

 <application
    android:name="YourPakageName.EnableMultiDex"
    android:hardwareAccelerated="true"
    android:icon="@drawable/wowio_launch_logo"
    android:label="@string/app_name"
    android:largeHeap="true"
    tools:node="replace">

あぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁ:) :)
Sachin Varma 2017

それが助けてくれてうれしい:)
Manohar Reddy 2017

2
主なポイントは、アプリケーションをMultiDexApplicationクラスではなくクラスから拡張することですApplication
VSB 2017年

ありがとう。マニフェストにはすでにいくつかのアプリケーションがありました。から拡張しMultiDexApplication、Android 4.4では例外がなくなりました。
CoolMind 2018

6

Android 4.4以前でMultidexを使用している場合、問題はアクティビティクラスが2番目のdexファイルにあるため、androidシステムで見つからないことである可能性があります。

アクティビティクラスをメインのdexファイルに保持するには、次のページを参照してください。

https://developer.android.com/studio/build/multidex.html#keep


dexファイルにあるクラスを見つけるには、Android Studioを使用します。

APKをAndroid Studioにドラッグアンドドロップするだけです。apkエクスプローラーでdexファイルを表示できるはずです。

次に、dexファイルを選択して、中にあるクラスを確認します。


別の選択肢はdexdumpです。

次の場所にあるdexdumpコマンドを使用して、apkに含まれるdexファイルの内容を確認できます。

android-sdk / build-tools / 27.0.3 / dexdump

Windowsユーザーの場合、プロセスを簡単にするために作成したこのツールを参照してください


1
独自のツールをリンクするときは、必ずそれを所有していることを宣言してください
LW001

5

私の場合、プロダクションapkからいくつかの重要なクラスを削除したのは、プロガードの縮小プロセスでした。

解決策は、proguard-rules.proファイルを編集して以下を追加することでした。

-keep class com.someimportant3rdpartypackage.** { *; }

3

1)プロジェクトルートの下にlibsフォルダーを作成します
2)jarファイルをコピーしてそこに貼り付けます
3)ビルドパスを構成します(jarを追加します)
4)

cheersをクリーンアップして実行します:-)


3

信じられないかもしれませんが、ここで見つけたほぼすべての答えをstackoverflowで試しました。マシンを再起動するまで、何も役に立ちませんでした。私のAndroid StudioはUbuntu 16.04 LTSで動作します。


ここでも同じです。すべて試し、コメントに従って再起動します。出力に、ビルドフォルダー全体を消去したにもかかわらず、「リコールできなかった」というリファクタリングされたクラス名への参照があることを確認しました
。androidを

2

ビューを拡張するクラスを定義したときに、レイアウトファイルでこのカスタムビューを間違った名前で参照したときに、このエラーに一度直面しました。の代わりに<com.example.customview/><com.customview/>XMLレイアウトファイルに含めました。


2

私は同じ問題に直面し、次のようにしてそれを解決しました:

ビルドメニューから選択

1-クリーンプロジェクト。

2- APKをビルドします。


私は常にSOの解決策を探すために何時間も費やし、クリーン->ビルドであることが判明しました。
Shishir Shetty

2

同じ問題に遭遇し、サンプルコードが「src」ディレクトリではなく「java」ディレクトリに置かれていることに気付きました。コードをsrcに移動した後、問題は解決しました。

また、アプリディレクトリが複数のフォルダに分割されていることを確認してください。例えばで/main/com/site/appname/はない/main/com.site.appname/

うまくいきますように〜


あなたは私が頭に抱えていた問題を釘付けにした!十分な睡眠が取れず、クラスがJavaフォルダーにあることにさえ気づかなかった:)
bran.io

2

私は同じ問題に直面し、多くの作業と検索の結果、解決策を見つけました。プロジェクトをクリーンアップしてAPKをビルドしたところです。-Build-> Clean Project -Build-> Build APK(s)役立つことを願っています...


1

最近この問題が発生し、Android Studio 0.8.4を使用しています

問題は、main.xmlという名前のXMLメニューレイアウトファイルの名前を変更することにしたことです。

それを右クリックして、「リファクタリング」->「名前の変更」を選択します。名前を変更する前に、[コメントと文字列で検索]をオフにして、リファクタリングを押してください。

私のファイルは元々'main'という名前だったので、パスはとして定義されて'src/main/java'いるため、app.imlとbuild.gradleのクリティカルパス、主にbuild.gradleのjava.srcDirsの名前を変更しました。

これがこの問題が発生している可能性があるすべての人に役立つことを願っています。


1

バージョン18からアップグレードした後、この問題が発生しました。アップグレード後、次のものがありました。プロジェクトのビルドターゲットは5.01、targetSDKVersion = 21でした。

しかし、 ビルドツールはまだAndroid 4.3.1からのものです(18)私が気づいたのは、ActionBarActivityからアクティビティを派生させていたアプリが、まだ実行されていないアプリで上記のエラーでクラッシュしたことです。

したがって、単純な修正は 、Android SDKビルドツール18だけではなく、最新のAndroid SDKビルドツール21.1.2を使用することでした。

だから、犯人は私がActionbarの後方互換性のために使用するAppcompatライブラリのようです。

そして、方法によって:APPCOMPATライブラリを使用して、私はセット/修正しなければならなかった $SDKInstallDIR$\Android\android-sdk\extras\android\support\v7\appcompat\project.properties target=android-21)(他のいくつかの便利なポストに推奨されたと、デフォルトでは19の値を有します)


1

Windowsでも同じ問題が発生しました。プロジェクトへのパスの名前をスペースを含む名前に変更しました。

プロジェクトへのパスにスペースが含まれていないことを確認してください。


何の話をしているの?
Quality Catalyst

1

ここで言及されている解決策-> Multidex Issue解決策がうまくいきました。以下は、アプリケーションコンテキストに追加する必要があるものです。

@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}

0

いくつかの原因で発生したこの問題がありましたが、スタックトレース " **Unable to instantiate activity ComponentInfo{...}: java.lang.ClassNotFoundException: Didn't find class "..." on path: DexPathList[[**"にこれが表示されます.classpath。動作が停止する前に、違いが見つかりました。

 <?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
    <classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
    <classpathentry kind="src" path="gen"/>
    <classpathentry kind="output" path="bin/classes"/>
</classpath>

私は行を追加しました:

<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>

これが最終版です。

  <?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
    <classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
    <classpathentry kind="src" path="gen"/>
    <classpathentry kind="output" path="bin/classes"/>
</classpath>

今ではうまくいきます!=)


0

私はまったく同じ問題を抱えていました。@weiweiaが示唆したように、コードをjavaディレクトリからsrcに移動するとうまくいきました。また、Androidの依存関係をプロジェクトから削除しました->プロパティ-> Javaビルドパス->注文とエクスポート、ライブラリ画面のみをAndroid画面に含めるようにしました。


0

私はしばらくの間この問題を抱えていましたが、他の皆と同様に、上記の答えは私のプロジェクトには当てはまりませんでした。

私のプロジェクトでは、プロジェクトをプロジェクトにリンクしており、他のプロジェクトのコードが実行されるたびにClassDefNotFoundErrorをスローしていました。

これが私の解決策でした。私は自分のプロジェクトのプロジェクトプロパティとJavaビルドパスに行きました。他のプロジェクトのsrc-folderから「Source」タブと「link source」を自分のプロジェクトに押して、新しいフォルダーに「core-src」という名前を付けました。

このソリューションが誰かを助けることを願っています


0

同じ問題がありました。Xamarin.Androidを使用しています。

私の場合の問題は、versionCodeとversionNameを変更したことです。

次のように設定しても問題ありませんでした。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="pac.ka.ge" android:versionCode="1" android:versionName="1.0" android:installLocation="auto">

これを次のように変更すると問題が発生しました(versionCode 2およびversionName 0.0.1):

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package=" pac.ka.ge " android:versionCode="2" android:versionName="0.0.1" android:installLocation="auto">

次のように、versionCode 2とversionName 1.0.0.1に変更することで問題を修正しました。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package=" pac.ka.ge " android:versionCode="2" android:versionName="1.0.0.1" android:installLocation="auto">

なぜこれが問題だったのかわかりません。おそらくAndroidは、versionCodeがより高く、versionCodeがより高いのが嫌いですか?

私はhttp://developer.android.com/guide/topics/manifest/manifest-element.html#vnameで以下を見つけました

android:versionCode内部バージョン番号。この番号は、あるバージョンが別のバージョンよりも新しいかどうかを判断するためにのみ使用され、数値が大きいほど、より新しいバージョンを示します。これはユーザーに表示されるバージョン番号ではありません。その番号は、versionName属性によって設定されます。値は、「100」などの整数として設定する必要があります。後続の各バージョンの番号が大きい限り、好きなように定義できます。たとえば、ビルド番号である可能性があります。または、「x」と「y」を下位16ビットと上位16ビットに別々にエンコードして、「xy」形式のバージョン番号を整数に変換することもできます。または、新しいバージョンがリリースされるたびに番号を1ずつ増やすこともできます。

android:versionNameユーザーに表示されるバージョン番号。この属性は、未加工の文字列または文字列リソースへの参照として設定できます。文字列には、ユーザーに表示する以外の目的はありません。versionCode属性は、内部で使用される重要なバージョン番号を保持します。


0

誰かが私と同じ問題に直面し、ここでの提案の答えが役に立たない場合に備えて。

私にとっての原因は、Androidスタジオのリファクタリングにバグがあることでした。内部クラスをクラスの外に移動しました。これはビューであり、直接パスが設定されたxmlも持っていました。このパスはスタジオによってリファクタリングされません!そして、エラーはスローされません。

これが誰にも役立つことを願っています。乾杯。


0

私たちの場合、Vagrantバージョンをコンパイルしたかったのですが、同じエラーが発生しました。私たちは、ことによってそれを固定clean projectし、rebuild project[ビルド]メニューで


0

デバイスを再起動してアプリを実行しました。問題なく動作しました。これが誰かを助けることを願っています:)


0

API 23を備えたデバイスでデバッグしようとしたときにAndroid Studioでこのエラーを見つけたので、Android Studioを確認したところ、このAPI 23バージョンをインストールしていなかったことがわかりました。インストール後、問題を解決しました。


0

私はこの問題を数回経験しましたが、依存関係に関して明らかに間違っていることはしませんでした。

この「見つかりません」クラスが最終APKに存在するかどうかを確認することは常に良い考えです。もしそうなら、私の場合に起こったように、問題は通常:

特定のクラスが見つからないというわけではありませんが、そのスーパークラスがないためにロードできません。

拡張するクラスが利用可能かどうかを確認してから、それに応じてビルドスクリプトまたは依存関係を修正してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.