java.lang.ClassNotFoundException : 경로에서 클래스를 찾지 못했습니다 : dexpathlist


140

현재 순수 네이티브 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에 Activity 이름을 지정했습니다.

<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

@SiddharthVyas 아니오, 이것에 외부 jar 파일을 사용하지 않습니다.
Karthik Sivam

1
애플리케이션이 멀티 덱싱되어 있습니까? 그렇다면 문제를 설명합니다.
IgorGanapolsky

서명 된 apk를했을 때이 오류는 발생하지 않았습니다. 그냥 디버그
j2emanue

작동하는 솔루션을 찾았습니까?
Benobab

답변:


84

가능한 모든 옵션을 시도했지만 결과는 0입니다. 마지막으로 올바른 해결책을 찾았습니다. 즉시 실행을 비활성화하십시오. 파일-> 설정-> 빌드, 실행, 배포-> 인스턴트 실행-> 인스턴트 실행 확인란을 선택 취소하십시오 . 앱을 한 번 실행하면이 apk 파일이 제대로 작동합니다.


11
이것은 Android Studio에 대한 정답입니다. 나는 Instant Run이 여전히 너무
벅차 서 믿을 수 없다고해서

2
나는 며칠, 심지어 몇 주 동안이 답변을 찾고 있습니다! 중요하지는 않지만,이 문제는 마음의 뒤에 있었고 평화를주지 못했습니다. 즉각적인 실행이 이것을 유발하는 것이라고 생각하지 않았습니다. 내 앱은 adb를 통해 시작할 때 정상적으로 작동했지만 apk를 통해 수동으로 설치할 때 항상 ClassNotFound 런타임 기대와 충돌했습니다.
Răzvan Barbu

5
그것은 나에게 해결책이 아닙니다. 나는 즉시 실행을 비활성화했습니다
Terranology

옵션을 비활성화 한 후 Android 스튜디오를 다시 시작하십시오
Ashik Abbas

omg 나는 왜 즉각적인 실행이 범인인지 모르겠지만 실제로는 고마워합니다.
KingKongCoder

63

비슷한 문제가 있었는데 여기 내 해결책이 있습니다.

  1. 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택하십시오 .
  2. 왼쪽 메뉴에서 Java 빌드 경로 를 선택하십시오 .
  3. 주문 및 내보내기 탭을 선택 하십시오.
  4. 목록에서 프로젝트에 추가 한 라이브러리 또는 외부 jar이 선택 되어 있는지 확인하십시오 .
  5. 마지막으로 프로젝트를 정리하고 실행하십시오.

답변을 확인할 수도 있습니다 .


1
이것이 질문에 대한 올바른 해결책입니다. 위와 같은 오류로 libgdx 게임에서 이것을 테스트했습니다. 휴대폰에서 생성 된 로그 (삼성 갤럭시 S6)를 사용하여 이러한 오류를 발견했습니다. 이 솔루션을 적용하면 모든 문제가 해결되었습니다.

25
프로젝트를 마우스 오른쪽 버튼으로 클릭하여 속성을 찾을 수 없습니다. 어리석은 것일 수 있습니다. :(
Zin Min

12
나도 속성을 찾을 수 없습니다, 아무도 나열된 페이지로 이동하는 방법을 알아
Skyler

9
이것은 Eclipse IDE를위한 솔루션입니다. Android Studio에는 기본 'project.properties'파일이 없습니다. 그래도 만들 수 있습니다.
Bot

제공된 솔루션은 Eclipse IDE에만 적용됩니다.
mnsalim

47

이것은 귀하의 경우 문제가되는 것 같습니다. 매니페스트에서 활동의 상대 경로가 올바르지 않습니다.

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

이것을 다음으로 바꾸십시오 :

<activity android:name=".POMActivity"

또는

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

31

장치에서 앱을 삭제하고 프로젝트를 청소하면 나에게 효과적입니다.


2
이것은 반응 네이티브와 함께 저에게도 효과가있었습니다. Android Studio에서 android 폴더를 연 다음 빌드-> 깨끗한 프로젝트. 다음으로 다시 빌드react-native run-android
pinguinos

위의 의견과 동일하게 작동했습니다! 감사 !
Elegya

24

난 그냥보고하여 문제를 이해해야

덱스 오류

그러나이 문제를 해결하는 데 반나절이 걸렸습니다.
안드로이드 개발자 페이지의 지시에 따라이 문제를 해결하십시오 : 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
멀티 덱스를 추가하면 참조 횟수 제한 (56K)를 통과하는 경우에만 유용하고는 매우 불안정하고 매우 이전 롤리팝에 신뢰할 수없는. 최후의 수단으로 문제를 해결하는 데 사용해야합니다.
milosmns

그렇다면 당신에게 어떤 해결책이되어야
합니까

나는 단지 멀티 덱스가 도움이되는 것보다 더 많은 문제를 일으킨다는 것을 말하고 있습니다. 이는 개발자 웹 사이트에 명확하게 나와 있습니다. 답변이 있다면 여기에 없을 것입니다.
milosmns

1
정보 주셔서 감사합니다, 당신이 좋은 솔루션을 발견하면 여기를 업데이트하십시오, 그것은 큰 도움이 될 것입니다.
Akash Bisariya

2
위의 의존성에 라인을 추가하면 나에게 도움이되었습니다.
gadildafissh

23

Clean Project & Rebuild Project를 사용해보십시오 .


1
"빌드"메뉴에서. 선택 빌드 -> 프로젝트 정리 다음과 빌드가 -> 프로젝트를 다시 빌드
kangkyu을

이것은 앱이 로컬에서만 충돌하는 것을 의미하지만 충돌은 릴리스 버전에서도 발생하므로 실제로는 솔루션이 아닙니다.
David

22

이 예외는 레이아웃에 다음과 같이 사용자 정의보기 가있는 경우에도 발생할 수 있습니다 .

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

뷰의 패키지 이름 을 "com.example"에서 다른 이름 으로 변경하지만 레이아웃에서도 변경해야합니다.


이것은 다른 이유로 도움이되었습니다. 철자를 확인하십시오. 맞춤법이 틀린 클래스 이름으로 인해 원래 문제가 발생했습니다.
Berry Wing


12

./gradlew --stop안드로이드 스튜디오 터미널에서 : 명령 을 사용하여 해결했습니다 . 이 명령을 수행 한 후 프로젝트를 정리하고 다시 빌드하십시오.


11
  1. bin 폴더를 삭제하십시오
  2. 도서관의 순서를 바꾸다
  3. 청소 및 재건

나를 위해 일했다.


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

    }
}

