java.lang.ClassNotFoundException: Không tìm thấy lớp trên đường dẫn: dExathlist


139

Tôi hiện đang làm việc trong một dự án mà tôi phải sử dụng ndk hoàn toàn bản địa. Nó hoạt động khi tôi thử chạy một ví dụ hellowworld từ nguồn động cơ Irrlicht. Sau đó, tôi thử sử dụng nó trong dự án của mình theo cùng định dạng của ví dụ đó. Nhưng tôi đã nhận:

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

trong khi chạy dự án của tôi

Đây là tập tin main.cpp của tôi:

#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

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

Và tôi đã đặt tên Hoạt động trong 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" />                     

Tôi đang làm gì ở đây? Tôi sẽ gửi mã đầy đủ nếu cần thiết.


1
Bạn đang sử dụng bất kỳ tập tin jar bên ngoài?
Siddharth_Vyas

@SiddharthVyas Không, tôi không sử dụng các tệp jar bên ngoài trong này.
Karthik Sivam

1
Là ứng dụng của bạn nhiều dexed? Nếu vậy, thì điều đó giải thích vấn đề.
IgorGanapolsky

Khi tôi đã làm một apk đã ký, lỗi này đã không xảy ra. chỉ cần gỡ lỗi
j2emanue

Bạn đã tìm thấy một giải pháp làm việc?
Benobab

Câu trả lời:


84

Tôi đã thử tất cả các tùy chọn có thể nhưng kết quả là bằng không. Cuối cùng tôi tìm thấy giải pháp chính xác đó là hữu ích cho tôi. Chỉ cần đi để tắt Instant Run Chuyển đến Tệp -> Cài đặt -> Xây dựng, Thực thi, Triển khai -> Chạy ngay lập tức -> Bỏ chọn hộp kiểm để chạy ngay lập tức . Chạy ứng dụng của bạn một lần và tệp apk này hoạt động bình thường ..


11
Đây là câu trả lời chính xác cho Android Studio. Tôi không thể tin rằng Instant Run vẫn có lỗi đến mức mở rộng đến mức bạn phải tắt nó để tránh những bất ngờ khó chịu ...
Ognyan

2
Tôi đã tìm kiếm câu trả lời này trong nhiều ngày, thậm chí vài tuần! Mặc dù không quan trọng, vấn đề này đã xuất hiện trong tâm trí tôi, không mang lại cho tôi sự bình yên. Không bao giờ nghĩ chạy ngay lập tức là một trong những kích hoạt này. Ứng dụng của tôi hoạt động tốt khi được khởi chạy qua adb, nhưng luôn bị lỗi với phần mở rộng thời gian chạy ClassNotFound khi cài đặt thủ công qua apk.
Răzvan Barbu

5
Đó không phải là giải pháp cho tôi. Tôi đã vô hiệu hóa việc chạy ngay lập tức
Terranology 15/03/18

Sau khi vô hiệu hóa các tùy chọn. Vui lòng khởi động lại studio android của bạn
Ashik Abbas

omg tôi không biết tại sao chạy ngay lập tức là thủ phạm nhưng thực sự, cảm ơn người đàn ông.
KingKongCoder

63

Tôi đã có một vấn đề tương tự, đây là giải pháp của tôi:

  1. Nhấp chuột phải vào dự án của bạn và chọn Thuộc tính .
  2. Chọn Đường dẫn xây dựng Java từ menu bên trái.
  3. Chọn tab Đặt hàng và Xuất .
  4. Từ danh sách, đảm bảo các thư viện hoặc bình bên ngoài bạn đã thêm vào dự án của bạn được kiểm tra .
  5. Cuối cùng, làm sạch dự án của bạn và chạy.

Bạn cũng có thể kiểm tra câu trả lời này .


1
Đây là giải pháp chính xác cho câu hỏi. Tôi đã thử nghiệm điều này với trò chơi libgdx của tôi với các lỗi tương tự như ở trên. Tôi đã tìm thấy những lỗi này bằng cách sử dụng nhật ký được tạo bằng điện thoại của mình (samsung galaxy S6). Khi tôi áp dụng giải pháp này, tất cả các vấn đề của tôi đã được giải quyết.

