java.lang.ClassNotFoundException:パス上のクラスが見つかりませんでした:dexpathlist


139

私は現在、純粋にネイティブのndkを使用する必要があるプロジェクトに取り組んでいます。Irrlichtエンジンのソースからhelloworldの例を実行しようとするとうまくいきました。次に、その例と同じ形式に従ってプロジェクトで使用してみます。しかし、私は得ました:

03-14 01:40:05.308: E/AndroidRuntime(799): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.irrlicht.example1/android.app.POMActivity}: java.lang.ClassNotFoundException: Didn't find class "android.app.POMActivity" on path: DexPathList[[zip file "/data/app/com.irrlicht.example1-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.irrlicht.example1-2, /system/lib]]

プロジェクトの実行中。

ここに私のmain.cppファイルがあります:

#include <android/log.h>
#include <jni.h>
#include <android_native_app_glue.h>
#include "android_tools.h"
#ifdef _IRR_ANDROID_PLATFORM_
void android_main(android_app* app)
{
__android_log_print(4 , "pom" , "nothing");
}

#endif

Android.mk:

LOCAL_PATH := $(call my-dir)/..
IRRLICHT_PROJECT_PATH := $(LOCAL_PATH)
include $(CLEAR_VARS)
LOCAL_MODULE := Irrlicht
LOCAL_SRC_FILES := /home/karthik/Android/Essentials/ogl-es/lib/Android/libIrrlicht.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := HelloWorldMobile1
LOCAL_CFLAGS := -D_IRR_ANDROID_PLATFORM_ -pipe -fno-exceptions -fno-rtti -fstrict-aliasing
LOCAL_C_INCLUDES := -I ../../include -I /home/karthik/Android/Essentials/ogl-es/include -I /home/karthik/Android/json/jsoncpp-src-0.5.0/libs/linux-gcc-4.8 -I /home/karthik/Android/json/jsoncpp-src-0.5.0/include/json 
LOCAL_SRC_FILES :=  android_tools.cpp main.cpp
LOCAL_LDLIBS := -lEGL -llog -lGLESv1_CM -lGLESv2 -lz -landroid -ldl 
LOCAL_STATIC_LIBRARIES := Irrlicht android_native_app_glue
include $(BUILD_SHARED_LIBRARY)
$(call import-module,android/native_app_glue)

そして、AndroidManifest.xmlでアクティビティ名を指定しました:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.irrlicht.example1"
    android:versionCode="1"
    android:versionName="1.0">
...
<application android:icon="@drawable/irr_icon" android:label="HelloWorldMobile1" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:debuggable="true">
        <activity android:name="android.app.POMActivity"
        android:label="HelloWorldMobile1"
        android:launchMode="singleTask"
        android:configChanges="orientation|keyboardHidden"
        android:screenOrientation="portrait"
        android:clearTaskOnLaunch="true">
        <meta-data android:name="android.app.lib_name" android:value="HelloWorldMobile1" />                     

ここで私がしている間違いは何ですか?必要に応じて、完全なコードを投稿します。


1
外部jarファイルを使用していますか?
Siddharth_Vyas 2014年

@SiddharthVyasいいえ、これには外部jarファイルを使用していません。
Karthik Sivam 2014年

1
アプリケーションはマルチデキシングされていますか?もしそうなら、それは問題を説明しています。
IgorGanapolsky

署名済みのAPKを実行したときに、このエラーは発生しませんでした。デバッグするだけ
j2emanue 2017

有効な解決策を見つけましたか?
Benobab、2017年

回答:


84

私はすべての可能なオプションを試しましたが、結果はゼロです。最後に私は私に役立つ正しい解決策を見つけました。インスタントランを無効にするだけです。[ファイル]-> [設定]-> [ビルド、実行、デプロイメント]-> [インスタントラン]->インスタントランのチェックボックスをオフにします。アプリを1回実行すると、このapkファイルは正しく動作します。


11
これはAndroid Studioの正解です。Instant Runがまだ非常にバグが多いので、意外な驚きを避けるためにオフにする必要があるとは信じられません...
Ognyan

2
私はこの答えを何日も、何週間も探していました!重要ではありませんが、この問題は心の奥底にあり、私に平和を与えていません。瞬間的な実行がこれを引き起こしたものであるとは考えていませんでした。私のアプリはadb経由で起動すると正常に動作しましたが、apk経由で手動でインストールすると、ClassNotFoundランタイムの期待で常にクラッシュしました。
はRazvan Barbuの

