2015-01-16 79 views
10

我正在开发一个应用程序,使用Android库1.0.2和Gradle 1.0.0,对于多部分实体使用Apache库httpmimehttpcore。这里是我的build.gradleAndroid - 使用Android Studio和Gradle的httpcore和httpmime的Proguard

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

软件本身和“正常”发布的APK做工精细,但当我试图使用的ProGuard我收到以下错误信息:

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. 

按照错误消息中给出的有关重复类定义和库类的链接取决于程序类我应该在我的proguard-rules.pro中使用类似-injars ...-libraryjars ...的内容。但由于我使用远程库而不是.jar文件,我不知道如何使用这些proguard选项。

所以我用Google搜索我的问题的解决方案,并发现了几个可能性:

  • 我下载的广口瓶,将它们添加到我的\app\libs文件夹,并添加选项-libraryjar和/或-injar两个罐子,但没有组合可以工作:无论是找不到或读取文件,或者我得到一个错误,其中一个库将被处理两次。

  • 我也尝试过的-keep class org.apache.**各种组合,-keep interface org.apache.**-keep public class org.apache.** {*;}-keepnames class org.apache.** {*;}带或不带{*;}但他们没有工作。

  • 我也试过-dontwarn org.apache.**-dontwarn org.apache.http.**选项,创建APK过程中给了我没有错误,但是当我尝试建立使用http *库的应用程序,该应用程序崩溃的东西,如一个NoSuchMethodException互联网连接。

所以我的问题是:有没有一种方法使用远程库和proguard?或者,至少可以通过在我的\ libs文件夹中包含.jars文件?

非常感谢您

回答

28

好吧,我使用这样

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

而且我使用的jar编译在我的库从行家使用文件夹

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

,而不是

+0

@goonerDroid在哪个文件中我必须写'dontwarn ...'? –

+0

@DevendraSingh proguard-rules.pro.Create他们在你的src文件夹 – goonerDroid

+0

我已经有一个文件名为文件proguard-rules.pro在我的项目中,所以我必须保证这或我必须在src文件夹中创建这个新的? –