java.lang.ClassNotFoundException: não encontrou a classe no caminho: dexpathlist

139

Atualmente, estou trabalhando em um projeto no qual tenho que usar o ndk puramente nativo. Funcionou quando tento executar um exemplo do mundo hellow da fonte do motor Irrlicht. Então eu tento usá-lo no meu projeto seguindo o mesmo formato desse exemplo. Mas eu tenho:

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

enquanto estiver executando meu projeto.

Aqui está o meu arquivo 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");
}

#fim se

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

E eu dei o nome da atividade no 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" />                     

Qual é o erro que estou cometendo aqui? Vou postar o código completo, se necessário.

Karthik Sivam
fonte
1
Você está usando algum arquivo jar externo?
Siddharth_Vyas
@SiddharthVyas Não, não estou usando arquivos jar externos nisso.
Karthik Sivam
1
Seu aplicativo é multi-dexed? Se sim, então isso explica o problema.
IgorGanapolsky
quando eu fiz um apk assinado este erro não aconteceu. Apenas depuração
j2emanue 5/17
Você encontrou uma solução funcional?
Benobab

Respostas:

84

Eu tentei todas as opções possíveis, mas o resultado é zero. Finalmente eu encontrei a solução correta que é útil para mim. Basta desabilitar a Execução Instantânea. Vá para Arquivo -> Configurações -> Construção, Execução, Implantação -> Execução Instantânea -> Desmarque a caixa de seleção para execução instantânea . Execute seu aplicativo uma vez e este arquivo apk funcionará corretamente.

Ashik Abbas
fonte
11
Esta é a resposta correta para o Android Studio. Eu não posso acreditar que o Instant Run ainda seja tão problemático ao ponto que você precise desativá-lo para evitar surpresas desagradáveis ​​... #
315
2
Eu tenho procurado por esta resposta por dias, até semanas! Embora não seja crítico, esse problema está no fundo da minha mente, não me dando paz. Nunca pensei que a corrida instantânea fosse a única a desencadear isso. Meu aplicativo funcionou bem quando iniciado via adb, mas sempre travava com a expectação do tempo de execução ClassNotFound ao instalá-lo manualmente via apk.
Răzvan Barbu
5
Essa não é a solução para mim. Eu tinha desativado o instant run
Terranology
Depois de desabilitado as opções. Por favor, reinicie o seu estúdio android
Ashik Abbas
omg eu não sei por que a corrida instantânea é a culpada, mas é de fato, obrigado cara.
KingKongCoder
63

Eu tive um problema semelhante, aqui está a minha solução:

  1. Clique com o botão direito do mouse no seu projeto e selecione Propriedades .
  2. Selecione Java Build Path no menu à esquerda.
  3. Selecione a guia Ordem e exportação .
  4. Na lista, verifique se as bibliotecas ou jars externos adicionados ao seu projeto estão marcados .
  5. Finalmente, limpe seu projeto e execute.

Você também pode verificar esta resposta.

mnsalim
fonte
1
Esta é a solução correta para a pergunta. Eu testei isso com meu jogo libgdx com os mesmos erros encontrados acima. Encontrei esses erros usando o log gerado com o meu telefone (samsung galaxy S6). Depois de aplicar esta solução, todos os meus problemas foram resolvidos.
25
Não consigo encontrar Propriedades com o botão direito do mouse no projeto. Pode ser que eu sou estúpido. :(
Zin Min
12
Não consigo encontrar propriedades quer, ninguém descobrir como para navegar até a página indicada
Skyler
9
Esta é uma solução para o Eclipse IDE. Não há arquivo padrão 'project.properties' no Android Studio. Pode ser criado embora.
Bot
A solução fornecida é aplicável apenas ao Eclipse IDE.
mnsalim 10/03
47

Isso parece ser um problema no seu caso. O caminho relativo da sua atividade no manifesto não está correto:

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

substitua por:

<activity android:name=".POMActivity"

ou

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

A exclusão do aplicativo no dispositivo e a limpeza do projeto funcionam para mim

Vlad
fonte
2
Isso funcionou para mim também com reagir nativo. Abri a pasta android com o Android Studio e construí -> projeto limpo. Reconstruído comreact-native run-android
pinguinos
Fiz o mesmo que o comentário acima e funcionou! Obrigado !
Elegya
24

Eu deveria entender o problema apenas vendo

erros de dex

Mas demorou meio dia para corrigir o problema.
Corrijo isso seguindo as instruções da página de desenvolvedores do Android: https://developer.android.com/studio/build/multidex.html

Primeiro adicione isso ao arquivo gradle.build:

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

    // Enabling multidex support.
    multiDexEnabled true
}

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

Em seguida, estenda a classe Application com a MultiDexApplicationclasse conforme as instruções no link acima (ou declare a classe do aplicativo AndroidManifest.xmlou substitua a attachBaseContext()função, se não for possível estender a classe do aplicativo).

Isso é tudo e resolveu o problema.