5
それは私の解決策ではありません。インスタントランを無効にした
Terranology 2018年

オプションを無効にした後。Androidスタジオを再起動してください
Ashik Abbas

omgインスタントランが原因である理由はわかりませんが、確かに原因です。
KingKongCoder 2018年

63

私は同様の問題がありました、これが私の解決策です:

  1. プロジェクトを右クリックし、[ プロパティ ]を選択します
  2. 左側のメニューから[ Javaビルドパス ]を選択します
  3. [ 注文とエクスポート ]タブを選択します。
  4. リストから、プロジェクトに追加したライブラリまたは外部jarがチェックされていることを確認します
  5. 最後に、プロジェクトをクリーンアップして実行します。

この回答を確認することもできます。


1
これは質問に対する正しい解決策です。上記と同じエラーが見つかったlibgdxゲームでこれをテストしました。私の電話(samsung galaxy S6)で生成されたログを使用してこれらのエラーを見つけました。このソリューションを適用すると、すべての問題が解決されました。

25
プロジェクトを右クリックしてもプロパティが見つかりません。私は愚かかもしれません。:(
ジンミン

12
プロパティも見つかりません。リストされているページに移動する方法はだれでもわかります
Skyler

9
これはEclipse IDEのソリューションです。Android Studioにはデフォルトの「project.properties」ファイルはありません。作成することもできます。
ボット

提供されているソリューションは、Eclipse IDEにのみ適用できます。
mnsalim

47

これはあなたの場合には問題のようです。マニフェストでのアクティビティの相対パスが正しくありません:

<activity android:name="android.app.POMActivity"

これを次のように置き換えます。

<activity android:name=".POMActivity"

または

<activity android:name="com.irrlicht.example1.POMActivity"

31

デバイス上のアプリの削除とプロジェクトのクリーニングは私のために機能します


2
これは、react nativeでもうまくいきました。Android Studioでandroidフォルダーを開き、ビルド->クリーンプロジェクト。再react-native run-android
構築

上記のコメントと同じで、うまくいきました!よろしくお願いします!
Elegya

24

見ているだけで問題がわかる

dexエラー

しかし、問題を修正するのに半日かかりました。
私はこれをアンドロイド開発者のページの指示に従って修正します:https : //developer.android.com/studio/build/multidex.html

まず、これをgradle.buildファイルに追加します。

defaultConfig {
    ...
    minSdkVersion 14
    targetSdkVersion 21
    ...

    // Enabling multidex support.
    multiDexEnabled true
}

 dependencies {
     compile 'com.android.support:multidex:1.0.0'
 }

次にMultiDexApplication、上記のリンクの指示に従ってApplicationクラスを拡張します(または、アプリケーションクラスを拡張できない場合は、アプリケーションクラスを宣言するか、関数をAndroidManifest.xmlオーバーライドしますattachBaseContext())。

以上で問題は解決しました。


1
multi-dexの追加が役立つのは、参照カウント制限(56k)を超えた場合のみであり、Lollipopより前のバージョンでは非常に不安定で信頼性が非常低くなっています。これは、最後の手段として問題を修正するために使用する必要があります。
milosmns

次に、あなたに応じた解決策は何ですか
Akash Bisariya

multi-dexは、開発者のWebサイトに明確に記載されているように、問題が発生するよりも問題が発生するとだけ言っています。もし答えがあったら、私はここで答えを探していませんよね?
milosmns

1
情報に感謝します。良い解決策を見つけた場合は、ここで更新してください。非常に役立ちます。
Akash Bisariya 16

2
上記の依存関係に行を追加すると、私のためにそれを行いました。
gadildafissh 2017

23

Clean ProjectRebuild Projectを試してください。


1
[ビルド]メニューの下。選択ビルド- >クリーンプロジェクト当時とビルド- >プロジェクトの再構築
kangkyu

これは、アプリがローカルでのみクラッシュすることを意味します。ただし、クラッシュはリリースバージョンでも発生するため、これは実際の解決策ではありません。
David

22

この例外は、レイアウトに次のようなカスタムビューがある場合にも発生する可能性があります。

<com.example.MyView
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

また、ビューのパッケージ名を「com.example」から別の名前に変更しましたが、レイアウトでも変更を忘れています。


これは別の理由で役に立ちました。スペルを確認してください。クラス名のスペルを間違えたため、元の問題が発生しました。
Berry Wing


12

私はそれを使用してそれを解決しました:./gradlew --stopandroid studioターミナルのコマンド。このコマンドを実行した後、プロジェクトをクリーンアップして再ビルドします。



10

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

どのようにenableMultiDex影響しますか?私の場合javaMaxHeapSize "4g"は役に立ちませんでした。
CoolMind 2019

@CoolMind拡張する単なるアプリケーションクラスMultiDexApplication。multidexを使用する場合に必要です
Manohar Reddy

同意します。MultiDexApplicationまたはを使用しますattachBaseContextdeveloper.android.com/studio/build/multidexを参照)。
CoolMind

