【问题标题】:Proguard and apache legacyProguard 和 apache 遗留
【发布时间】:2016-06-18 16:20:33
【问题描述】:

我正在使用Android API 23org.apache.http.legacy,所以我可以使用Volley。除非我使用proguard,否则一切正常。我收到此错误:

错误:任务 ':app:packageDevRelease' 执行失败。无法 计算哈希 ...app/build/intermediates/classes-proguard/dev/release/classes.jar

我的 gradle 文件:

apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
apply plugin: 'com.jakewharton.hugo'

repositories {
    maven { url 'https://maven.fabric.io/public' }
}

buildscript {
    repositories {
        mavenCentral()
        maven { url 'https://maven.fabric.io/public' }
    }

    dependencies {
        classpath 'com.jakewharton.hugo:hugo-plugin:1.2.1'
        classpath 'io.fabric.tools:gradle:1.+'
    }
}

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "..."
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 3
        versionName "1.0.0"
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    packagingOptions {
        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/services/javax.annotation.processing.Processor'
    }

    lintOptions {
        abortOnError false
        disable 'InvalidPackage'
    }

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

    sourceSets {
        ...
    }

    productFlavors {
        ...
    }
}

dependencies {
    compile files('libs/org.apache.http.legacy.jar')

    // #### Submodules
    compile project(':submodules:volley')

    compile 'com.android.support:appcompat-v7:23.2.0'
    compile 'com.android.support:design:23.2.0'
    compile 'com.android.support:percent:23.2.0'
    compile 'com.android.support:recyclerview-v7:23.2.0'

    compile 'com.google.android.gms:play-services-location:8.4.0'
    compile 'com.google.android.gms:play-services-maps:8.4.0'
    compile 'com.google.maps.android:android-maps-utils:0.4'
    compile 'com.google.code.gson:gson:2.3'

    compile 'com.facebook.android:facebook-android-sdk:4.7.0'

    compile 'com.squareup.picasso:picasso:2.5.2'
    compile 'com.squareup.okhttp:okhttp:2.4.0'
    compile 'com.squareup.okhttp:okhttp-urlconnection:2.4.0'

    compile "com.daimajia.swipelayout:library:1.2.0@aar"
    compile 'com.kbeanie:image-chooser-library:1.5.2@aar'
    compile 'com.mcxiaoke.viewpagerindicator:library:2.4.1@aar'

    compile('com.crashlytics.sdk.android:crashlytics:2.5.5@aar') {
        transitive = true;
    }
}

编辑:

将此行添加到proguard 已在此post 中提到:

-dontwarn org.apache.http.**
-dontwarn android.net.http.AndroidHttpClient
-dontwarn com.google.android.gms.**
-dontwarn com.android.volley.toolbox.**

我得到了同样的错误,但现在有一些友好的输出:

在 BaseClient.java 的 lint 分析过程中意外失败(这是 lint 或它所依赖的库之一中的错误) TypeSystem.getUnannotatedType(TypeSystem.java:180)->TypeSystem.getParameterizedType(TypeSystem.java:238)->TypeSystem.getParameterizedType(TypeSystem.java:261)->LookupEnvironment.createParameterizedType(LookupEnvironment.java:949) :app:validateExternalOverrideSigning :app:packageDevRelease 失败

我的 BaseClient.java 有一些这样的方法:

 public static <T extends Object, U extends Object> void executePostRequest(
               String url, 
               T requestPayload,
               Class<U> responseClass,
               Response.Listener<U> successListener,
               Response.ErrorListener errorListener){}

private static <T> BaseRequest.AuthRetryListener<T> createAuthRequestListener()

等等……

我怎样才能做到这一点?
谢谢。

编辑 2:
用户 ajcpsoares -ignorewarnings 解决方案有效。我将从 ProGuard 故障排除文档中留下这个 link。此外,由于我认为这是一种解决方法,而不是解决方案,我将把 Android 开源项目 - 问题跟踪器 link 也留在这里。

【问题讨论】:

  • 我记得将它添加到我的顶级 gradle 文件中,也许它会有所帮助:tasks.withType(JavaCompile) {options.compilerArgs &lt;&lt; "-Xlint:deprecation"}
  • @m02ph3u5 感谢您的意见。通过该行,我得到如下日志:Warning:(75, 56) [deprecation] org.apache.http 中的 HttpStatus 已被弃用,但在 lint 分析期间我仍然遇到 Unexpected failure... 它失败了。

标签: java android gradle proguard android-apache-legacy


【解决方案1】:

如果在proguard 文件中添加-ignorewarnings,它会成功构建吗?

【讨论】:

  • 说的好!它有效,但我想这更像是一种解决方法而不是解决方案。我会接受这个答案,因为它最终解决了我的问题。谢谢
【解决方案2】:

不要将 apache 遗留库作为 jar 包含在内,而是尝试如下添加:

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"
    useLibrary 'org.apache.http.legacy'
    ...
} 

here 所述。

【讨论】:

  • 感谢您的回答,但它也不起作用 :( 使用 .jar 的优点是 IntelliJ 可以找到 HTTP 类,如果我只使用 useLibrary,我会收到 ClassNotFound IDEA 错误。它编译并且它可以工作,但是让一些带有红色下划线的类有点无聊。无论如何谢谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
  • 2012-07-20
  • 2021-03-02
  • 1970-01-01
  • 1970-01-01
  • 2016-02-15
相关资源
最近更新 更多