25
Tôi không thể tìm thấy Thuộc tính từ nhấp chuột phải của dự án. Có thể tôi ngu ngốc. :(
Zin Min

12
Tôi cũng không thể tìm thấy các thuộc tính, bất kỳ ai cũng tìm ra cách điều hướng đến trang được liệt kê
Skyler

9
Đây là một giải pháp cho IDE Eclipse. Không có tệp 'project.properIES' mặc định trong Android Studio. Nó có thể được tạo ra mặc dù.
Bot

Giải pháp được cung cấp chỉ áp dụng cho IDE Eclipse.
mnsalim

47

Đây dường như là vấn đề trong trường hợp của bạn. Đường dẫn tương đối của hoạt động của bạn trong bảng kê khai không chính xác:

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

thay thế bằng:

<activity android:name=".POMActivity"

hoặc là

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

31

Việc xóa ứng dụng trên thiết bị và dọn dẹp dự án làm việc với tôi


2
Điều này làm việc cho tôi quá với phản ứng bản địa. Tôi đã mở thư mục Android với Android Studio và sau đó xây dựng -> dọn sạch dự án. Xây dựng lại nó vớireact-native run-android
pinguinos

Đã làm giống như nhận xét ở trên và nó đã làm việc! Cảm ơn !
Elegya

24

Tôi nên hiểu vấn đề bằng cách chỉ nhìn thấy

lỗi dex

Nhưng phải mất nửa ngày để khắc phục vấn đề.
Tôi khắc phục điều này bằng cách làm theo hướng dẫn của trang dành cho nhà phát triển Android: https://developer.android.com/studio/build/multidex.html

Đầu tiên thêm tệp này vào tập tin gradle.build:

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

    // Enabling multidex support.
    multiDexEnabled true
}

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

Sau đó mở rộng lớp Ứng dụng với MultiDexApplicationlớp theo hướng dẫn trên liên kết trên (hoặc khai báo lớp ứng dụng trong AndroidManifest.xmlhoặc ghi đè attachBaseContext()chức năng nếu không thể mở rộng lớp ứng dụng).

Đó là tất cả và nó đã giải quyết vấn đề.


1
Thêm multi-dex chỉ hữu ích khi bạn vượt qua giới hạn số tham chiếu (56k), và nó rất không ổn định và rất không đáng tin cậy trước Lollipop. Điều này nên được sử dụng để khắc phục vấn đề như là phương sách cuối cùng.
milosmns

vậy thì đâu là giải pháp theo bạn
Akash Bisariya

Tôi chỉ nói rằng multi-dex gây ra nhiều rắc rối hơn nó giúp, điều này được nêu rõ trên trang web của nhà phát triển. Tôi sẽ không ở đây để tìm kiếm một câu trả lời nếu tôi có một, phải không?
milosmns

1
Ok cảm ơn về thông tin, xin vui lòng cập nhật ở đây nếu bạn tìm thấy một giải pháp tốt, nó sẽ là một trợ giúp tuyệt vời.
Akash Bisariya

2
Thêm dòng trong phụ thuộc ở trên đã làm điều đó cho tôi.
gadildafissh

23

Chỉ cần thử Dự án sạch & Dự án xây dựng lại .


1
Trong menu "Xây dựng". Chọn Build -> Clean Project và sau đó Build -> Rebuild Project
kangkyu

Điều này có nghĩa là ứng dụng chỉ gặp sự cố cục bộ, vì sự cố cũng xảy ra trong phiên bản phát hành, vì vậy đây không thực sự là một giải pháp.
David

22

Ngoại lệ này cũng có thể xảy ra khi bạn có chế độ xem tùy chỉnh trong bố cục của mình như thế này:

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

và bạn thay đổi tên gói của khung nhìn từ "com.example" thành một cái gì đó khác, nhưng bạn cũng quên thay đổi nó trong bố cục.


Điều này rất hữu ích cho một lý do khác. Kiểm tra chính tả của bạn. Tôi đã có một tên lớp sai chính tả gây ra vấn đề ban đầu.
Berry Wing


12

tôi đã giải quyết nó bằng cách sử dụng: ./gradlew --stoplệnh trong thiết bị đầu cuối studio android. Sau khi thực hiện lệnh này, sau đó làm sạch và xây dựng lại dự án.


11
  1. xóa thư mục bin
  2. thay đổi thứ tự của thư viện
  3. làm sạch và xây dựng lại

đã làm cho tôi.


10

Đối với bất kỳ ai đang có multidex cho phép viết này

bên trong 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'
}

viết một lớp EnableMultiDexnhư dưới đây

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.xmlviết className này bên trong thẻ Ứng dụng

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

Làm thế nào để enableMultiDexảnh hưởng? Trong trường hợp của tôi javaMaxHeapSize "4g"đã không giúp đỡ.
CoolMind

@CoolMind Nó chỉ là một lớp ứng dụng mở rộng MultiDexApplication. Nó là cần thiết nếu bạn muốn sử dụng multidex
Manohar Reddy

Đồng ý. Tôi sử dụng một trong hai MultiDexApplicationhoặc attachBaseContext(xem developer.android.com/studio/build/multidex ).
CoolMind

8

Tôi đã đối mặt với Vấn đề này nhiều lần và tất cả đều được giải quyết bằng cách vô hiệu hóa Instant Run .


