web-dev-qa-db-ja.com

パスにクラスが見つかりませんでした:DexPathList?

USBを使用して実際のデバイスでAndroid studio。問題を解決する正しい方法を見つけられません。エラーは以下のとおりです。

FATAL EXCEPTION: main Process: com.w3xplorers.cmch,PID: 17715                                                                           Java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.w3xplorers.cmch/com.w3xplorers.cmch.MainActivity}: Java.lang.ClassNotFoundException: Didn't find class "com.w3xplorers.cmch.MainActivity" on path: DexPathList[[Zip file "/data/app/com.w3xplorers.cmch-1/base.apk"],nativeLibraryDirectories=[/data/app/com.w3xplorers.cmch-1/lib/arm, /system/lib, /vendor/lib, system/vendor/lib, system/vendor/lib/egl, system/lib/hw]]
    at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2395)
    at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2544)
    at Android.app.ActivityThread.access$900(ActivityThread.Java:150)
    at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1394)
    at Android.os.Handler.dispatchMessage(Handler.Java:102)
    at Android.os.Looper.loop(Looper.Java:168)
    at Android.app.ActivityThread.main(ActivityThread.Java:5845)
    at Java.lang.reflect.Method.invoke(Native Method)
    at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.Java:797)
    at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:687)
    Caused by: Java.lang.ClassNotFoundException: Didn't find class "com.w3xplorers.cmch.MainActivity" on path: DexPathList[[Zip file "/data/app/com.w3xplorers.cmch-1/base.apk"],nativeLibraryDirectories=[/data/app/com.w3xplorers.cmch-1/lib/arm, /system/lib, /vendor/lib, system/vendor/lib, system/vendor/lib/egl, system/lib/hw]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.Java:56)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:511)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:469)
    at Android.app.Instrumentation.newActivity(Instrumentation.Java:1085)
    at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2385)
    at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2544) 
    at Android.app.ActivityThread.access$900(ActivityThread.Java:150) 
    at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1394) 
    at Android.os.Handler.dispatchMessage(Handler.Java:102) 
    at Android.os.Looper.loop(Looper.Java:168) 
    at Android.app.ActivityThread.main(ActivityThread.Java:5845) 
    at Java.lang.reflect.Method.invoke(Native Method) 
    atcom.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:797) 
    at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:687)                                                                         Suppressed: Java.lang.ClassNotFoundException: com.w3xplorers.cmch.MainActivity
    at Java.lang.Class.classForName(Native Method)
    at Java.lang.BootClassLoader.findClass(ClassLoader.Java:781)
    at Java.lang.BootClassLoader.loadClass(ClassLoader.Java:841)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:504)                                                                                ... 12 more
    Caused by: Java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available

私のマニフェストは以下です:

`<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.w3xplorers.cmch">

<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="Android.permission.READ_PHONE_STATE" />
<uses-permission Android:name="Android.permission.READ_CONTACTS" />
<uses-permission Android:name="Android.permission.WRITE_CONTACTS" />
<uses-permission Android:name="Android.permission.SEND_SMS" />


<application
    Android:name="com.w3xplorers.cmch.EnableMultiDex"
    Android:allowBackup="true"
    Android:icon="@mipmap/ic_launcher"
    Android:label="@string/app_name"
    Android:roundIcon="@mipmap/ic_launcher_round"
    Android:supportsRtl="true"
    Android:theme="@style/AppTheme" >
    <activity
        Android:name="com.w3xplorers.cmch.MainActivity"
        Android:screenOrientation="portrait"
        Android:theme="@style/AppTheme.NoActionBar" >
        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />
            <category Android:name="Android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        Android:name="com.w3xplorers.cmch.HomeActivity"
        Android:screenOrientation="portrait"
        Android:theme="@style/AppTheme.NoActionBar" />
    <activity
        Android:name="com.w3xplorers.cmch.QuickSms"
        Android:screenOrientation="portrait"
        Android:theme="@style/AppTheme.NoActionBar" />
    <activity
        Android:name="com.w3xplorers.cmch.GroupSms"
        Android:screenOrientation="portrait"
        Android:theme="@style/AppTheme.NoActionBar" />
    <activity
        Android:name="com.w3xplorers.cmch.SelfSms"
        Android:screenOrientation="portrait"
        Android:theme="@style/AppTheme.NoActionBar" />
    <activity
        Android:name="com.w3xplorers.cmch.Contact"
        Android:screenOrientation="portrait"
        Android:theme="@style/AppTheme.NoActionBar" />
    <activity
        Android:name="com.w3xplorers.cmch.Favourite"
        Android:screenOrientation="portrait"
        Android:theme="@style/AppTheme.NoActionBar" />
    <activity
        Android:name="com.w3xplorers.cmch.Info"
        Android:screenOrientation="portrait"
        Android:theme="@style/AppTheme.NoActionBar" />
    <activity Android:name="com.w3xplorers.cmch.Dialog" />
</application>

</manifest>`

