java.lang.ClassNotFoundException: Tidak menemukan kelas di jalur: dexpathlist

139

Saat ini saya sedang mengerjakan proyek di mana saya harus menggunakan ndk murni asli. Itu bekerja ketika saya mencoba menjalankan contoh helloworld dari sumber mesin Irrlicht. Kemudian saya mencoba menggunakannya dalam proyek saya mengikuti format yang sama dari contoh itu. Tapi saya mendapat:

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

saat menjalankan proyek saya.

Ini file main.cpp saya:

#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");
}

#berakhir jika

di 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)

Dan saya telah memberikan nama Aktivitas di 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" />                     

Apa kesalahan yang saya lakukan di sini? Saya akan memposting kode lengkap jika perlu.

Karthik Sivam
sumber
1
Apakah Anda menggunakan file jar eksternal?
Siddharth_Vyas
@ SidharthVya Tidak, saya tidak menggunakan file jar eksternal dalam hal ini.
Karthik Sivam
1
Apakah aplikasi Anda multi-dexed? Jika demikian, maka itu menjelaskan masalahnya.
IgorGanapolsky
ketika saya melakukan apk yang ditandatangani kesalahan ini tidak terjadi. just debug
j2emanue
Apakah Anda menemukan solusi yang berfungsi?
Benobab

Jawaban:

84

Saya mencoba semua opsi yang mungkin tetapi hasilnya nol. Akhirnya saya menemukan solusi yang tepat yang sangat membantu bagi saya. Pergi saja untuk menonaktifkan Run Instan Buka File -> Pengaturan -> Build, Eksekusi, Deployment -> Run Instan -> Hapus centang pada kotak centang untuk menjalankan instan . Jalankan aplikasi Anda sekali dan file apk ini berfungsi dengan baik ..

Ashik Abbas
sumber
11
Ini jawaban yang tepat untuk Android Studio. Saya tidak percaya bahwa Instant Run masih sangat bermasalah hingga Anda harus mematikannya untuk menghindari kejutan yang tidak menyenangkan ...
Ognyan
2
Saya telah mencari jawaban ini selama berhari-hari, bahkan berminggu-minggu! Meskipun tidak kritis, masalah ini ada di benak saya, tidak memberi saya kedamaian. Tidak pernah terpikir bahwa pelarian instan adalah yang memicu ini. Aplikasi saya berfungsi dengan baik ketika diluncurkan melalui adb, tetapi selalu macet dengan expection runtime ClassNotFound ketika menginstalnya secara manual melalui apk.
Răzvan Barbu
5
Itu bukan solusi bagi saya. Saya telah menonaktifkan menjalankan instan
Terranologi
Setelah menonaktifkan opsi. Silakan mulai ulang studio android Anda
Ashik Abbas
omg saya tidak tahu mengapa lari instan adalah penyebabnya, tetapi memang, terima kasih bung.
KingKongCoder
63

Saya punya masalah serupa, inilah solusi saya:

  1. Klik kanan pada proyek Anda dan pilih Properties .
  2. Pilih Java Build Path dari menu di sebelah kiri.
  3. Pilih tab Order and Export .
  4. Dari daftar pastikan perpustakaan atau guci eksternal yang Anda tambahkan ke proyek Anda dicentang .
  5. Akhirnya, bersihkan proyek Anda & jalankan.

Anda juga dapat memeriksa jawaban ini .

mnsalim
sumber
1
Ini adalah solusi yang tepat untuk pertanyaan itu. Saya telah menguji ini dengan game libgdx saya dengan kesalahan yang sama seperti yang ditemukan di atas. Saya menemukan kesalahan ini dengan menggunakan log yang dihasilkan dengan ponsel saya (samsung galaxy S6). Setelah saya menerapkan solusi ini, semua masalah saya terpecahkan.
25
Saya tidak dapat menemukan Properti dari klik kanan proyek. Mungkin saya bodoh. :(
Zin Min
12
Saya juga tidak dapat menemukan properti, siapa pun yang tahu cara menavigasi ke halaman yang terdaftar
Skyler
9
Ini adalah solusi untuk Eclipse IDE. Tidak ada file 'project.properties' default di Android Studio. Itu bisa dibuat sekalipun.
Bot
Solusi yang disediakan hanya berlaku untuk Eclipse IDE.
mnsalim
47

Ini tampaknya menjadi masalah dalam kasus Anda. Jalur relatif aktivitas Anda dalam manifes tidak benar:

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

ganti ini dengan:

<activity android:name=".POMActivity"

atau

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

Penghapusan aplikasi pada perangkat dan pembersihan proyek berfungsi untuk saya

Vlad
sumber
2
Ini bekerja untuk saya juga dengan reaksi asli. Saya membuka folder android dengan Android Studio dan kemudian membangun -> proyek bersih. Bangun kembali denganreact-native run-android
pinguinos
Apakah sama dengan komentar di atas dan berhasil! Terima kasih!
Elegya
24

Saya harus memahami masalahnya hanya dengan melihat

kesalahan dex

Tapi butuh setengah hari untuk memperbaiki masalah ini.
Saya memperbaikinya dengan mengikuti instruksi halaman pengembang android: https://developer.android.com/studio/build/multidex.html

Pertama tambahkan ini ke file gradle.build:

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

    // Enabling multidex support.
    multiDexEnabled true
}

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

