Android ClassNotFoundException: não encontrou classe no caminho

97
10-22 15:29:40.897: E/AndroidRuntime(2561): FATAL EXCEPTION: main
10-22 15:29:40.897: E/AndroidRuntime(2561): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.gvg.simid/com.gvg.simid.Login}: java.lang.ClassNotFoundException: Didn't find class "com.gvg.simid.Login" on path: DexPathList[[zip file "/data/app/com.gvg.simid-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.gvg.simid-1, /vendor/lib, /system/lib]]
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2137)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.os.Looper.loop(Looper.java:137)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.app.ActivityThread.main(ActivityThread.java:5103)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at java.lang.reflect.Method.invokeNative(Native Method)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at java.lang.reflect.Method.invoke(Method.java:525)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at dalvik.system.NativeStart.main(Native Method)
10-22 15:29:40.897: E/AndroidRuntime(2561): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.gvg.simid.Login" on path: DexPathList[[zip file "/data/app/com.gvg.simid-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.gvg.simid-1, /vendor/lib, /system/lib]]
10-22 15:29:40.897: E/AndroidRuntime(2561):     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:53)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2128)
10-22 15:29:40.897: E/AndroidRuntime(2561):     ... 11 more

Não tenho certeza do que está causando isso, pois está listado corretamente no manifesto:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.gvg.simid"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_LOGS" />
    <uses-permission android:name="android.permission.READ_OWNER_DATA" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_OWNER_DATA" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />

    <uses-feature android:name="android.hardware.usb.host" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.gvg.simid.Login"
            android:label="@string/app_name" 
            android:screenOrientation="landscape">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Eu também adicionei "Bibliotecas privadas do Android" para construir o caminho e movi-o para o topo de "Ordem e exportação", mas ainda me deu o mesmo erro.

EDITAR: reconstruí o projeto completamente e não consegui reproduzir o erro. Não tenho certeza do que estava causando isso.

Phito
fonte
2
você está usando o proguard?
Juangcg,
Proguard não está habilitado.
Phito,
Verifique esta postagem: stackoverflow.com/questions/10866431/…
Juangcg,
tente ".Login" em android: nome, em vez disso, o Android acrescentará o resto do prefixo sozinho se não puder detectá-lo. Pode ser apenas um problema de análise estranho com Eclipse
Darryl Bayliss
@Juangcg Eu li aquele post antes de fazer este, mas infelizmente tudo que tentei de lá não funcionou.
Phito,

Respostas:

76

Eu tive o mesmo problema para meu projeto. Aconteceu devido ao conflito na versão da biblioteca de suporte do Android entre meu projeto e o projeto de biblioteca que adicionei ao meu projeto. Coloque a mesma versão da biblioteca de suporte do Android em seu projeto e projetos de biblioteca incluídos e compilação limpa ... Tudo funcionará ...

Balaji Dhanasekar
fonte
3
Obrigado cara !!! Eu tinha certeza que já tinha feito, mas verifiquei e as versões eram diferentes! Muito obrigado!
Rodrigo Venancio
2
eu comento isso para lembrar da próxima vez que "atualizar" o SDK, veja esta resposta
Enrique San Martín
1
Alguma idéia de por que o problema acontece se eu não uso as bibliotecas de suporte?
Budda
33

Este método a seguir funcionou para mim

  • Clique com o botão direito no seu projecte selecioneproperties
  • O painel "Propriedades para" será aberto. No menu à esquerda, vá para Java Build Path->Order and Export
  • Na lista abaixo, desmarque a caixa ao lado de "Android Dependencies"
  • Finalmente clean your projecte corra
Chris
fonte
8
Isso funcionou para mim. Qual é o significado de "Dependências do Android" e por que isso ajudou neste caso específico?
Oleg Gryb
Funcionou perfeitamente para mim! Muito obrigado!
prajitdas
7
Estas instruções são para eclipse? Não consigo seguir estas instruções para o Android Studio. O que é meu project? O que isso significa?
Adam Johns
1
Sim, essas instruções são para o eclipse
Chris,
2
Este link contém etapas para o Android Studio stackoverflow.com/questions/18533054/…
Joseph Selvaraj
13

Para aqueles de vocês que estão tendo esse problema em Android Studio, eu tive o mesmo problema depois de uma fusão e, por algum motivo ainda persistiu após cleane invalidate cash/restartoperações que estava me deixando louca.

Acontece que ele pode ser consertado executando o gradle build uma vez na linha de comando. Basta executar o seguinte no diretório do projeto:

./gradlew assemble clean
./gradlew assemble

