Há um problema com a biblioteca appcompat v7 do Android em dispositivos Samsung executando o Android 4.2. Continuo recebendo falhas com o seguinte rastreamento de pilha no meu console do desenvolvedor:
java.lang.NoClassDefFoundError: android.support.v7.internal.view.menu.MenuBuilder
at android.support.v7.widget.PopupMenu.<init>(PopupMenu.java:66)
at com.[my-package-name].CustomActivity$5.onClick(CustomActivity.java:215)
at android.view.View.performClick(View.java:4222)
at android.view.View$PerformClick.run(View.java:17620)
at android.os.Handler.handleCallback(Handler.java:800)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5391)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)
Esta é a linha 215 de CustomActivity.java:
PopupMenu popup = new PopupMenu(CustomActivity.this, mImageViewMenu);
As falhas vêm de uma variedade de dispositivos, mas sempre Samsung e sempre Android 4.2.
Uma pesquisa rápida na web me leva a acreditar que muitas pessoas têm o mesmo problema. Algumas das etapas que tentei resolver são:
- Verifique as propriedades do projeto Android, verifique se a biblioteca appcompat foi adicionada corretamente.
- Verifique as propriedades do projeto Java Order Path Build e Export e verifique se as Dependências do Android e as Bibliotecas particulares do Android estão marcadas.
- Confirme se a classe está incluída na biblioteca (android.support.v7.internal.view.menu.MenuBuilder).
- Confirme R.java está localizado no diretório gen para android.support.v7.appcompat.
- Confirme se o tema AppCompat está incluído na atividade Manifest.xml.
- Limpe e reconstrua o projeto.
Apesar dessas etapas, e apesar de funcionar em todos os outros dispositivos e versões do Android, os relatórios de falhas ainda são apresentados.
java
android
eclipse
android-appcompat
Matt K
fonte
fonte
Respostas:
EDITAR:
A solução que funcionou para mim foi (Usando Proguard) para substituir isso:
com isso:
O crédito vai para o grupo do Google, nº 138 .
Resposta antiga (solução temporária): Isso acontece em um projeto em que uso um
girador noActionBar. Minha solução foi verificar essas condições e alterar o fluxo do aplicativo:Em seguida, no método onCreate da atividade:
Como apontado, essa não é uma solução definitiva, é apenas uma maneira de permitir que os usuários tenham acesso a funcionalidades limitadas enquanto uma solução mais permanente é encontrada.
fonte
java.lang.NoClassDefFoundError: android.support.v7.internal.view.menu.i
Como o número 150 dos grupos do Google disse
A melhor solução é adicionar as seguintes linhas:
fonte
-keep class !android.support.v7.internal.view.menu.* implements android.support.v4.internal.view.SupportMenu, android.support.v7.** {*;}
-keep class !android.support.v7.internal.view.menu.**,** {*;}
não estava mais funcionando com a v23 do aplicativo compat .-keep class !android.support.v7.internal.view.menu.*MenuBuilder*, android.support.v7.** { *; } -keep interface android.support.v7.** { *; }
como a resposta :)Em qual dispositivo você está enfrentando esse problema? (Samsung / HTC etc.)
Se é Samsung,
Vários telefones Samsung estão incluídos nas versões mais antigas da biblioteca de suporte do Android no framework ou no caminho da classe. Se você usar a nova biblioteca de suporte de material, verá esta falha nos dispositivos Samsung:
Para corrigir isso, você deve renomear essa classe. A maneira mais fácil de fazer isso é executando o proguard. Se você não deseja ofuscar, aqui está um liner para renomear apenas as classes ofensivas:
Há um problema para rastrear esse problema, mas, como é realmente um bug da Samsung, nunca será corrigido. A única maneira de corrigi-lo no lado do Google / AOSP é renomear essas classes internas.
https://code.google.com/p/android/issues/detail?id=78377
fonte
Esse problema retornou no
AppCompat 23.1.1
local em que o.internal
pacote foi removido do jar da biblioteca.Conforme sugerido nos comentários acima (créditos para as pessoas que o sugeriram lá), agora também a configuração do programa precisa mudar.
Para que a resposta sugerida acima funcione novamente, tente adicionar estas linhas aos seus arquivos de programa:
Em vez da correção antiga:
fonte
!android.support.v7.view.menu.**
é mais seguro por causa de outras classes, como SubMenuBuilderDe acordo com as últimas postagens do relatório de erros, isso deve ser corrigido na nova versão da biblioteca de suporte (24.0.0): https://code.google.com/p/android/issues/detail?id=78377 # c374
Alguém até alegou que o consertou.
Esta versão está disponível desde o mês passado , portanto, você deve atualizá-la.
fonte
Sim. A Samsung já conhece esse problema. Posso sugerir que você tente usar a mesma implementação do Popup no GitHub . Não é o melhor caminho, mas serão obras.
fonte
Eu estava tendo o mesmo problema dessa classe MenuBuilder não encontrada no modo de depuração USB. Resolvi esse problema simplesmente configurando o minifyEnabled como true no bloco buildTypes de lançamento e depuração do build.gradle . como isso:
Defino o minifyEnabled como true no tipo de depuração para evitar que o aplicativo falhe via depuração USB em um telefone ativo .
fonte
Ativei o proguard com as propriedades padrão fornecidas com um projeto eclipse e o problema foi corrigido para mim. Com base em alguns comentários aqui https://code.google.com/p/android/issues/detail?id=78377 , algumas pessoas podem precisar reembalar usando: -repackageclasses "android.support.v7"
fonte
Recebi o mesmo erro ao tentar executar um aplicativo 'Hello World' no meu tablet Samsung Galaxy Tab 3 via Android Studio. O aplicativo parece iniciar e, em seguida, falha instantaneamente e esse erro aparece no console do Android Studio. Fiz uma atualização do sistema no tablet e agora consigo executar o aplicativo 'Hello World' e não estou mais recebendo o erro. Espero que isso ajude alguém a resolver seu problema.
Nota: A atualização do sistema que executei no tablet não atualizou a versão do sistema operacional Android, porque ainda diz que a versão é 4.2.2.
fonte
Altere a versão compilar SDK do seu projeto para "API 18: (JellyBean)"
O padrão é definido como "Lollipop
PASSOS
fonte