以下のGradle:

apply plugin: 'com.Android.application'

Android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
    applicationId "com.w3xplorers.cmch"
    minSdkVersion 13
    targetSdkVersion 25
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
    multiDexEnabled true
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
    }
}
}


dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.Android.support.test.espresso:espresso-core:2.2.2', 
{
    exclude group: 'com.Android.support', module: 'support-annotations'
})
compile 'com.Android.support:appcompat-v7:25.3.0'
compile 'com.Android.support.constraint:constraint-layout:1.0.0-alpha5'
compile 'com.Android.support:design:25.3.0'
compile 'com.andreabaccega:Android-form-edittext:1.0.3'
compile 'com.Android.volley:volley:1.0.0'
compile 'com.squareup.okhttp3:okhttp:3.3.1'
compile 'com.Android.support:multidex:1.0.1'
testCompile 'junit:junit:4.12'
}
19
Avijit

私の問題に対する完璧な解決策は見つかりませんでしたが、Google PlayにAPKをアップロードしてそこからダウンロードすると、アプリは正常に動作します。これは私が見つけた最も奇妙な解決策です。

1
Avijit

プロジェクトレベルbuild.gradleファイルに移動し、gradle依存関係のバージョンを2.3.よりも低いものに減らします。たとえば、use 2.2.

dependencies {
    classpath 'com.Android.tools.build:gradle:2.2.3'
    ....
}

その後、クリーン->ビルド->デバッグapkを他のデバイスにインストールします--->[〜#〜] ok [〜#〜] then!

8
ridoy

問題は、AndroidStudioが新しいAPKをコンパイルしてインストールする代わりに「Instant Run」を使用していることです。

「インスタントラン」をファイル->設定->ビルド、実行、展開->インスタントランから無効にします。

6

アプリケーションタグで、変更

Android:name="com.w3xplorers.cmch.EnableMultiDex"

Android:name="Android.support.multidex.MultiDexApplication" 

お役に立てれば :)

詳細情報:

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

公式ドキュメントに従う必要があります: https://developer.Android.com/studio/build/multidex.html#mdex-gradle

build.gradle:

dependencies {
  compile 'com.Android.support:multidex:1.0.1'
}
Android {
    defaultConfig {
        ...
        minSdkVersion 21 
        targetSdkVersion 26
        multiDexEnabled true
    }
    ...
}

YourAppクラス

public class MyApplication extends SomeOtherApplication {
  @Override
  protected void attachBaseContext(Context base) {
     super.attachBaseContext(base);
     MultiDex.install(this);
  }
}
3
Kirill Vashilo

あなたが言ったように、あなたはアプリをビルドし、USB経由で携帯電話にプッシュしました。それからあなたはビルドディレクトリからapkをコピーし、他のデバイスでプッシュして実行しようとしました。デバイスやエミュレータをターゲットにしたり、接続したりせずにapkをビルドしてください。つまり、デバイスを接続せずに端末からapkをビルドするということです。動作するか、何かが表示されます。

2
defaultConfig {

    minSdkVersion 14
    targetSdkVersion 21

    multiDexEnabled true
}

 dependencies {
     compile 'com.Android.support:multidex:1.0.1'
 }
Android {
    defaultConfig {
        ...
        minSdkVersion 15 
        targetSdkVersion 26
        multiDexEnabled true
    }
    ...
}

dependencies {
  compile 'com.Android.support:multidex:1.0.1'
}



public class MyApplication extends SomeOtherApplication {
  @Override
  protected void attachBaseContext(Context base) {
     super.attachBaseContext(base);
     MultiDex.install(this);
  }
}

アプリケーションをMultidex.install(this)にしないかもしれません。

2
tosslife

Build.gradleに追加します

defaultConfig { 
          multiDexEnabled true
 } 

依存関係も追加します

dependencies {
         compile 'com.Android.support:multidex:1.0.0'}
1
Smeet Hirekhan

インスタントラン機能を有効にしている可能性があるため、インスタントランの無効化を試してください。

ファイル->設定->ビルド、実行、展開->インスタントラン->インスタントランのチェックボックスのチェックを外す