Đã thử nhiều giải pháp, điều nhỏ này đã giải quyết vấn đề, không thể tin được!
Gian lận

@FraK, giải pháp được đánh giá cao nhất chứa lời khuyên này. Mặc dù tôi đã bỏ chọn Instant Run (vài năm, nó đã mang lại nhiều lỗi).
CoolMind

7

Chúng ta không cần phải có lớp Ứng dụng tùy chỉnh mở rộng MultiDexApplication . Thay vào đó, chúng ta có thể có như thế này trên 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">

Và cùng với điều này trên build.gradle (Module: ứng dụng),

defaultConfig {
      ...

      // Enabling multidex support.
      multiDexEnabled true
}

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

Cảm ơn.


Thay đổi tên ứng dụng, hoạt động với tôi khi tôi đang cố chạy ứng dụng trên Android 4.3
h8pathak

6

Khi bạn đang sử dụng multidex, sau đó thử mở rộng lớp ứng dụng của bạn với MultiDexAppication thay vì Application và ghi đè bên dưới phương thức này yêu cầu cho Android dưới 5.0 (vì 5.0 trở lên hỗ trợ cho multidex)

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

và trong phụ thuộc thêm điều này

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

Chúng ta nên ghi đè phương thức này nếu chúng ta mở rộng từ Application. Tại sao chúng ta nên ghi đè trong một trường hợp MultiDexAppication?
CoolMind

4

Chỉ cần thay đổi tên thư mục của bạn từ libđến libs,

Sau đó, bạn sẽ thấy một số dấu hiệu lỗi trong dự án của bạn, để giải quyết quyền này Nhấp vào dự án>

Properties > Java Build Path > libraries :

Xóa tất cả các thư viện có dấu đỏ trên đó, apply > ok >sau đó làm sạch dự án của bạn . TADA thấy điều kỳ diệu :)


tên thư mục chỉ là libs
Killer

4

Trong trường hợp của tôi, vấn đề này phát sinh vì Kotlin. Trong mã hiện tại của tôi có một lớp được viết là Kotlin. Tôi đã xây dựng ứng dụng, nó đã cài đặt và ngay khi hoạt động đầu tiên mở ứng dụng bị sập. trong logcat lỗi này đã được hiển thị. Sau đó tôi đã cập nhật phiên bản Kotlin của mình từ trang web của Kotlin trong tệp lớp ứng dụng. Xây dựng ứng dụng một lần nữa và nó hoạt động tốt sau đó.


Ồ, tôi có một dự án 99% -Kotlin phải làm gì? :)
CoolMind

Bạn có thể vui lòng kiểm tra, với phiên bản Kotlin tương thích với Android Studio bên dưới của bạn. Nó chỉ là một phỏng đoán. hãy xem
Harry .Naeem

Tôi có AS 3.3.1 và Kotlin 1.3.21. Họ ổn định mới nhất. Xin lỗi, tôi cho rằng, tất cả các giải pháp được mô tả ở trên và bên dưới không phù hợp với tình huống của tôi.
CoolMind

4

Một lý do có thể là đường dẫn hoạt động không chính xác trong tệp Ứng dụng AndroidManifest.xml. Đăng ký hoạt động với trong AndroidManifest.xml của bạn với đường dẫn tương đối đầy đủ như bên dưới.

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

3

Sau khi tôi thử các câu trả lời, tôi đã tìm ra một lý do khác cho cùng một Ngoại lệ, đó là tôi phải thêm thư viện tôi đang sử dụng thủ công vào thư viện chính của mình thông qua

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

Trước giải pháp này, tôi đã sử dụng "Fix Project setup" từ trong tệp .java trong nhật thực, nhưng điều này không hoạt động, vì vậy tôi phải thêm nó thủ công ở đây và nó hoạt động


3

Tôi đã gặp sự cố này chỉ trên các thiết bị Samsung Lollipop và giải pháp này hiệu quả với tôi.

dexOptions {
     preDexLibraries false
}

Tôi đang đăng câu trả lời này tại đây vì câu hỏi này hiện là kết quả tìm kiếm được xếp hạng cao nhất trên Google cho sự cố này và không có câu trả lời nào ở trên phù hợp với tôi.


Nó không giúp tôi (Samsung Galaxy S4, Android 5.0.1).
CoolMind

2

Giải pháp sau đây có hiệu quả với tôi ...

Tôi đã thử mọi thứ được đề cập ở trên nhưng vẫn không chạy được ứng dụng của mình. Tôi có ứng dụng gốc phản ứng chạy trên phiên bản mới nhất của lớp 4+ và studio android.

Tôi gặp vấn đề là nếu tôi chạy Reac-android run-android thì nó đã thất bại với vấn đề nói rằng nó không thể tìm thấy lớp MainApplication ... tức là ClassNotFoundException