Eu espero que isso economize a perda de tempo e frustração que eu tive que passar.

Iman Akbari
fonte
Funcionou para mim também
davedavedave
12

Eu tive o mesmo problema, isso funcionou para mim

1) Caminho completo da atividade no mainfest no lugar do caminho relativo.

2) Exclua a pasta 'build' e limpe o projeto.

Ram Mehar Deswal
fonte
Excluir a pasta de construção funcionou para mim. Perdi algumas horas com esse problema, obrigado
Guy S,
Funcionou para mim também. Obrigado.
Dushyant Suthar
Este é o negócio real. XD
noob-Sci-Bot
9

Se você estiver usando o Eclipse, experimente Projeto -> Limpar

Danilo Silva
fonte
Works for android studio - Clean / Rebuild project and run
frcake
8

Se você adicionou um novo Library Projectcomo um módulo ao seu projeto Android e está usando Kotlinna sua biblioteca , não se esqueça de adicionar

apply plugin: 'kotlin-android'

no início do arquivo Gradle do seu módulo. O Android Studio não adiciona esta linha quando você cria um novo módulo e isso pode desperdiçar suas horas como eu.

Edit: Depois de um tempo, acabei de lutar com esse problema novamente e desta vez esqueci de adicionar meu módulo como uma dependência do projeto. :)

savepopulation
fonte
Resolvi para mim e só queria postar uma resposta. Quem pula para a página dois em SO para uma solução?
Kuno
Esse problema acontece quando usamos o projeto de biblioteca java ... esta solução corrigiu meu problema
Devrath,
Isso me ajudou, obrigado :)
Sreekanth Karumanaghat
7

Isso acontece se mudarmos o caminho de construção do APP, isso pode ser em qualquer caso de adição ou remoção ou alteração de bibliotecas ou arquivo .jar. A melhor solução é reiniciar o Eclipse.

pioneerBhawna
fonte
6

Se você receber esse erro ao usar o novo recurso Instant Run no Android Studio 2.0 e superior, isso é algum tipo de bug da parte deles.
Para corrigir isso, você terá que parar seu aplicativo manualmente no dispositivo / emulador se ele não for interrompido a partir do Android Studio select BuildRebuild Project.
Em seguida, clique no botão Executar ou SHIFT + F10

vovahost
fonte
6

Para qualquer um que tenha o multidex habilitado, escreva isto

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 do aplicativo

 <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
ohhhhh mahn ... resposta perfeita ... vi esta resposta, mas ninguém votou, então eu negligenciei isso e fui para as respostas votadas, mas não funcionou ... finalmente, acabei de testar esta e consegui, obrigado mahn. :) :) :) :)
Sachin Varma
que bom que ajudou :)
Manohar Reddy
2
O ponto principal é estender o aplicativo da MultiDexApplicationclasse em vez de Application.
VSB
Obrigado. Já possuí algum Aplicativo no Manifesto. Prolongou-o MultiDexApplicatione a exceção desapareceu no Android 4.4.
CoolMind de
6

Se você estiver usando o Multidex no Android 4.4 e anterior, seu problema pode ser que sua classe de atividade está localizada no segundo arquivo dex e, portanto, não foi encontrada pelo sistema Android.

Para manter sua aula de atividade no arquivo dex principal, consulte esta página:

https://developer.android.com/studio/build/multidex.html#keep


Para descobrir quais classes estão localizadas em um arquivo dex, use o Android Studio .

Basta arrastar e soltar seu apk no Android Studio. Você deve ser capaz de ver seus arquivos dex no explorador apk.

Em seguida, selecione o arquivo dex para ver quais classes estão dentro.


outra alternativa é dexdump:

Você pode verificar o conteúdo de seus arquivos dex contidos em seu apk usando o comando dexdump que pode ser encontrado em

android-sdk / build-tools / 27.0.3 / dexdump

Para usuários do Windows, veja esta ferramenta que fiz para facilitar o processo

BenBenMushi
fonte
1
Ao vincular sua própria ferramenta, certifique-se de declarar que você é o proprietário dela .
LW001
5

No meu caso, foi o processo de minificação do Proguard que removeu algumas classes importantes do meu apk de produção.

A solução foi editar o arquivo proguard-rules.pro e adicionar o seguinte:

-keep class com.someimportant3rdpartypackage.** { *; }
Seja livre
fonte
3

1) Crie a pasta libs na raiz do projeto
2) Copie e cole o arquivo jar nele
3) Configure o caminho de construção (Adicionar jar)
4) Limpe e execute

cheers :-)

Mohanraj Balasubramaniam
fonte
3