1
Nikunj

私も同様の問題に直面しました。私の場合、以下を追加することで問題を解決しましたbuildTypes

dexOptions {
    javaMaxHeapSize "4g"
}

また使用される

defaultConfig { 
          multiDexEnabled true
 } 

そして

dependencies {
         compile 'com.Android.support:multidex:1.0.0'
}
1
Tamal

MainActivityがJavaではなくKotlinで記述されていることを確認できますか?

Kotlinを無効にし、Kotlinでアクティビティを作成すると、このエラーが発生しました。

0
MJ Studio

これに遭遇し、Kotlinを使用して計装テストを行う人々へ:

メソッド名のスペースはJVMテストでのみ機能し、notAndroid Instrumentation TestsJake Whartonによって記されている として、彼はこれは将来修正されるかもしれないと言った)

現時点で、次のようなテストを実行しようとすると:

@Test
fun `spaces should work in names`() {
}

テスト出力は言う:

テストは見つかりませんでした

そしてログには次のように書かれています:

テストの実行を開始しました

テストの実行に失敗しました:「プロセスがクラッシュしました」が原因で、計装の実行に失敗しました。

空のテストスイート。

Logcatはこの例外を出力しますが:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example, PID: 5424
    Java.lang.RuntimeException: Unable to instantiate instrumentation
    ComponentInfo{com.example.test/Android.support.test.runner.AndroidJUnitRunner}:
    Java.lang.ClassNotFoundException: Didn't find class
    "Android.support.test.runner.AndroidJUnitRunner"
    on path: DexPathList[[],nativeLibraryDirectories=[/system/lib, /vendor/lib]]
        at Android.app.ActivityThread.handleBindApplication(ActivityThread.Java:5730)
        at Android.app.ActivityThread.-wrap1(Unknown Source:0)
        at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1661)
        at Android.os.Handler.dispatchMessage(Handler.Java:105)
        at Android.os.Looper.loop(Looper.Java:164)
        at Android.app.ActivityThread.main(ActivityThread.Java:6541)
        at Java.lang.reflect.Method.invoke(Native Method)
        at com.Android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.Java:240)
        at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:767)
    Caused by: Java.lang.ClassNotFoundException: Didn't find class
    "Android.support.test.runner.AndroidJUnitRunner" on path:
    DexPathList[[],nativeLibraryDirectories=[/system/lib, /vendor/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.Java:93)
        at Java.lang.ClassLoader.loadClass(ClassLoader.Java:379)
        at Java.lang.ClassLoader.loadClass(ClassLoader.Java:312)
        at Android.app.ActivityThread.handleBindApplication(ActivityThread.Java:5728)
        at Android.app.ActivityThread.-wrap1(Unknown Source:0) 
        at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1661) 
        at Android.os.Handler.dispatchMessage(Handler.Java:105) 
        at Android.os.Looper.loop(Looper.Java:164) 
        at Android.app.ActivityThread.main(ActivityThread.Java:6541) 
        at Java.lang.reflect.Method.invoke(Native Method) 
        at com.Android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.Java:240) 
        at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:767)

ご覧のとおり、ここでのエラーはあまり役に立たないので、今すぐこの答えを見つけてください。解決策は簡単で、次のような有効な名前を使用します。

@Test
fun spaces_dontWorkInNames() {
}
0
arekolek

Mohaimanul Chowdhuryの答えを参照できます。カスタムアプリケーションクラスを使用している場合は、アプリケーションの拡張からMultiDexApplicationに変更します。

例えば

class YourApplication : Application()

class YourApplication : MultiDexApplication()

それは私の問題を修正しました

0
DTechnlogy

この問題を解決するのは私にはランダムに思えます。 Android:nameをAndroidからMultiDexに変更し、実行してから、独自のアプリに戻すだけです。

0
Pencilcheck

Androidスタジオファイルセクションで、プロジェクトをクリアし、キャッシュを無効化/再起動します。

0
Shyam

Java 8をAndroid Studio 3.5に更新した後、サポートを有効にする必要がありました

Build.gradleファイルに次の行を追加します。

Android {
    defaultConfig {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

ここでドキュメントを確認できます: https://developer.Android.com/studio/write/Java8-support

0
Johan Ferreira

アプリケーションクラスの拡張クラスを変更する

public class MyApplication extends Application { ... }から

public class MyApplication extends MultiDexApplication { ... }

詳細については、公式ドキュメントに従ってください: https://developer.Android.com/studio/build/multidex.html#mdex-gradle

わたしにはできる