Kemudian perluas kelas Aplikasi dengan MultiDexApplicationkelas seperti yang diperintahkan pada tautan di atas (atau nyatakan kelas aplikasi dalam AndroidManifest.xmlatau timpa attachBaseContext()fungsi jika tidak memungkinkan untuk memperluas kelas aplikasi).

Itu saja dan itu memecahkan masalah.

Akash Bisariya
sumber
1
Menambahkan multi-dex hanya berguna ketika Anda melewati batas jumlah referensi (56k), dan itu sangat tidak stabil dan sangat tidak dapat diandalkan sebelum Lollipop. Ini harus digunakan untuk memperbaiki masalah sebagai upaya terakhir.
milosmns
lalu apa yang harus menjadi solusinya menurut Anda
Akash Bisariya
Saya hanya mengatakan bahwa multi-dex menyebabkan lebih banyak masalah daripada yang membantu, yang dinyatakan dengan jelas di situs web pengembang. Saya tidak akan berada di sini mencari jawaban jika saya punya jawaban, bukan?
milosmns
1
Ok terima kasih atas informasinya, Perbarui di sini jika Anda menemukan solusi yang baik, itu akan sangat membantu.
Akash Bisariya
2
Menambahkan baris dalam dependensi di atas berhasil untuk saya.
gadildafissh
23

Coba saja Clean Project & Rebuild Project .

nicolas asinovich
sumber
1
Di bawah menu "Bangun". Pilih Build -> Clean Project dan kemudian Build -> Rebuild Project
kangkyu
Ini akan menyiratkan bahwa aplikasi hanya crash secara lokal, tetapi crash juga terjadi dalam versi rilis, jadi ini bukan solusi.
David
22

Pengecualian ini juga dapat terjadi ketika Anda memiliki tampilan khusus di tata letak Anda seperti ini:

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

dan Anda mengubah nama paket view dari "com.example" menjadi sesuatu yang berbeda, tetapi Anda lupa mengubahnya dalam tata letak juga.

petrnohejl
sumber
Ini membantu karena alasan yang berbeda. Periksa ejaan Anda. Saya memiliki nama kelas yang salah eja yang menyebabkan masalah asli.
Berry Wing
12

saya menyelesaikannya dengan menggunakan: ./gradlew --stopperintah di terminal android studio. Setelah melakukan perintah ini kemudian bersihkan dan bangun kembali proyek.

Ali Gürelli
sumber
11
  1. hapus folder bin
  2. mengubah urutan perpustakaan
  3. bersihkan dan bangun kembali

bekerja untukku.

Juni gila
sumber
10

Untuk siapa pun yang memiliki multidex memungkinkan menulis ini

di dalam 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'
}

tulis kelas EnableMultiDexseperti di bawah ini

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();

    }
}

dan dalam AndroidManifest.xmltulis className ini di dalam tag Aplikasi

 <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">
Manohar Reddy
sumber
Bagaimana enableMultiDexpengaruhnya? Dalam kasus saya javaMaxHeapSize "4g"tidak membantu.
CoolMind
@ CoolMind Ini hanya kelas aplikasi yang meluas MultiDexApplication. Perlu jika Anda ingin menggunakan multidex
Manohar Reddy
Setuju. Saya menggunakan salah satu MultiDexApplicationatau attachBaseContext(lihat developer.android.com/studio/build/multidex ).
CoolMind
8

Saya menghadapi Masalah ini beberapa kali dan semuanya diselesaikan dengan menonaktifkan Instant Run .

