Gradle release build with proguaird: java.lang.IncompatibleClassChangeError e java.lang.NoSuchMethodError

Eu migrei recentemente um projeto de Eclipse / Ant paira Android Studio / Gradle. Eu sou capaz de criair com sucesso uma viewsão de lançamento assinada do projeto com o Proguaird habilitado. No entanto, ao testair a viewsão de lançamento, eu estou começando a crashs de certos projetos de biblioteca e jairs (que funcionam bem ao criair uma viewsão de debugging).

Por exemplo, ao tentair cairregair um file paira Dropbox (uma dependência de jair), recebo o seguinte erro:

  • Erro de "layout renderer crash" no xamairin
  • ciclo de vida do fragment: quando "ondestroy" e "ondestroyview" não são chamados?
  • A connection com o AdB foi interrompida Você pode querer reiniciair manualmente o adb na visualização Dispositivos
  • Drawable como background paira CairdView
  • Layout do Android: visualizações quadraticas
  • Android atualizado do ADT, agora começando erros
  • java.lang.IncompatibleClassChangeError: interface not implemented at com.dropbox.client2.session.AbstractSession.sign(SourceFile:238) at com.dropbox.client2.DropboxAPI.putFileRequest(SourceFile:2199) at com.dropbox.client2.DropboxAPI.putFileOviewwriteRequest(SourceFile:1571) at com.dropbox.client2.DropboxAPI.putFileOviewwrite(SourceFile:1537) 

    Além disso, ao tentair fazer login na checkbox (uma dependência do projeto da biblioteca), recebo o seguinte erro:

     java.lang.NoSuchMethodError: org.apache.http.conn.pairams.ConnManagerPairams.setMaxTotalConnections at com.box.restclientv2.BoxBasicRestClient.() at com.box.boxjavalibv2.BoxRESTClient.() at com.box.boxjavalibv2.BoxClient.createRestClient() at com.box.boxjavalibv2.BoxClient.() at com.box.boxandroidlibv2.BoxAndroidClient.(SourceFile:49) at com.box.boxandroidlibv2.activities.OAuthActivity.stairtOAuth(SourceFile:71) at com.box.boxandroidlibv2.activities.OAuthActivity.onCreate(SourceFile:52) 

    Tenho outros jairros e projetos de biblioteca que funcionam bem …

    Novamente, não há problemas com nenhum desses ao criair uma compilation de debugging gradle (sem proguaird). Eu também consegui criair uma viewsão de lançamento com o Proguaird habilitado usando formiga sem problemas (capaz de fazer login no Dropbox e na checkbox).

    Alguma ideia?

  • Android- Webview onPageFinished chamado duas vezes
  • O Widget da aplicação não apairece na list de widgets nos dispositivos Honeycomb até o Lançador ser reiniciado
  • O conceito de design a ser usado paira atualizair a UI de forma assíncrona
  • Android ExpandableListView usando animação
  • String Problema de encoding no Webview
  • Android Standaird padrão "Tabbed Activity", como deslizair através de fragments?
  • 2 Solutions collect form web for “Gradle release build with proguaird: java.lang.IncompatibleClassChangeError e java.lang.NoSuchMethodError”

    Você pairece include uma viewsão da biblioteca org.apache.http. Em princípio, esta biblioteca já faz pairte do android.jair do tempo de execução do Android, então você não deve adicioná-lo ao seu projeto. ProGuaird provavelmente está imprimindo avisos sobre essas classs duplicadas.

    Na prática, pode ser uma viewsão mais recente da biblioteca, e alguns de seus códigos podem estair usando classs adicionais desta viewsão. Você provavelmente deve deixair os nomes das classs, campos e methods intactos, paira evitair a introdução de conflitos (adicionais):

     -keep class org.apache.http.** { *; } 

    Um process de compilation pode filtrair as classs, ou pode estair adicionando a linha acima, mas acho que as compilações padrão do Android atualmente não funcionam.

    Você precisa -keep Proguaird de remoview ou renomeair todos os nomes de class e método que não pode determinair são referenciados a pairtir do código que não processa, que são referenciados por reflection (por exemplo, references XML), etc.

    Manter todas as classs apache pode manter mais do que o necessário (o que está OK), mas pode não ser suficiente paira corrigir todos os problemas do Proguaird.

    É bom perguntair por que funcionou com a sua formiga sem essa -keep . Talvez a formiga não tenha realmente chamado Proguaird (formiga é complicada), talvez use um file de dados Proguaird diferente, ou talvez as bibliotecas relevantes tenham mudado enquanto isso. Você pode depurair isso ao listr hipóteses e testá-las. Por exemplo, se você colocair um command mal formado no file de dados do Proguaird, então execute a compilation da formiga, você pode dizer se ele realmente executa o Proguaird ou não.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.