web-dev-qa-db-ja.com

Android Studio:ClassNotFoundException

1週間以上アプリを使用していて、突然、

11-12 07:59:17.860    1653-1653/nl.test.myapp E/AndroidRuntime﹕ FATAL EXCEPTION: main
Java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{nl.test.MyApp/nl.test.MyApp.MainActivity}: Java.lang.ClassNotFoundException: Didn't find class "nl.test.myapp.MainActivity" on path: DexPathList[[Zip file "/data/app/nl.test.myapp-2.apk"],nativeLibraryDirectories=[/data/app-lib/nl.test.myapp-2, /system/lib]]
        at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2137)
        at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2261)
        at Android.app.ActivityThread.access$600(ActivityThread.Java:141)
        at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1256)
        at Android.os.Handler.dispatchMessage(Handler.Java:99)
        at Android.os.Looper.loop(Looper.Java:137)
        at Android.app.ActivityThread.main(ActivityThread.Java:5103)
        at Java.lang.reflect.Method.invokeNative(Native Method)
        at Java.lang.reflect.Method.invoke(Method.Java:525)
        at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:737)
        at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:553)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: Java.lang.ClassNotFoundException: Didn't find class "nl.test.myapp.MainActivity" on path: DexPathList[[Zip file "/data/app/nl.test.MyApp-2.apk"],nativeLibraryDirectories=[/data/app-lib/nl.test.MyApp-2, /system/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.Java:53)
        at Java.lang.ClassLoader.loadClass(ClassLoader.Java:501)
        at Java.lang.ClassLoader.loadClass(ClassLoader.Java:461)
        at Android.app.Instrumentation.newActivity(Instrumentation.Java:1061)
        at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2128)
        at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2261)
        at Android.app.ActivityThread.access$600(ActivityThread.Java:141)
        at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1256)
        at Android.os.Handler.dispatchMessage(Handler.Java:99)
        at Android.os.Looper.loop(Looper.Java:137)
        at Android.app.ActivityThread.main(ActivityThread.Java:5103)
        at Java.lang.reflect.Method.invokeNative(Native Method)
        at Java.lang.reflect.Method.invoke(Method.Java:525)
        at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:737)
        at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:553)
        at dalvik.system.NativeStart.main(Native Method)

ここに私のAndroidManifest.xmlがあります:

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

    <uses-sdk
        Android:minSdkVersion="7"
        Android:targetSdkVersion="19" />

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

    <application
        Android:allowBackup="true"
        Android:icon="@drawable/ic_launcher"
        Android:label="@string/app_name"
        Android:theme="@style/AppTheme" >
        <activity
            Android:name="nl.test.myapp.MainActivity"
            Android:label="@string/app_name" >
            <intent-filter>
                <action Android:name="Android.intent.action.MAIN" />
                <category Android:name="Android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity Android:name=".welcomewizard.WelcomeWizardIntroPage"
            Android:label="@string/app_name" />

        <activity Android:name=".welcomewizard.WelcomeWizardPage1"
            Android:label="@string/app_name" />

        <activity Android:name=".welcomewizard.WelcomeWizardPage2"
            Android:label="@string/app_name" />

        <activity Android:name=".welcomewizard.WelcomeWizardPage3"
            Android:label="@string/app_name" />

        <activity Android:name=".welcomewizard.WelcomeWizardPage4"
            Android:label="@string/app_name" />

        <activity Android:name=".welcomewizard.WelcomeWizardFinishPage"
            Android:label="@string/app_name" />

        <activity Android:name=".CompanySelectorActivity"
            Android:label="@string/compsel_actionbarlabel" />
    </application>

</manifest>

これは、R.Java(ビューのIDが正しくない場合)でいくつかの問題が発生した後に発生していました。プロジェクトを再構築した後、この問題が発生しました

私はすでにIDE File-menuでInvalidate Cashes/restartを試しました

更新14:51:これは私のcompiler.xmlファイルです:

<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="CompilerConfiguration">
    <option name="DEFAULT_COMPILER" value="Javac" />
    <resourceExtensions />
    <wildcardResourcePatterns>
      <entry name="!?*.Java" />
      <entry name="!?*.form" />
      <entry name="!?*.class" />
      <entry name="!?*.groovy" />
      <entry name="!?*.scala" />
      <entry name="!?*.flex" />
      <entry name="!?*.kt" />
      <entry name="!?*.clj" />
    </wildcardResourcePatterns>
    <annotationProcessing>
      <profile default="true" name="Default" enabled="false">
        <processorPath useClasspath="true" />
      </profile>
    </annotationProcessing>
  </component>
</project>

私のMainActivity.Javaファイル(\ src\main\Java\nl\test\myapp\MainActivity.Java):

package nl.test.myapp;

import Android.annotation.TargetApi;
import Android.content.Intent;
import Android.os.Build;
import Android.os.Bundle;
import Android.support.v7.app.ActionBarActivity;
import Android.view.Menu;
import Android.widget.RelativeLayout;

import nl.test.myapp.welcomewizard.WelcomeWizardIntroPage;

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        setBackground(R.drawable.background_grey);

        Intent intent = new Intent(this, WelcomeWizardIntroPage.class);
        startActivity(intent);
        finish();
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    private void setBackground(int drawable){
        int currentApiVersion = Android.os.Build.VERSION.SDK_INT;
        if(currentApiVersion >= Android.os.Build.VERSION_CODES.JELLY_BEAN){
            RelativeLayout layout = (RelativeLayout) findViewById(R.id.layout_main);
            layout.setBackground(getResources().getDrawable(drawable));
        }
    }
}
12
patrick

Android studioで新しいプロジェクトを作成し、古いプロジェクトからすべてを新しいプロジェクトにコピーしました。コードに変更を加えることなく、再び動作します。

5
patrick

閉じるAndroid studio。プロジェクトフォルダに移動します。intelliJ(Android Studio)に関連するすべてのファイルを削除します。

  • .idea(フォルダ)
  • * .imi(ファイル)

また、パッケージ名がAndroid manifest.xml。

次に、プロジェクトを再インポートします。

これは私がルートパッケージの名前を変更し、IntelliJ(Androidスタジオ)がこれを追跡しなかったために起こりました。

7
user2415486

これに遭遇しました。私のアプリは問題なく動作していましたが、ある日、これらのClassNotFoundExceptionsが発生し始めました。私のコードはまったく変更されていません。

私が知る限り、Android Studioのビルドのバグでした。最近、カナリアチャンネルの最新リリースに更新しました。

開発チャネルで以前のリリースに切り替えると、再び機能するようになりました。

  1. 設定/外観と動作/システム設定/更新に移動します
  2. Dev Channelに変更して今すぐ確認してください。
2
ktusznio

私は同じ問題を抱えていましたが、最終的な方法で失敗しました。 logcat出力のdalvikvmエラーを必ず確認してくださいbefore致命的な例外。私はあなたに問題についていくつかのヒントを与えます。私の場合、基本クラスで既に定義されている最終メソッド(isResumed)があり、ランタイムクラッシュを引き起こしていました。コンパイル時に文句を言っていませんでした。

ログを確認します。

E/dalvikvm( 9984): Method Lcom/your/package/ui/SomeActivity;.isResumed overrides final Landroid/app/Activity;.isResumed
W/dalvikvm( 9984): failed creating vtable
...
D/AndroidRuntime( 9962): Shutting down VM
...
E/AndroidRuntime(10065): FATAL EXCEPTION: main
E/AndroidRuntime(10065): Process: com.yourpackage.ui, PID: 10065
E/AndroidRuntime(10065): Java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.yourpackage.ui/com.yourpackage.ui.HomeActivity}: Java.lang.ClassNotFoundException: Didn't find class "com.yourpackage.ui.HomeActivity" on path: DexPathList[[Zip file "/data/app/com.yourpackage.ui-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.yourpackage.ui-2, /vendor/lib, /system/lib]]
...
2
tdevaux