Mohamed Nageh
sumber
Mencoba beberapa solusi, hal kecil ini menyelesaikan masalah, sulit dipercaya!
FraK
@ Frk, solusi berperingkat memberi saran ini. Meskipun saya sudah menghapus Instan Run (beberapa tahun telah membawa banyak bug).
CoolMind
7

Kita tidak perlu memiliki kelas Aplikasi khusus yang memperluas MultiDexApplication . Sebagai gantinya, kita dapat memiliki seperti ini di 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">

Dan bersamaan dengan ini di build.gradle (Module: app),

defaultConfig {
      ...

      // Enabling multidex support.
      multiDexEnabled true
}

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

Terima kasih.

Abdul Gaffar
sumber
Mengubah nama aplikasi, bekerja untuk saya ketika saya mencoba menjalankan aplikasi di Android 4.3
h8pathak
6

Ketika Anda menggunakan multidex, maka cobalah untuk memperluas kelas aplikasi Anda dengan MultiDexAppication alih-alih Aplikasi dan mengganti metode di bawah ini yang diperlukan untuk Android di bawah 5.0 (karena 5.0 dan di atas mendukung multidex)

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

dan dalam dependensi tambahkan ini

compile 'com.android.support:multidex:1.0.1'
kabore abdoul mohamine
sumber
Kita harus mengganti metode ini jika kita memperluas dari Application. Mengapa kita harus mengganti dalam kasus MultiDexAppication?
CoolMind
4

Cukup Ubah nama folder Anda dari libmenjadi libs,

Kemudian Anda akan melihat beberapa tanda kesalahan dalam proyek Anda, untuk menyelesaikan ini klik kanan pada proyek>

Properties > Java Build Path > libraries :

Hapus semua perpustakaan dengan tanda merah di atasnya, lalu apply > ok >setelah itu bersihkan proyek Anda . TADA melihat keajaiban :)

hemantsb
sumber
nama folder hanya libs
Pembunuh
4

Dalam kasus saya, masalah ini muncul karena Kotlin. Dalam kode saya yang ada ada kelas yang ditulis Kotlin. Saya membangun aplikasi, itu menginstal dan segera setelah aktivitas pertama membuka aplikasi macet. di logcat kesalahan ini sedang ditampilkan. Saya kemudian memperbarui versi Kotlin saya dari situs web Kotlin dalam file app gradle. Bangun aplikasinya lagi dan itu berfungsi dengan baik.

Harry .Naeem
sumber
Wow, saya punya proyek 99% -Kotlin Apa yang harus saya lakukan? :)
CoolMind
Bisakah Anda memeriksa, dengan versi Kotlin yang kompatibel dengan Android Studio Anda yang mendasarinya. Itu hanya tebakan. lihatlah
Harry .Naeem
Saya memiliki AS 3.3.1 dan Kotlin 1.3.21. Mereka stabil terbaru. Maaf, saya kira, semua solusi yang dijelaskan di atas dan di bawah tidak sesuai dengan situasi saya.
CoolMind
4

Salah satu alasan yang mungkin adalah jalur aktivitas yang salah dalam file Aplikasi AndroidManifest.xml. Daftarkan aktivitas dengan di AndroidManifest.xml Anda dengan jalur relatif penuh seperti di bawah ini.

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

setelah saya mencoba jawaban yang diberikan, saya menemukan alasan lain untuk Pengecualian yang sama, bahwa saya harus menambahkan perpustakaan yang saya gunakan secara manual ke perpustakaan utama saya melalui

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

sebelum solusi ini, saya menggunakan "Perbaiki pengaturan Proyek" dari dalam file .java di gerhana, tetapi ini tidak berhasil, jadi saya harus menambahkannya secara manual di sini dan itu berfungsi

Ahmed Adel Ismail
sumber
3

Saya mendapatkan crash ini hanya pada perangkat Samsung Lollipop dan solusi ini bekerja untuk saya.

dexOptions {
     preDexLibraries false
}

Saya memposting jawaban ini di sini karena pertanyaan ini adalah hasil pencarian peringkat tertinggi di Google untuk kerusakan ini dan tidak ada jawaban di atas yang berfungsi untuk saya.

blinkmacalahan
sumber
Itu tidak membantu saya (Samsung Galaxy S4, Android 5.0.1).
CoolMind
2

Solusi berikut ini bekerja untuk saya ...