Acredite em mim ou não ... Tentei quase todas as respostas que encontrei aqui no stackoverflow. Nada ajudaria, até que eu simplesmente reiniciei a máquina. Meu Android Studio funciona no Ubuntu 16.04 LTS.

Piotr Miller
fonte
Mesmo aqui, tentei tudo e reinicie seguindo seu comentário. Eu vi em minha saída uma referência a um nome de classe refatorado que "Não foi possível encontrar", apesar de eu ter apagado toda a pasta de compilação .. apenas iniciando o android
Alwin Kesler
2

Eu enfrentei esse erro uma vez quando defini uma classe que estendia uma visão, mas fazia referência a essa visão customizada no arquivo de layout com o nome errado. Em vez de <com.example.customview/>, incluí <com.customview/>no arquivo de layout XML.

Preço
fonte
2

Eu enfrentei o mesmo problema e resolvi fazendo o seguinte:

No menu de construção, selecione

1- Projeto limpo.

2- Construir APK.

Aaeb
fonte
Eu sempre passo horas procurando por soluções no SO e acabo limpando -> construir é tudo que eu tinha que fazer.
Shishir Shetty
2

Eu encontrei o mesmo problema e notei que o código de amostra foi colocado no diretório "java" em vez do diretório "src". Depois de mover o código para src, o problema foi resolvido.

Além disso, certifique-se de que o diretório do aplicativo esteja dividido em várias pastas. por exemplo, /main/com/site/appname/não/main/com.site.appname/

Espero que funcione ~

Weiweia
fonte
Você acertou o problema que eu tinha na cabeça! Não dormi o suficiente, nem percebi que as classes estavam na pasta Java :)
bran.io
2

Enfrento o mesmo problema e, depois de muito trabalho e pesquisa, descobri a solução: limpei o projeto e construí o apk. -Build-> Clean Project -Build-> Build APK (s) Espero que seja útil .....

Mohamad Abdallah
fonte
1

Tive esse problema recentemente e estou usando o Android Studio 0.8.4

O problema foi que decidi renomear um arquivo de layout de menu XML que se chamava main.xml.

Clique com o botão direito nele e escolha Refatorar -> Renomear . Antes de renomeá-lo, desmarque "Pesquisar em comentários e strings" e pressione Refatorar .

Como meu arquivo foi originalmente denominado 'principal' , ele renomeou os caminhos críticos no app.iml e build.gradle, principalmente java.srcDirs no build.gradle, uma vez que o caminho é definido como'src/main/java' .

Espero que isso ajude qualquer pessoa que possa estar enfrentando esse problema.

GoranZarkovic
fonte
1

Tive este problema após a atualização da versão 18. Após a atualização, tive o seguinte: O destino da compilação do projeto era 5.01, targetSDKVersion = 21

Mas: Build Tools ainda eram do Android 4.3.1 (18) O que eu percebi foi que aqueles aplicativos que estavam derivando suas atividades do ActionBarActivity travaram com o erro acima aqueles que ainda não rodavam.

Portanto, a correção simples foi usar o Android SDK Build Tools 21.1.2 mais recente em vez de apenas aqueles do Android SDK Build Tools 18, que parece de alguma forma o padrão.

Portanto, o culpado parece ser a biblioteca Appcompat, que uso para compatibilidade com versões anteriores da Actionbar.

E a propósito : usando a biblioteca appcompat, eu tive que definir / corrigir: $SDKInstallDIR$\Android\android-sdk\extras\android\support\v7\appcompat\project.properties target=android-21(que foi recomendado em alguma outra postagem útil e que tem um valor de 19 por padrão))

Peter Rudnik
fonte
1

Eu tive o mesmo problema no Windows. Eu havia renomeado o caminho do projeto para algo contendo um espaço.

Certifique-se de que o caminho para o seu projeto não contenha um espaço.

Vincent Hubert
fonte
De que caminho você está falando?
Quality Catalyst
1

Solução mencionada aqui -> A solução Multidex Issue funcionou para mim. Abaixo está o que precisa ser adicionado ao contexto do aplicativo:

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

Eu tive esse problema, levantado por várias causas, mas vejo isso no seu stacktrace " **Unable to instantiate activity ComponentInfo{...}: java.lang.ClassNotFoundException: Didn't find class "..." on path: DexPathList[[**", encontrei uma diferença no meu .classpathantes de parar de funcionar.

 <?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
    <classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
    <classpathentry kind="src" path="gen"/>
    <classpathentry kind="output" path="bin/classes"/>
</classpath>

Eu ADICIONEI a linha:

<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>