Akash Bisariya
fonte
1
A adição de multi-dex é útil somente quando você ultrapassa o limite de contagem de referência (56k), e é muito instável e pouco confiável antes do Lollipop. Isso deve ser usado para corrigir problemas como último recurso.
precisa saber é
então qual deve ser a solução de acordo com você
Akash Bisariya
Só estou dizendo que o multi-dex causa mais problemas do que ajuda, o que é claramente indicado no site do desenvolvedor. Eu não estaria aqui procurando uma resposta se eu tivesse uma, estaria?
milosmns
1
Ok, obrigado pela informação. Atualize aqui se você encontrou uma boa solução, seria uma grande ajuda.
Akash Bisariya
2
Adicionar a linha nas dependências acima fez isso por mim.
gadildafissh
23

Basta tentar Limpar Projeto e Reconstruir Projeto .

nicolas asinovich
fonte
1
No menu "Build". Selecione Build -> Clean Project e depois Build -> Rebuild Project
kangkyu
Isso implica que o aplicativo trava apenas localmente, mas o travamento também ocorre em uma versão de lançamento, portanto, essa não é realmente uma solução.
David
22

Essa exceção também pode ocorrer quando você tem uma visualização personalizada em seu layout, como esta:

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

e você altera o nome do pacote da visualização de "com.example" para algo diferente, mas também esquece de alterá-lo no layout.

petrnohejl
fonte
Isso foi útil por um motivo diferente. Verifique sua ortografia. Eu tinha um nome de classe com erros ortográficos, causando o problema original.
Berry Wing
12

eu resolvi usando: ./gradlew --stopcomando no terminal do android studio. Após executar este comando, limpe e reconstrua o projeto.

Ali Gürelli
fonte
11
  1. excluir a pasta bin
  2. alterar a ordem das bibliotecas
  3. limpar e reconstruir

trabalhou para mim.

crazyjune
fonte
10

Para qualquer pessoa que esteja habilitando multidex, escreva

dentro de 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'
}

escreva uma aula EnableMultiDexcomo abaixo

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

    }
}

e AndroidManifest.xmlescreva este className dentro da tag 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">
Manohar Reddy
fonte
Como isso enableMultiDexafeta? No meu caso javaMaxHeapSize "4g"não ajudou.
CoolMind 18/02/19
@CoolMind É apenas uma classe de aplicativo que se estende MultiDexApplication. É necessário se você quiser usar multidex
Manohar Reddy
Aceita. Eu uso MultiDexApplicationou attachBaseContext(consulte developer.android.com/studio/build/multidex ).
CoolMind 18/02/19
8

Eu enfrentei esse problema várias vezes e todos foram resolvidos com a desativação da execução instantânea .

Mohamed Nageh
fonte
Tentei várias soluções, essa pequena coisa resolveu o problema, inacreditável!
FraK 18/07/19
@FraK, a solução mais votada contém este conselho. Embora eu já tivesse desmarcado o Instant Run (vários anos, ele trouxe muitos bugs).
CoolMind 18/02/19
7

Não precisamos ter uma classe Application personalizada que estenda o MultiDexApplication . Em vez disso, podemos ter isso no 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">

E junto com isso no build.gradle (Módulo: app),

defaultConfig {
      ...

      // Enabling multidex support.
      multiDexEnabled true
}

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

Obrigado.

Abdul Gaffar
fonte
Alterar o nome do aplicativo, funcionou para mim quando eu estava tentando executar o aplicativo no Android 4.3
h8pathak
6

Quando você estiver usando multidex, tente estender sua classe de aplicativo com MultiDexAppication em vez de Application e substitua o método abaixo, exigido para Android abaixo de 5.0 (porque 5.0 e superior suportam o multidex)

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

e nas dependências adicione isso

compile 'com.android.support:multidex:1.0.1'
kabore abdoul mohamine
fonte
Deveríamos substituir esse método se estendermos de Application. Por que devemos substituir em um caso de MultiDexAppication?
CoolMind 18/02/19
4

Basta alterar o nome da pasta de libpara libs,

Em seguida, você verá algumas marcas de erro no seu projeto, para resolver esse direito. Clique no projeto>

Properties > Java Build Path > libraries :

Remova toda a biblioteca com marcas vermelhas e apply > ok >depois limpe seu projeto . TADA veja a mágica :)

hemantsb
fonte
nome da pasta é libs única
Assassino
4

No meu caso, esse problema surgiu por causa do Kotlin. No meu código existente, havia uma classe que foi escrita em Kotlin. Eu criei o aplicativo, ele foi instalado e, assim que a primeira atividade foi aberta, o aplicativo travou. no logcat esse erro estava sendo mostrado. Atualizei minha versão do Kotlin do site da Kotlin no arquivo gradle do aplicativo. Crie o aplicativo novamente e funcionou bem.

Harry .Naeem
fonte
Uau, eu tenho um projeto com 99% de Kotlin O que fazer? :)
CoolMind 18/02/19
Você pode verificar, com a versão Kotlin é compatível com o seu Android Studio subjacente. É apenas um palpite. dê uma olhada
Harry .Naeem 19/02/19
Eu tenho o AS 3.3.1 e o Kotlin 1.3.21. Eles são mais recentes estáveis. Desculpe, suponho que todas as soluções descritas acima e abaixo não sejam adequadas à minha situação.
CoolMind 19/02/19
4