Saya mencoba semua yang disebutkan di atas tetapi masih belum menjalankan aplikasi saya. Saya memiliki aplikasi asli yang berjalan pada versi terbaru dari gradle 4+ dan android studio.

Saya mempunyai masalah di mana jika saya menjalankan react-native run-android itu gagal dengan masalah yang mengatakan tidak dapat menemukan kelas MainApplication ... yaitu ClassNotFoundException

Saya bisa menyelesaikan masalah ini ketika saya memperbarui gradle.properties saya untuk menggunakan D8 kompiler.

Saya tambahkan:

android.enableD8 = benar

ke properti gradle saya

Detail Dokumen di sini: https://android-developers.googleblog.com/2017/08/next-generation-dex-compiler-now-in.html

nkadu1
sumber
1
Android Studio 3.1+ menggunakan penyusun dex ini secara default
Lennon Spirlandelli
2

Ashik abbas menjawab (menonaktifkan Instant Run ) berfungsi untuk saya, tetapi saya perlu Instant Run , akhirnya saya menemukan solusi yang bermanfaat bagi saya. cukup nonaktifkan minifyEnabled . pergi ke build.gradle (Module: app) di blok debug dan nonaktifkan minifyEnabled :

debug {
            minifyEnabled false

        }
kaki
sumber
1

Sesuai pemahaman saya, saya mendapatkan masalah setelah memperbarui android studio 2.1 ke 2.3 karena fitur instan aplikasi saya tidak akan berjalan ketika saya menyalin apk dari output dan dimasukkan ke dalam sdcard. Untuk masalah ini saya membangun apk dari opsi membangun do apk membangun di studio android.


sumber
1

Jika Anda diaktifkan minifyEnableddan shrinkResourcesbenar dalam file gradle aplikasi Anda. Anda perlu menambahkan baris berikut dalam proguard-rules.profile

-jaga kelas com.yourpackage_name. ** {*; }

karena minification dihapus beberapa kelas penting di file apk kami.

Naveen Kumar M
sumber
Ini bukan solusi yang baik karena mengecualikan semua file sumber Anda dari penyusutan sumber daya. Hanya kecualikan hanya file yang benar-benar diperlukan saja, jika tidak Anda memperbesar ukuran apk Anda.
Yannick
1

Saya punya masalah ini sebelumnya dan komentar di sini membantu di masa lalu tetapi kali ini tidak. saya memeriksa konfigurasi proguard saya dan saya menghapus baris-baris berikut dan kemudian bekerja sehingga proguard dapat ada hubungannya dengan kesalahan ini:

 -optimizationpasses 5
        -overloadaggressively
        -repackageclasses ''
        -allowaccessmodification
        -dontskipnonpubliclibraryclassmembers
j2emanue
sumber
1

Dalam kasus saya, saya menggunakan perpustakaan namespace lama sementara proyek saya dibuat menggunakan androidx satu.

Solusinya adalah untuk mengganti android.support.design.widget.BottomNavigationViewkomponen dengan yang tepat untuk melarikan diri dari dukungan perpustakaan: com.google.android.material.bottomnavigation.BottomNavigationView.

Andrii Artamonov
sumber
1

dalam kasus saya, saya mendefinisikan Kegiatan di Manifest.xmldan lupa untuk membuat activity. Jadi saya membuat Activity dan mendefinisikannya manifestdan kesalahan saya terpecahkan!

sana ebadi
sumber
0

Bagi saya masalah muncul setelah saya membuat APK yang ditandatangani. Untuk memperbaikinya, saya membuat apk, debug baru menggunakan Run / Build APK. Setelah itu, Jalankan (cmd + r) berfungsi lagi tanpa kesalahan ini.

passatgt
sumber
0

Saya menghadapi masalah yang sama. Saya mencoba segala sesuatu yang mungkin selama sehari, tetapi tidak ada yang berhasil. Ketergantungan yang menyebabkan masalah menggunakan kompilasi SDK yang lebih rendah, SDK target dan min SDK. Saya membuat modul perpustakaan untuk proyek, menyalin semua sumber dan mencocokkan versi SDK dengan versi SDK aplikasi. Dan akhirnya itu bekerja seperti pesona.

PK Gupta
sumber
0

Saya memiliki kesalahan yang sama dan beberapa jawaban menyesatkan saya pada masalah pemula. Saya memiliki paket yang salah di deskriptor tampilan khusus saya seperti di bawah ini. Saya harap ini membantu seseorang.

<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" />
lauksas
sumber