Esta é a versão final:

  <?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
    <classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
    <classpathentry kind="src" path="gen"/>
    <classpathentry kind="output" path="bin/classes"/>
</classpath>

Agora funciona! =)

Jorgesys
fonte
0

Eu tive exatamente o mesmo problema. Como @weiweia sugeriu, mova o código do diretório java para src funcionou para mim. Também removi as dependências do Android de Projeto -> Propriedades -> Caminho de construção Java -> Pedido e exportação e certifiquei-me de incluir apenas projetos de biblioteca na tela do Android.

farelo
fonte
0

Eu tive esse problema por um bom tempo e, como todo mundo, as respostas acima não se aplicavam ao meu projeto.

No meu projeto, eu tinha vinculado um projeto ao meu projeto e ele estava jogando ClassDefNotFoundError toda vez que algum código para o outro projeto era executado.

Então essa foi a minha solução. Fui às propriedades do projeto do meu projeto e ao Java Build Path. Pressionei a aba "Fonte" e "link fonte" da pasta src do outro projeto para o meu próprio projeto e nomeou uma nova pasta "core-src".

Espera que esta solução ajude alguém

user3906863
fonte
0

Eu tive o mesmo problema. Estou usando o Xamarin.Android.

O problema no meu caso foi que alterei versionCode e versionName.

Eu não tive nenhum problema quando os coloquei assim:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="pac.ka.ge" android:versionCode="1" android:versionName="1.0" android:installLocation="auto">

O problema apareceu quando eu mudei para este (versionCode 2 e versionName 0.0.1):

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package=" pac.ka.ge " android:versionCode="2" android:versionName="0.0.1" android:installLocation="auto">

Corrigi o problema alterando para versionCode 2 e versionName 1.0.0.1, assim:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package=" pac.ka.ge " android:versionCode="2" android:versionName="1.0.0.1" android:installLocation="auto">

Não sei por que isso foi um problema, talvez o Android não goste de um versionName inferior com um versionCode superior?

Encontrei o seguinte em http://developer.android.com/guide/topics/manifest/manifest-element.html#vname

android: versionCode Um número de versão interno. Este número é usado apenas para determinar se uma versão é mais recente do que outra, com números mais altos indicando versões mais recentes. Este não é o número da versão mostrado aos usuários; esse número é definido pelo atributo versionName. O valor deve ser definido como um número inteiro, como "100". Você pode defini-lo como quiser, desde que cada versão sucessiva tenha um número maior. Por exemplo, pode ser um número de construção. Ou você pode traduzir um número de versão no formato "xy" para um inteiro codificando o "x" e o "y" separadamente nos 16 bits inferiores e superiores. Ou você pode simplesmente aumentar o número em um cada vez que uma nova versão for lançada.

android: versionName O número da versão mostrado aos usuários. Este atributo pode ser definido como uma string bruta ou como uma referência a um recurso de string. A string não tem outro propósito a não ser ser exibida aos usuários. O atributo versionCode contém o número de versão significativo usado internamente.

PeterH
fonte
0

Apenas no caso de alguém enfrentar o mesmo problema que eu e nenhuma sugestão de resposta aqui ajuda.

Para mim, a causa era que o refator de estúdio do Android tinha bugs. Mudei uma classe interna para fora de uma classe, que era uma View e, portanto, também tinha um xml, onde o caminho direto foi definido. Este caminho não será refatorado pelo studio! E nenhum erro será lançado.

Espero que isso ajude alguém. Felicidades.

JacksOnF1re
fonte
0

No nosso caso queríamos compilar a versão do Vagrant e tivemos o mesmo erro. Nós fixa-lo clean projecte rebuild projectno menu Build

Rafael
fonte
0

Acabei de reiniciar o dispositivo e executei o aplicativo. Funcionou sem problemas. Espero que isso ajude alguém :)

Kameswari
fonte
0

Encontrei este erro no Android Studio quando tentei fazer o debug em um dispositivo com API 23 , então verifiquei o Android Studio e percebi que não tinha instalado esta versão API 23 . Após a instalação, resolvi o problema.

Rodrigo Celebrone
fonte
0

Eu tive esse problema várias vezes e muitas vezes não fazia algo obviamente errado com as dependências.

É sempre uma boa ideia verificar se essa classe 'não encontrada' está presente no apk final. Se for, como aconteceu nos meus casos, o problema geralmente é:

Não é que determinada classe não foi encontrada, mas não pode ser carregada porque sua superclasse está faltando.

Verifique se a classe que você estende está disponível e tente corrigir seu script de construção ou dependências de acordo.

Michalbrz
fonte