8

この問題に何度も直面しましたが、すべてInstant Runを無効にすることで解決しました。


複数のソリューションを試したところ、この小さなことで問題が解決しました。
FraK

@FraK、最も評価の高いソリューションにはこのアドバイスが含まれています。私はすでにInstant Runのチェックを外していましたが(数年はそれは多くのバグをもたらしました)。
CoolMind

7

MultiDexApplicationを拡張するカスタマイズされたApplicationクラスを用意する必要はありません。代わりに、AndroidManifest.xmlでこのようにすることができます

<application
android:name="android.support.multidex.MultiDexApplication"
android:hardwareAccelerated="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">

これと一緒にbuild.gradle(Module:app)で、

defaultConfig {
      ...

      // Enabling multidex support.
      multiDexEnabled true
}

dependencies {
     ... 
     compile 'com.android.support:multidex:1.0.2'
}

ありがとう。


アプリケーション名を変更して、Android 4.3でアプリを実行しようとしたときに
うまくいきました

6

multidexを使用している場合は、アプリケーションの代わりにMultiDexAppicationを使用してアプリケーションクラスを拡張し、5.0以下のAndroidに必要な以下のメソッドをオーバーライドしてみてください(5.0以降のmultidexがサポートされているため)。

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

依存関係にこれを追加します

compile 'com.android.support:multidex:1.0.1'

から拡張する場合は、このメソッドをオーバーライドする必要がありますApplication。なぜ私たちはオーバーライドする必要がありますMultiDexAppicationか?
CoolMind

4

フォルダ名をからlibに変更するだけですlibs

次に、プロジェクトにいくつかのエラーマークが表示されます。これを解決するには、プロジェクトをクリックします>

Properties > Java Build Path > libraries

赤いマークが付いているライブラリをすべて削除してから、プロジェクトapply > ok >クリーンアップします。多田魔法を見る:)


フォルダ名はlibsのみ
Killer

4

私の場合、この問題はKotlinが原因で発生しました。私の既存のコードには、Kotlinで記述されたクラスがありました。アプリをビルドしてインストールしました。最初のアクティビティを開くとすぐにアプリがクラッシュしました。logcatでこのエラーが表示されていました。その後、アプリのGradleファイルでKotlinのウェブサイトからKotlinのバージョンを更新しました。アプリを再度ビルドすると、問題なく動作しました。


うわー、99%-Kotlinプロジェクトがあります。:)
CoolMind 2019

Kotlinのバージョンが、基盤となるAndroid Studioと互換性があることを確認してください。その推測です。見てください
ハリー.Naeem

AS 3.3.1とKotlin 1.3.21を使用しています。彼らは最新の安定しています。申し訳ありませんが、上記および下記のすべてのソリューションは私の状況に適していません。
CoolMind 2019

4

考えられる理由の1つは、Apps AndroidManifest.xmlファイル内のアクティビティのパスが正しくないことです。AndroidManifest.xmlにアクティビティを以下のような完全な相対パスで登録します。

<activity android:name="<full_path>.ActivityName" />

3

与えられた回答を試した後、同じ例外の別の理由を見つけました。手動で使用しているライブラリをメインライブラリに手動で追加する必要があったためです。

Right click on my main library > 
Properties > 
Android > 
Go to the very bottom of the screen and click (Add) > 
Select my other library that caused the crash >
Apply

このソリューションの前に、Eclipseの.javaファイル内から「Fix Project setup」を使用しましたが、これは機能しなかったため、ここに手動で追加する必要があり、機能しました


3

このクラッシュはSamsung Lollipopデバイスでのみ発生していましたが、このソリューションはうまくいきました。

dexOptions {
     preDexLibraries false
}

この質問は現在、このクラッシュに対してGoogleで最もランクの高い検索結果であり、上記の回答のどれもうまく機能しなかったため、ここにこの回答を投稿しています。


