2015-01-16 10 views
10

Sto sviluppando un'applicazione con Android Studio 1.0.2 e Gradle 1.0.0 utilizzando le librerie Apache httpmime e httpcore per entità multipart. Ecco il mio build.gradle:Android - Proguard con httpcore e httpmime con Android Studio e Gradle

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 21 
    buildToolsVersion "21.1.1" 

    // Something wrong with the http* libs 
    packagingOptions { 
     exclude 'META-INF/DEPENDENCIES' 
     exclude 'META-INF/NOTICE' 
     exclude 'META-INF/LICENSE' 
     exclude 'META-INF/DEPENDENCIES.txt' 
     exclude 'META-INF/LICENSE.txt' 
     exclude 'META-INF/NOTICE.txt' 
     exclude 'META-INF/NOTICE' 
     exclude 'META-INF/LICENSE' 
     exclude 'META-INF/DEPENDENCIES' 
     exclude 'META-INF/notice.txt' 
     exclude 'META-INF/license.txt' 
     exclude 'META-INF/dependencies.txt' 
     exclude 'META-INF/LGPL2.1' 
    } 

    defaultConfig { 
     // ... 
    } 

    buildTypes { 
     release { 
      minifyEnabled true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 

} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile "com.android.support:support-v4:21.0.2" 
    compile 'org.apache.httpcomponents:httpcore:4.3.2' 
    compile 'org.apache.httpcomponents:httpmime:4.3.5' 
    compile 'net.hockeyapp.android:HockeySDK:3.5.0' 
} 

l'applicazione stessa e il 'normale' APK rilascio funzionano bene, ma quando sto cercando di utilizzare ProGuard ricevo il seguente messaggio di errore:

Note: there were 157 duplicate class definitions. 
     (http://proguard.sourceforge.net/manual/troubleshooting.html#duplicateclass) 
Warning:library class org.apache.http.auth.AuthenticationException extends or implements program class org.apache.http.ProtocolException 
Warning:library class org.apache.http.auth.MalformedChallengeException extends or implements program class org.apache.http.ProtocolException 
Warning:library class org.apache.http.auth.params.AuthParamBean extends or implements program class org.apache.http.params.HttpAbstractParamBean 
Warning:library class org.apache.http.client.NonRepeatableRequestException extends or implements program class org.apache.http.ProtocolException 
Warning:library class org.apache.http.client.RedirectException extends or implements program class org.apache.http.ProtocolException 
Warning:library class org.apache.http.client.entity.UrlEncodedFormEntity extends or implements program class org.apache.http.entity.StringEntity 
Warning:library class org.apache.http.client.methods.HttpEntityEnclosingRequestBase extends or implements program class org.apache.http.HttpEntityEnclosingRequest 
Warning:library class org.apache.http.client.methods.HttpRequestBase extends or implements program class org.apache.http.message.AbstractHttpMessage 
Warning:library class org.apache.http.client.methods.HttpUriRequest extends or implements program class org.apache.http.HttpRequest 
Warning:library class org.apache.http.client.params.AllClientPNames extends or implements program class org.apache.http.params.CoreConnectionPNames 
Warning:library class org.apache.http.client.params.AllClientPNames extends or implements program class org.apache.http.params.CoreProtocolPNames 
Warning:library class org.apache.http.client.params.ClientParamBean extends or implements program class org.apache.http.params.HttpAbstractParamBean 
Warning:library class org.apache.http.client.protocol.RequestAddCookies extends or implements program class org.apache.http.HttpRequestInterceptor 
Warning:library class org.apache.http.client.protocol.RequestDefaultHeaders extends or implements program class org.apache.http.HttpRequestInterceptor 
Warning:library class org.apache.http.client.protocol.RequestProxyAuthentication extends or implements program class org.apache.http.HttpRequestInterceptor 
Warning:library class org.apache.http.client.protocol.RequestTargetAuthentication extends or implements program class org.apache.http.HttpRequestInterceptor 
Warning:library class org.apache.http.client.protocol.ResponseProcessCookies extends or implements program class org.apache.http.HttpResponseInterceptor 
Warning:library class org.apache.http.conn.BasicManagedEntity extends or implements program class org.apache.http.entity.HttpEntityWrapper 
Warning:library class org.apache.http.conn.ManagedClientConnection extends or implements program class org.apache.http.HttpClientConnection 
Warning:library class org.apache.http.conn.ManagedClientConnection extends or implements program class org.apache.http.HttpInetConnection 
Warning:library class org.apache.http.conn.OperatedClientConnection extends or implements program class org.apache.http.HttpClientConnection 
Warning:library class org.apache.http.conn.OperatedClientConnection extends or implements program class org.apache.http.HttpInetConnection 
Warning:library class org.apache.http.conn.params.ConnConnectionParamBean extends or implements program class org.apache.http.params.HttpAbstractParamBean 
Warning:library class org.apache.http.conn.params.ConnManagerParamBean extends or implements program class org.apache.http.params.HttpAbstractParamBean 
Warning:library class org.apache.http.conn.params.ConnRouteParamBean extends or implements program class org.apache.http.params.HttpAbstractParamBean 
Warning:library class org.apache.http.cookie.MalformedCookieException extends or implements program class org.apache.http.ProtocolException 
Warning:library class org.apache.http.cookie.params.CookieSpecParamBean extends or implements program class org.apache.http.params.HttpAbstractParamBean 
Warning:library class org.apache.http.impl.client.ClientParamsStack extends or implements program class org.apache.http.params.AbstractHttpParams 
Warning:library class org.apache.http.impl.client.EntityEnclosingRequestWrapper extends or implements program class org.apache.http.HttpEntityEnclosingRequest 
Warning:library class org.apache.http.impl.client.RequestWrapper extends or implements program class org.apache.http.message.AbstractHttpMessage 
Warning:library class org.apache.http.impl.client.TunnelRefusedException extends or implements program class org.apache.http.HttpException 
Warning:library class org.apache.http.impl.conn.DefaultClientConnection extends or implements program class org.apache.http.impl.SocketHttpClientConnection 
Warning:library class org.apache.http.impl.conn.DefaultResponseParser extends or implements program class org.apache.http.impl.io.AbstractMessageParser 
Warning:library class org.apache.http.impl.conn.LoggingSessionInputBuffer extends or implements program class org.apache.http.io.SessionInputBuffer 
Warning:library class org.apache.http.impl.conn.LoggingSessionOutputBuffer extends or implements program class org.apache.http.io.SessionOutputBuffer 
Warning:library class org.apache.http.client.HttpClient depends on program class org.apache.http.params.HttpParams 
Warning:library class org.apache.http.client.HttpClient depends on program class org.apache.http.HttpResponse 
Warning:library class org.apache.http.client.HttpClient depends on program class org.apache.http.protocol.HttpContext 
Warning:library class org.apache.http.client.HttpClient depends on program class org.apache.http.HttpResponse 
Warning:library class org.apache.http.client.HttpClient depends on program class org.apache.http.HttpHost 
Warning:library class org.apache.http.client.HttpClient depends on program class org.apache.http.HttpRequest 
Warning:library class org.apache.http.client.HttpClient depends on program class org.apache.http.HttpResponse 
Warning:library class org.apache.http.client.HttpClient depends on program class org.apache.http.HttpHost 
Warning:library class org.apache.http.client.HttpClient depends on program class org.apache.http.HttpRequest 
Warning:library class org.apache.http.client.HttpClient depends on program class org.apache.http.protocol.HttpContext 
Warning:library class org.apache.http.client.HttpClient depends on program class org.apache.http.HttpResponse 
Warning:library class org.apache.http.client.HttpClient depends on program class org.apache.http.protocol.HttpContext 
Warning:library class org.apache.http.client.HttpClient depends on program class org.apache.http.HttpHost 
Warning:library class org.apache.http.client.HttpClient depends on program class org.apache.http.HttpRequest 
Warning:library class org.apache.http.client.HttpClient depends on program class org.apache.http.HttpHost 
Warning:library class org.apache.http.client.HttpClient depends on program class org.apache.http.HttpRequest 
Warning:library class org.apache.http.client.HttpClient depends on program class org.apache.http.protocol.HttpContext 
Warning:library class org.apache.http.client.methods.HttpEntityEnclosingRequestBase depends on program class org.apache.http.HttpEntity 
Warning:library class org.apache.http.client.methods.HttpRequestBase depends on program class org.apache.http.ProtocolVersion 
Warning:library class org.apache.http.client.methods.HttpRequestBase depends on program class org.apache.http.RequestLine 
Warning:library class org.apache.http.conn.scheme.PlainSocketFactory depends on program class org.apache.http.params.HttpParams 
Warning:library class org.apache.http.conn.scheme.SchemeRegistry depends on program class org.apache.http.HttpHost 
Warning:library class org.apache.http.conn.scheme.SocketFactory depends on program class org.apache.http.params.HttpParams 
Warning:library class org.apache.http.conn.ssl.SSLSocketFactory depends on program class org.apache.http.params.HttpParams 
Warning:library class org.apache.http.impl.client.AbstractHttpClient depends on program class org.apache.http.params.HttpParams 
Warning:library class org.apache.http.impl.client.AbstractHttpClient depends on program class org.apache.http.protocol.HttpContext 
Warning:library class org.apache.http.impl.client.AbstractHttpClient depends on program class org.apache.http.protocol.HttpRequestExecutor 
Warning:library class org.apache.http.impl.client.AbstractHttpClient depends on program class org.apache.http.ConnectionReuseStrategy 
Warning:library class org.apache.http.impl.client.AbstractHttpClient depends on program class org.apache.http.protocol.BasicHttpProcessor 
Warning:library class org.apache.http.impl.client.AbstractHttpClient depends on program class org.apache.http.params.HttpParams 
Warning:library class org.apache.http.impl.client.AbstractHttpClient depends on program class org.apache.http.protocol.HttpRequestExecutor 
Warning:library class org.apache.http.impl.client.AbstractHttpClient depends on program class org.apache.http.ConnectionReuseStrategy 
Warning:library class org.apache.http.impl.client.AbstractHttpClient depends on program class org.apache.http.protocol.BasicHttpProcessor 
Warning:library class org.apache.http.impl.client.AbstractHttpClient depends on program class org.apache.http.HttpResponseInterceptor 
Warning:library class org.apache.http.impl.client.AbstractHttpClient depends on program class org.apache.http.HttpRequestInterceptor 
Warning:library class org.apache.http.impl.client.AbstractHttpClient depends on program class org.apache.http.HttpResponse 
Warning:library class org.apache.http.impl.client.AbstractHttpClient depends on program class org.apache.http.protocol.HttpContext 
Warning:library class org.apache.http.impl.client.AbstractHttpClient depends on program class org.apache.http.HttpResponse 
Warning:library class org.apache.http.impl.client.AbstractHttpClient depends on program class org.apache.http.HttpHost 
Warning:library class org.apache.http.impl.client.AbstractHttpClient depends on program class org.apache.http.HttpRequest 
Warning:library class org.apache.http.impl.client.AbstractHttpClient depends on program class org.apache.http.HttpResponse 
Warning:library class org.apache.http.impl.client.AbstractHttpClient depends on program class org.apache.http.HttpHost 
Warning:library class org.apache.http.impl.client.AbstractHttpClient depends on program class org.apache.http.HttpRequest 
Warning:library class org.apache.http.impl.client.AbstractHttpClient depends on program class org.apache.http.protocol.HttpContext 
Warning:library class org.apache.http.impl.client.AbstractHttpClient depends on program class org.apache.http.HttpResponse 
Warning:library class org.apache.http.impl.client.AbstractHttpClient depends on program class org.apache.http.protocol.HttpRequestExecutor 
Warning:library class org.apache.http.impl.client.AbstractHttpClient depends on program class org.apache.http.ConnectionReuseStrategy 
Warning:library class org.apache.http.impl.client.AbstractHttpClient depends on program class org.apache.http.protocol.HttpProcessor 
Warning:library class org.apache.http.impl.client.AbstractHttpClient depends on program class org.apache.http.params.HttpParams 
Warning:library class org.apache.http.impl.client.AbstractHttpClient depends on program class org.apache.http.HttpRequest 
Warning:library class org.apache.http.impl.client.AbstractHttpClient depends on program class org.apache.http.params.HttpParams 
Warning:library class org.apache.http.impl.client.AbstractHttpClient depends on program class org.apache.http.protocol.HttpContext 
Warning:library class org.apache.http.impl.client.AbstractHttpClient depends on program class org.apache.http.HttpHost 
Warning:library class org.apache.http.impl.client.AbstractHttpClient depends on program class org.apache.http.HttpRequest 
Warning:library class org.apache.http.impl.client.AbstractHttpClient depends on program class org.apache.http.HttpHost 
Warning:library class org.apache.http.impl.client.AbstractHttpClient depends on program class org.apache.http.HttpRequest 
Warning:library class org.apache.http.impl.client.AbstractHttpClient depends on program class org.apache.http.protocol.HttpContext 
Warning:library class org.apache.http.impl.client.DefaultHttpClient depends on program class org.apache.http.params.HttpParams 
Warning:library class org.apache.http.impl.client.DefaultHttpClient depends on program class org.apache.http.protocol.HttpRequestExecutor 
Warning:library class org.apache.http.impl.client.DefaultHttpClient depends on program class org.apache.http.protocol.HttpContext 
Warning:library class org.apache.http.impl.client.DefaultHttpClient depends on program class org.apache.http.ConnectionReuseStrategy 
Warning:library class org.apache.http.impl.client.DefaultHttpClient depends on program class org.apache.http.protocol.BasicHttpProcessor 
Warning:library class org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager depends on program class org.apache.http.params.HttpParams 
Warning:there were 109 instances of library classes depending on program classes. 
     You must avoid such dependencies, since the program classes will 
     be processed, while the library classes will remain unchanged. 
     (http://proguard.sourceforge.net/manual/troubleshooting.html#dependency) 
:app:proguardRelease FAILED 
Error:Execution failed for task ':app:proguardRelease'. 
> java.io.IOException: Please correct the above warnings first. 

Secondo il i collegamenti forniti nel messaggio di errore sulle definizioni di classi duplicate e sulle classi di libreria in base alle classi di programma Devo usare qualcosa come -injars ... o -libraryjars ... nel mio proguard-rules.pro. Ma dal momento che utilizzo le librerie remote e non i file .jar, non so come usare queste opzioni proguard.

Così ho cercato su google per trovare una soluzione per il mio problema e hanno trovato diverse possibilità:

  • ho scaricato i vasetti, li ha aggiunto alla mia cartella \app\libs e ha aggiunto le opzioni -libraryjar e/o -injar per entrambi i vasi, ma nessuna combinazione funzionerebbe: o i file non potevano essere trovati o letti, o ho avuto un errore che una delle librerie sarebbe stata elaborata due volte.

  • Ho anche provato varie combinazioni di -keep class org.apache.**, -keep interface org.apache.**, -keep public class org.apache.** {*;}, -keepnames class org.apache.** {*;} con o senza l'{*;}, ma nessuno di loro lavoro.

  • Ho provato anche l'opzione -dontwarn org.apache.** o -dontwarn org.apache.http.** che mi dà nessun errore durante la creazione della APK, ma quando cerco di stabilire una connessione Internet utilizzando il protocollo HTTP * librerie in App, l'applicazione si blocca con qualcosa di simile a un NoSuchMethodException.

Quindi la mia domanda è: esiste un modo per utilizzare le librerie remote e proguard? O è almeno possibile includendo il .jars nella mia cartella \ libs?

La ringrazio molto

risposta

28

Beh, io sto usando come questo

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

Anche io sono la compilazione utilizzando vaso dentro le mie librerie cartella

compile files('libs/httpmime-4.3.5.jar') 
compile files('libs/httpclient-4.3.5.jar') 
compile files('libs/httpclient-cache-4.3.5.jar') 
compile files('libs/httpcore-4.3.2.jar') 

invece di utilizzare da Maven

+0

@goonerDroid in quale file devo scrivere 'dontwarn ...'? –

+0

@DevendraSingh proguard-rules.pro.Creali nella cartella src – goonerDroid

+0

Ho già un file denominato proguard-rules.pro nel mio progetto in modo tale che devo effettuare il wirte o devo creare questo nuovo nella cartella src ? –

Problemi correlati