これは私にも起こりました、そしてここの投稿のどれも助けにはなりませんでした。また、ルートパッケージの名前を変更したことが原因で問題が発生しました。 ClassNotFoundExceptionが、パッケージへの古いパスであるDexPathListを表示していました。原因は「build.gradle(モジュール:アプリ)」と呼ばれる私のGradleスクリプトにあることがわかりました。これを新しいパッケージ名に変更し、gradle syncを実行すると、すべてが機能しました。

1
Bert Baker

同様の問題がありました。以前は「メモリが足りません」というメッセージが表示され、アプリケーションのアップロードプロセスが完了せず、dexDebugでエラーが発生して停止したことを思い出しました。その後、十分なメモリを解放しましたが、アプリケーションはClassNotFoundExceptionで開始しました。
私にとってうまくいった解決策は、プロジェクト内のすべての「ビルド」フォルダーを削除することでした。十分なメモリがない場合、gradleは破損したファイルを「build」フォルダに置くことができると思います。

1
Denis

Multidexのメカニズムを確認できます。その理由は、メソッド番号がオーバーフローしている可能性があります。

  1. MultiDex.install(this);を追加します。あなたのアプリケーションに:

    @Override
    protected void attachBaseContext(Context base) {
         super.attachBaseContext(base);
         MultiDex.install(this);
    }
    
  2. そして追加

    afterEvaluate {
       tasks.matching {
           it.name.startsWith('dex')
       }.each { dx ->
           if (dx.additionalParameters == null) {
               dx.additionalParameters = []
           }
           dx.additionalParameters += '--multi-dex' // enable multidex
       }
    }
    

アプリモジュールのgradle.build

1
Yisu Zhang

私はこれがあなたを助けることを知りません。

<application
        Android:allowBackup="true"
        Android:icon="@drawable/ic_launcher"
        Android:label="@string/app_name"
        Android:theme="@style/Theme.AppCompat" >

       <activity
            Android:name=".MainActivity"
            Android:label="@string/app_name" >
            <intent-filter>
                <action Android:name="Android.intent.action.MAIN" />
                <category Android:name="Android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
0
Manivannan

名前空間のタイプミスがどこかにあるようです。 MyAppを検索し、myappに変更します。

0

私の場合、それはプロジェクト内のAndroid.app.Applicationのマニフェスト宣言とモジュール内の実際のコードでした。

0
kreker
   try: 
   <activity
        Android:name=".MainActivity"
        Android:label="@string/app_name" >
        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />
            <category Android:name="Android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
0
TeeTracker

私があなたのログで見ることができるように、

nativeLibraryDirectories=[/data/app-lib/nl.test.myapp-2, /system/lib

そのため、liblibsに変更できます。これを行ったところ、問題は解決しました。

プロジェクトのプロパティに移動し、Javaビルドパス、そこからすべてのライブラリを削除します。このエラーは再び表示されません。:)

0
hemantsb
0
Adrian Lubitz

Android Studioを使用する場合は、Javaクラスを含む「src」フォルダが「ソースルート」としてマークされていることを確認してください。それ以外の場合は、 APKにそれを。

0
Behnam Nikbakht

Androidライブラリを作成している場合、_implementation project_キーワードを使用して、ライブラリをアプリのbuild.gradleにインポートするのを忘れている可能性があります。

dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) testImplementation 'junit:junit:4.12' implementation 'com.Android.support:design:27.0.2' implementation 'com.Android.support:mediarouter-v7:27.0.2' implementation project(':mylib-module:mymodule') implementation 'com.google.firebase:firebase-core:10.0.1' }

お役に立てれば :)

0
n3wbie

ビルドメニューおよびクリーンプロジェクトに移動します。

上記の解決策は私にとって完全にうまくいきました。

0

MainActivity.Javaはコンパイルから除外されているため、このクラスは.apkに含まれていません。行を削除:

<file url="file://$PROJECT_DIR$/src/nl/test/MyApp.Java" />

.idea/compiler.xmlファイルのexcludeFromCompileセクションから(またはIDE設定からこれを行うことができます).

ソース

0
Kalai.G