web-dev-qa-db-ja.com

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

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」を追加し、「Order and Export」の先頭に移動しましたが、それでも同じエラーが発生しました。

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

91
Phito

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

72

この次の方法がうまくいきました。 projectを右クリックして、propertiesを選択します。 [プロパティ]パネルが開きます。左側のメニューからJava Build Path-> Order and Exportに移動します。以下のリストから、"Android Dependencies"の横のチェックボックスをオフにします。最後にclean your projectを実行します。

うまくいけばいい

32
Chris

Android St​​udioでこの問題を抱えている人にとっては、マージ後に同じ問題が発生し、何らかの理由で、cleanおよびinvalidate cash/restart操作の後でも持続しました。

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

./gradlew assemble clean
./gradlew assemble

私が経験しなければならなかった時間の無駄と欲求不満を誰かが救うことを願っています。

13
Iman Akbari

Eclipseを使用している場合は、Project-> Cleanを試してください。

9
Danilo Silva

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

1)相対パスの代わりにマニフェスト内のアクティビティのフルパス。

2) 'build'フォルダーを削除し、プロジェクトを削除します。

8

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

7
pioneerBhawna

マルチデックスを有効にしている人はこれを書いてください

内部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">
6
Manohar Reddy

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

6
vovahost

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

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

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


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

ApkをAndroid Studioにドラッグアンドドロップするだけです。 apk Explorerでdexファイルを確認できるはずです。

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


別の代替手段はdexdumpです:

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

Android-sdk/build-tools/27.0.3/dexdump

Windowsユーザーの場合は、この tool を参照してください。

5
BenBenMushi

私の場合、プロダクションミニフィケーションプロセスで、プロダクションapkからいくつかの重要なクラスが削除されました。

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

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

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

3
Piotr Miller

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

乾杯:-)

3
dheeran

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

2
Price

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

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

うまくいきますように〜

2
weiweia

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

apply plugin: 'kotlin-Android'

モジュールのgradleファイルの先頭へ。 Android St​​udioは、新しいモジュールを作成したときにこの行を追加しないため、私のように時間を浪費する可能性があります。

1
savepopulation

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

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

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

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

これがこの問題を経験している人の助けになることを願っています。

1
GoranZarkovic

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

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

1
Vincent Hubert

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

しかし:ビルドツールはまだAndroid 4.3.1からのものでしたまだ走った。

そのため、単純な修正は、Android SDK Build Tools 18のものだけではなく、最新のAndroid SDK Build Tools 21.1.2を使用することでした。

そのため、犯人はAppcompatライブラリのようで、Actionbarの下位互換性のために使用しています。

ちなみに:appcompatライブラリを使用して、設定/修正する必要がありました:$SDKInstallDIR$\Android\android-sdk\extras\Android\support\v7\appcompat\project.properties target=Android-21(他の便利な投稿で推奨され、デフォルトで19の値があります)

1
Peter Rudnik

ここで言及した解決策-> Multidex Issue solution 私のために働いた。以下は、アプリケーションコンテキストに追加する必要があるものです。

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

私は同じ問題に直面し、次のことを実行して解決しました。

ビルドメニューから選択

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

2-ビルドAPK。

1
Aaeb

誰かが私と同じ問題に直面した場合に備えて、ここで答えを提案することはできません。

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

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

0
JacksOnF1re

私はかなり長い間この問題を抱えていましたが、他の皆と同じように、上記の答えは私のプロジェクトには当てはまりませんでした。

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

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

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

0
user3906863

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

0
Kameswari

このエラーはAndroid Studioでデバイスでデバッグを試みたときにAPI 2で見つけたので、Android St​​udioを確認したところ、iはこのAPI 23バージョンをインストールしていません。インストール後、問題を解決しました。

0

Java.lang.RuntimeException:アプリケーションcom.Android.tools.fd.runtime.BootstrapApplicationをインスタンス化できません:Java.lang.ClassNotFoundException:パス上のクラス「com.Android.tools.fd.runtime.BootstrapApplication」が見つかりませんでした:/ data/app.apk(Android 4.3、4.1)

アプリケーションcom.Android.tools.fd.runtime.BootstrapApplicationをインスタンス化できません:Java.lang.ClassNotFoundException:com.Android.tools.fd.runtime.BootstrapApplication(このエラーのように直面しているLollipop iamの下)

インスタントランを無効にするには、以下の手順に従ってAndroid studioでインスタントランを無効にします「インスタントランを有効にする」

0
Kishore Reddy

私たちの場合、Vagrantバージョンをコンパイルしたいと思いましたが、同じエラーがありました。 [ビルド]メニューのclean projectrebuild projectで修正しました

0
Rafael

私はこの問題を何度か経験しましたが、多くの場合、依存関係に関して明らかに悪いことはしませんでした。

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

指定されたクラスが見つからないわけではありませんが、スーパークラスがないためロードできません。

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

0
michalbrz

この問題はいくつかの原因で発生しましたが、スタックトレース「**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
Elenasys

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

0
bran.io

私は同じ問題に遭遇しました。最初にAndroidプロジェクトフォルダーのビルドフォルダーとアプリフォルダーのビルドフォルダーを削除して解決しました。その後、プロジェクトをクリーンアップしてビルドします。

0
Deepak PK

同じ問題がありました。 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">

これをバージョンコード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は低いversionNameと高いversionCodeを好まないのでしょうか?

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

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

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

0
PeterH

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

0

アプリをビルドしてAndroid 8.1.0(API 26)電話にインストールしようとしたときに、この問題に直面しました。

唯一の理由は、applicationファイルのmanifestタグにAndroid:hasCode="false"を追加したことです。ただし、数か月前に試したときに同じコードでAPI 24で機能しました(STRANGE?)。

その属性を削除すると、問題はなくなります。

0
Lei Guo

今日も同じ問題を抱えていました。そして、上記の解決策をすべて試しましたが、何もうまくいきませんでした。それから私はしばらく過ごし、その理由を見つけました。ここで共有している他の開発者の時間も節約できると思いました。問題は間違ったパッケージ名にありました。私はMVPアーキテクチャを使用していたため、アクティビティをviewパッケージに保存しました。そして、他のプロジェクトからメインクラスをコピーしました。これがキャッチでした。 xmlでは、メインアクティビティは外側にある別のパッケージを参照していました。パッケージにビューディレクトリ(MVP階層レベル)が含まれていませんでした。それからマニフェストもチェックインしました。私がそこでも見つけた同じ問題。そこで、アクティビティのフルパス(パッケージ名)を提供しました(MVPのビューディレクトリ/パッケージまで、すべてのアクティビティを保持しました)。これで私の問題が解決しました。他の人にも役立つことを願っています。

0
Abdul Waheed

私も同じ問題に直面しました。次のようなことをすることでこれを解決できます

1-アプリをアンインストールします。

2-プロジェクトを再構築します。

3-プロジェクトをきれいにします。

4-ファイルからプロジェクトを無効にして再起動します->無効にして再起動します。

0
Atif Mukhtiar