それは私を助けませんでした(Samsung Galaxy S4、Android 5.0.1)。
CoolMind 2019

2

次の解決策は私のために働きました...

上記のすべてを試しましたが、まだアプリが実行されていません。Gradle 4+とAndroid Studioの最新バージョンで動作する反応ネイティブアプリを持っています。

私はreact-native run-androidを実行するとMainApplicationクラスが見つからないという問題で失敗するという問題がありました...つまりClassNotFoundException

コンパイラーD8を使用するようにgradle.propertiesを更新したところ、問題を解決できました。

追加した:

android.enableD8 = true

私のgradle.propertiesに

ドキュメントの詳細はこちら:https : //android-developers.googleblog.com/2017/08/next-generation-dex-compiler-now-in.html


1
Android Studio 3.1以降では、デフォルトでこのdexコンパイラが使用されます
Lennon Spirlandelli 2018年

2

Ashik abbas 回答Instant Runを無効にする)は私にとってはうまくいきますがInstant Runが必要ですが、最終的に私に役立つ解決策が見つかりました。minifyEnabledを無効にするだけです。行く:(アプリモジュール)build.gradleデバッグブロックを無効minifyEnabled

debug {
            minifyEnabled false

        }

1

私の理解不足によると、アンドロイドスタジオ2.1から2.3にアップデートした後、インスタント機能のために問題が発生します。出力からapkをコピーしてsdカードに入れると、アプリケーションが実行されません。この問題の場合、ビルドオプションからAPKをビルドします。AndroidStudioでAPKをビルドします。


1

あなたが有効になっminifyEnabledていshrinkResourcesて、アプリのgradleファイルでtrueに設定されている場合。proguard-rules.proファイルに次の行を追加する必要があります

-keepクラスcom.yourpackage_name。** {*; }

縮小化はapkファイルからいくつかの重要なクラスを削除するためです。


リソースの縮小からすべてのソースファイルが除外されるため、これは適切なソリューションではありません。代わりに本当に必要なファイルのみを除外してください。そうしないと、apkサイズが大きくなります。
ヤニック

1

以前にこの問題がありましたが、ここでのコメントは以前は役に立ちましたが、今回は役に立ちませんでした。Proguardの構成を確認し、次の行を削除すると、Proguardがこのエラーに関係するように機能しました。

 -optimizationpasses 5
        -overloadaggressively
        -repackageclasses ''
        -allowaccessmodification
        -dontskipnonpubliclibraryclassmembers

1

私の場合、私のプロジェクトがandroidxを使用してセットアップされているときに、古い名前空間ライブラリを使用しました。

解決策はandroid.support.design.widget.BottomNavigationView、サポートライブラリからエスケープするための適切なコンポーネントにコンポーネントを置き換えることでした:com.google.android.material.bottomnavigation.BottomNavigationView


1

私の場合、でアクティビティを定義し、Manifest.xmlを作成するのを忘れましたactivity。だから私はアクティビティを作成して定義しmanifest、私のエラーを解決しました!


0

Gradleの依存関係を削除した後でこのエラーが発生した場合は、マニフェストを確認し、その依存関係に対応するすべてのエントリを削除したことを確認してください。


複数の質問に同じ回答を追加しないでください。最良のものに答え、残りを重複としてフラグを立てます。複数の質問に重複した回答を追加することは許容されますか?を
Petter Friberg、2016年

0

私にとって、署名付きAPKを作成した後に問題が発生しました。それを修正するために、Run / Build APKを使用して新しいデバッグAPKを生成しました。その後、Run(cmd + r)はこのエラーなしで再び機能します。


0

私は同じ問題に直面していました。私は一日に可能な限りすべてを試しましたが、何もうまくいきませんでした。問題を引き起こしていた依存関係は、低コンパイルsdk、ターゲットsdk、および最小sdkを使用していた。プロジェクトのライブラリモジュールを作成し、すべてのソースをコピーして、sdkバージョンをアプリケーションのsdkバージョンと照合しました。そして最後にそれは魅力のように働きました。


0

同じエラーがあり、初心者の問題についていくつかの回答で誤解されました。以下のように、カスタムビュー記述子に間違ったパッケージがありました。誰かのお役に立てば幸いです。

<com.my.app.wrong.package.MyActivity
    android:id="@+id/myActivity"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="16dp"
    android:layout_marginRight="16dp"
    android:paddingTop="16dp"
    android:paddingBottom="8dp"
    android:gravity="left" />
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.