Tôi đã có thể giải quyết vấn đề khi tôi cập nhật gradle.properations của mình để sử dụng trình biên dịch D8.

Tôi đã thêm:

android.enableD8 = đúng

để gradle.properies của tôi

Tài liệu chi tiết tại đây: https://android-developers.googleblog.com/2017/08/next-generation-dex-compiler-now-in.html


1
Android Studio 3.1+ sử dụng trình biên dịch dex này theo mặc định
Lennon Spirlandelli

2

Ashik abbas answer (vô hiệu hóa Instant Run ) hoạt động với tôi, nhưng tôi cần Instant Run , cuối cùng tôi đã tìm thấy giải pháp hữu ích cho tôi. chỉ cần vô hiệu hóa minifyEnables . đi tới build.gradle (Module: ứng dụng) trong khối gỡ lỗi và tắt minifyEnables :

debug {
            minifyEnabled false

        }

1

Theo sự hiểu biết của tôi, tôi gặp sự cố sau khi cập nhật android studio 2.1 lên 2.3 do tính năng tức thời, ứng dụng của tôi sẽ không chạy khi tôi sao chép apk từ đầu ra và đưa vào sdcard. Đối với vấn đề này, tôi xây dựng apk từ tùy chọn xây dựng để xây dựng apk trong studio android.


1

Nếu bạn được kích hoạt minifyEnabledshrinkResourcesthành sự thật trong tập tin lớp ứng dụng của bạn. Bạn cần thêm dòng sau vào proguard-rules.protập tin

-keep class com.yourpackage_name. ** {*; }

bởi vì thu nhỏ được loại bỏ một số lớp quan trọng trong tệp apk của chúng tôi.


Đây không phải là một giải pháp tốt vì nó loại trừ tất cả các tệp nguồn của bạn khỏi bị thu hẹp tài nguyên. Thay vào đó, chỉ loại trừ các tệp thực sự cần thiết, nếu không, bạn sẽ tăng kích thước apk của mình.
Yannick

1

tôi đã có vấn đề này trước đây và các ý kiến ​​ở đây đã giúp đỡ trong quá khứ nhưng lần này thì không. tôi đã kiểm tra cấu hình proguard của mình và tôi đã xóa các dòng sau và sau đó nó hoạt động để proguard có thể có liên quan đến lỗi này:

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

1

Trong trường hợp của tôi, tôi đã sử dụng thư viện không gian tên cũ trong khi dự án của tôi được thiết lập bằng cách sử dụng androidx.

Giải pháp là thay thế android.support.design.widget.BottomNavigationViewthành phần bằng một bên phải để thoát khỏi thư viện hỗ trợ : com.google.android.material.bottomnavigation.BottomNavigationView.


1

trong trường hợp của tôi, tôi xác định Hoạt động trong Manifest.xmlvà quên tạo bất kỳ activity. Vì vậy, tôi đã tạo Activity và xác định nó trong manifestvà lỗi của tôi đã được giải quyết!


0

Nếu bạn nhận được lỗi này sau khi xóa một số phụ thuộc lớp, hãy kiểm tra tệp kê khai của bạn và đảm bảo rằng bạn đã xóa tất cả các mục tương ứng với phụ thuộc đó.


Vui lòng không thêm cùng một câu trả lời cho nhiều câu hỏi. Trả lời câu hỏi hay nhất và đánh dấu phần còn lại là trùng lặp. Xem Có được chấp nhận để thêm một câu trả lời trùng lặp cho một số câu hỏi không?
Petter Friberg

0

Đối với tôi, vấn đề xuất hiện sau khi tôi tạo APK có chữ ký. Để khắc phục, tôi đã tạo một apk mới, gỡ lỗi bằng cách sử dụng APK Run / Build. Sau đó, Run (cmd + r) hoạt động trở lại mà không gặp lỗi này.


0

Tôi đã phải đối mặt với vấn đề tương tự. Tôi đã thử mọi thứ có thể trong một ngày, nhưng không có gì hiệu quả. Sự phụ thuộc gây ra vấn đề là sử dụng sdk biên dịch thấp hơn, sdk đích và sdk tối thiểu. Tôi đã tạo mô-đun thư viện cho dự án, sao chép tất cả các nguồn và khớp các phiên bản sdk với các phiên bản sdk của ứng dụng. Và cuối cùng nó hoạt động như một lá bùa.


0

Tôi đã có cùng một lỗi và một số câu trả lời đánh lừa tôi về một vấn đề người mới. Tôi đã có gói sai trong mô tả chế độ xem tùy chỉnh của tôi như dưới đây. Tôi hy vọng nó sẽ giúp được ai đó.

<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" />
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.