Um possível motivo seria o caminho incorreto da atividade no arquivo Apps AndroidManifest.xml. Registre a atividade no seu AndroidManifest.xml com o caminho relativo completo, como abaixo.

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

Depois de tentar as respostas fornecidas, descobri outro motivo para a mesma exceção: eu tinha que adicionar a biblioteca que estou usando manualmente à minha biblioteca principal através

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

Antes desta solução, usei a "Fix Project setup" de dentro do arquivo .java no eclipse, mas como não funcionou, tive que adicioná-lo manualmente aqui e funcionou

Ahmed Adel Ismail
fonte
3

Eu estava recebendo essa falha apenas em dispositivos Samsung Lollipop e esta solução funcionou para mim.

dexOptions {
     preDexLibraries false
}

Estou postando esta resposta aqui, porque atualmente esta pergunta é o resultado de pesquisa mais bem classificado no Google para esta falha e nenhuma das respostas acima funcionou para mim.

blinkmacalahan
fonte
Isso não me ajudou (Samsung Galaxy S4, Android 5.0.1).
CoolMind 18/02/19
2

A seguinte solução funcionou para mim ...

Eu tentei tudo mencionado acima, mas ainda não consegui meu aplicativo em execução. Eu tenho o aplicativo nativo de reação em execução na versão mais recente do gradle 4+ e no android studio.

Eu tive o problema em que, se eu executar o react-native run-android, ele estava falhando com o problema, dizendo que não é capaz de encontrar a classe MainApplication ... ou seja, ClassNotFoundException

Consegui resolver o problema quando atualizei meu gradle.properties para usar o compilador D8.

Eu adicionei:

android.enableD8 = true

ao meu gradle.properties

Detalhes do documento aqui: https://android-developers.googleblog.com/2017/08/next-generation-dex-compiler-now-in.html

nkadu1
fonte
1
O Estúdio Android 3.1+ usa esta complier dex por padrão
Lennon Spirlandelli
2

Resposta Ashik abbas (desativar o Instant Run ) funciona para mim, mas eu preciso do Instant Run , finalmente encontrei a solução que é útil para mim. basta desativar o minifyEnabled . vá para build.gradle (Module: app) no bloco de depuração e desative minifyEnabled :

debug {
            minifyEnabled false

        }
hofs
fonte
1

De acordo com meu entendimento, eu recebo o problema após a atualização do android studio 2.1 a 2.3 devido ao recurso instantâneo, meu aplicativo não será executado quando eu copiar o apk da saída e colocar no sdcard. Para este problema, eu construo o apk da opção de compilação do build apk no android studio.


fonte
1

Se você estiver ativado minifyEnablede shrinkResourcesverdadeiro no arquivo de classificação do aplicativo. Você precisa adicionar a seguinte linha no proguard-rules.proarquivo

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

porque a minificação foi removida algumas classes importantes em nosso arquivo apk.

Naveen Kumar M
fonte
Essa não é uma boa solução, pois exclui todos os arquivos de origem do encolhimento de recursos. Exclua apenas apenas os arquivos realmente necessários; caso contrário, você aumentará o tamanho do seu apk.
Yannick
1

Eu tive esse problema antes e os comentários aqui ajudaram no passado, mas desta vez não. Verifiquei minha configuração do proguard e removi as seguintes linhas e funcionou para que o proguard possa ter algo a ver com esse erro:

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

No meu caso, usei a antiga biblioteca de namespace enquanto meu projeto era configurado usando o androidx one.

A solução foi substituir android.support.design.widget.BottomNavigationViewcomponente com o caminho certo para fugir da biblioteca de suporte: com.google.android.material.bottomnavigation.BottomNavigationView.

Andrii Artamonov
fonte
1

no meu caso, defino a Atividade Manifest.xmle esqueci de criar alguma activity. Então eu criei Activity e defini-lo manifeste meu erro foi resolvido!

sana ebadi
fonte
0

Para mim, o problema apareceu depois que eu criei um APK assinado. Para corrigi-lo, criei um novo apk de depuração usando o Run / Build APK. Depois disso, Executar (cmd + r) funciona novamente sem esse erro.

passatgt
fonte
0

Eu estava enfrentando o mesmo problema. Eu tentei todo o possível por um dia, mas nada funcionou. A dependência que estava causando o problema estava usando menor compilação sdk, destino sdk e min sdk. Criei o módulo de biblioteca para o projeto, copiei todas as fontes e combinei as versões do sdk com as versões do aplicativo sdk. E, finalmente, funcionou como um encanto.

PK Gupta
fonte
0

Eu tive o mesmo erro e algumas respostas me enganam sobre um problema de novato. Eu tinha o pacote errado no meu descritor de exibição personalizado, como abaixo. Espero que ajude alguém.

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