Application 태그 안에이 classNameAndroidManifest.xml작성하십시오.

 <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

@CoolMind 확장되는 응용 프로그램 클래스 일뿐 MultiDexApplication입니다. multidex를 사용하려면 필요합니다
Manohar Reddy

동의하다. MultiDexApplication또는 중 하나를 사용합니다 attachBaseContext( developer.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'
}

감사.


응용 프로그램 이름을 변경, 내가 안드로이드 4.3에서 응용 프로그램 실행하려고 할 때 나를 위해 일한
h8pathak을

6

multidex 사용하는 경우 Application 대신 MultiDexAppication을 사용하여 응용 프로그램 클래스를 확장하고 5.0 미만의 Android에 필요한 방법 아래를 재정의하십시오 (5.0 이상의 멀티 덱스 지원)

@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 에서이 오류가 표시되었습니다. 그런 다음 Kotlin 웹 사이트에서 앱 gradle 파일의 Kotlin 버전을 업데이트했습니다. 앱을 다시 빌드하면 정상적으로 작동합니다.


와우, 99 % Kotlin 프로젝트가 있습니다. 어떻게해야합니까? :)
CoolMind

Kotlin 버전이 기본 Android Studio와 호환되므로 확인할 수 있습니까? 그냥 추측입니다. 살펴보세요
Harry. Naeem

AS 3.3.1과 Kotlin 1.3.21이 있습니다. 그들은 최신 안정입니다. 죄송합니다. 위와 아래에 설명 된 모든 솔루션이 내 상황에 적합하지 않다고 생각합니다.
CoolMind 2019

4

한 가지 가능한 이유는 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

나는 삼성 Lollipop 장치에서만이 충돌을 겪고 있었고이 솔루션 은 저에게 효과적 이었습니다.

dexOptions {
     preDexLibraries false
}

이 질문은 현재이 충돌에 대해 Google에서 가장 높은 순위의 검색 결과이며 위의 답변 중 어느 것도 효과가 없기 때문에 여기 에이 답변을 게시하고 있습니다.


그것은 도움이되지 않았습니다 (Samsung Galaxy S4, Android 5.0.1).
CoolMind

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 이상에서는 기본적으로이 덱스 컴파일러를 사용합니다
Lennon Spirlandelli

2

Ashik abbas 답변 ( Instant Run 비활성화 )이 저에게 효과적이지만 Instant Run이 필요합니다 . 마침내 도움이되는 솔루션을 찾았습니다. minifyEnabled 비활성화 하십시오 . 디버그 블록 에서 build.gradle (Module : app) 으로 이동하여 minifyEnabled를 비활성화 하십시오 .

debug {
            minifyEnabled false

        }

1

내 stastading에 따라 인스턴트 기능으로 인해 android studio 2.1을 2.3으로 업데이트 한 후 문제가 발생합니다. 내 APK를 출력에서 ​​복사하여 sdcard에 넣을 때 응용 프로그램이 실행되지 않습니다. 이 문제에 대해 빌드 옵션에서 APK를 빌드하면 Android Studio에서 APK를 빌드합니다.


1

앱 gradle 파일에서 활성화 minifyEnabled되어 shrinkResources있고 true 인 경우. proguard-rules.pro파일에 다음 줄을 추가해야 합니다

-com.yourpackage_name 클래스를 유지하십시오. ** {*; }

apk 파일에서 축소가 일부 중요한 클래스가 제거 되었기 때문입니다.


리소스 축소에서 모든 소스 파일을 제외하므로 좋은 해결책이 아닙니다. 대신 실제로 필요한 파일 만 제외하십시오. 그렇지 않으면 APK 크기가 부풀려집니다.
Yannick

1

나는이 문제를 전에 가지고 있었고 여기에있는 의견은 과거에 도움이되었지만 이번에는 그렇지 않았습니다. proguard 구성을 확인 하고 다음 줄을 제거한 다음 proguard 가이 오류와 관련이있을 수 있도록 작동했습니다.

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

1

내 경우에는 이전 네임 스페이스 라이브러리를 사용했지만 프로젝트는 androidx 하나를 사용하도록 설정되었습니다.

해결책은 android.support.design.widget.BottomNavigationView지원 라이브러리에서 벗어나기 위해 구성 요소를 올바른 것으로 교체 하는 것 com.google.android.material.bottomnavigation.BottomNavigationView입니다.


1

내 경우에는 Activity를 정의 Manifest.xml하고을 만드는 것을 잊었습니다 activity. 그래서 Activity를 만들고 그것을 정의 manifest하고 내 오류가 해결되었습니다!



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.