【问题标题】:Gradle failed to build when proguard is activated (migration from eclipse)激活 proguard 时 Gradle 构建失败(从 eclipse 迁移)
【发布时间】:2016-07-06 21:22:22
【问题描述】:

当我激活 proguard 时,我无法生成我的项目:

http://www.pastefile.com/hyEvNK

我的构建文件是:

应用插件:'com.android.application'

安卓 {
    compileSdkVersion 23
    构建工具版本“23.0.2”
    默认配置 {
        应用程序ID“com.sh.inv”
        targetSdkVersion 23
        版本代码 66
        版本名称“2.5.0”
        multiDexEnabled 假
    }
    构建类型 {
        发布 {
            缩小启用真
            proguardFiles 'proguard-project.txt'
        }
    }
    产品风味{
    }

    产品风味{
            minSdkVersion 21
    }
}
存储库{
    maven { url "http://jzaccone.github.io/SlidingMenu-aar" }
}


依赖{
    编译文件('libs/ormlite-android-4.48.jar')
    编译文件('libs/ormlite-core-4.48.jar')
    编译'com.android.support:multidex:1.0.1'
    编译'com.android.support:appcompat-v7:23.2.1'
    编译'com.android.support:support-v4:23.2.1'
    编译'com.android.support:support-v13:23.2.1'
    编译'com.google.code.gson:gson:2.6.2'
    编译'org.apache.httpcomponents:httpcore:4.4.4'
    编译'com.android.support:design:23.2.1'
    编译'com.android.support:preference-v14:23.2.1'
    编译'com.google.android.gms:play-services-analytics:8.4.0'
    编译'com.google.android.gms:play-services-identity:8.4.0'
    编译 'com.google.android.gms:play-services-drive:8.4.0'
    编译'org.apache.commons:commons-io:+'
    编译项目(':afilechooser')
    编译项目(':simplecropimage')
}

配置{
    compile.exclude 组:“org.apache.httpcomponents”,模块:“httpclient”
}

proguard-project.txt 是:

-dontwarn android.support.**
-不要警告 com.google.gson.**
-不要警告 com.j256.**
-dontwarn com.actionbarsherlock.**

-assumenosideeffects 类 android.util.Log {
    公共静态 *** d(...);
    公共静态 *** v(...);
}

- 保留类 com.j256。**
-keepclassmembers 类 com.j256.** {*;}
-保持枚举 com.j256.**
-keepclassmembers enum com.j256.** {*;}
-保留接口com.j256。**
-keepclassmembers 接口 com.j256.** {*;}
-保持界面android.support.**
-keepclassmembers 接口 android.support.** {*;}
-keep interface com.mapsaurus.paneslayout.**
-keepclassmembers 接口 com.mapsaurus.paneslayout.** {*;}

-保留类 com.sh.inv.businessobjects.*
-keepclassmembers 类 com.sh.inv.businessobjects.* { *; }

-keep 类 com.sh.inv.DatabaseHelper
-keepclassmembers 类 com.sh.inv.inv.DatabaseHelper { *; }

-保留类 com.sh.inv.businessobjects.ws.*
-keepclassmembers 类 com.sh.inv.businessobjects.ws.* { *; }

-keep class com.android.vending.billing.*
-keepclassmembers 类 com.android.vending.billing.* { *; }

-保留类 com.sh.inv.ui.fragment.*
-keepclassmembers 类 com.sh.inv.ui.fragment.* { *; }

-keepclassmembers 类 * {
  公共(android.content.Context);
}


-keepattributes 签名
-keepattributes 注解

-renamesourcefile 属性源文件
-keepattributes SourceFile,LineNumberTable

-保持公共类 * 扩展 android.app.Fragment
-保持公共类 * 扩展 android.support.v4.app.DialogFragment
-保持公共类 * 扩展 com.sh.inv.ui.common.FragmentActivityBase


-keepclassmembers 类 * 扩展 com.actionbarsherlock.ActionBarSherlock {
    (android.app.Activity, int);
}

#-injars 库

-keep 类 * 扩展 java.util.ListResourceBundle {
    受保护的对象[][] getContents();
}

-保持公共类 com.google.android.gms.common.internal.safeparcel.SafeParcelable {
    公共静态最终*** NULL;
}

-keepnames @com.google.android.gms.common.annotation.KeepName 类 *
-keepclassmembernames 类 * {
    @com.google.android.gms.common.annotation.KeepName *;
}

-keepnames 类 * 实现 android.os.Parcelable {
    公共静态最终**创建者;
}

它在上一个版本中工作,但它是一个休眠项目,我不得不将它从 eclipse 迁移到 android studio 并升级所有引用 可能导入的库有一些错误..

此外,关于 ormlite 或库的重复定义,我有很多以前没有的警告

【问题讨论】:

  • 添加 -info 以显示错误。
  • 我在android studio的首选项>编译器>命令行选项中添加。我有错误:注意:有 164 个重复的类定义。
  • 你的 gradle 版本是什么?
  • 集成到android studio 1.5.1中的那个。 Gradle 2.8 和工具 1.5.0

标签: android gradle proguard


【解决方案1】:

添加

android {
    useLibrary 'org.apache.http.legacy'
    lintOptions {
        checkReleaseBuilds false
        abortOnError false
    }
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/notice.txt'
    exclude 'META-INF/license.txt'
    exclude 'META-INF/dependencies.txt'
    exclude 'META-INF/LGPL2.1'
    exclude 'META-INF/ASL2.0'
    exclude 'META-INF/maven/com.squareup.okio/okio/pom.xml'
    exclude 'META-INF/maven/com.squareup.okio/okio/pom.properties'
}
}

【讨论】:

  • 尝试添加 useLibrary 'org.apache.http.legacy'
  • 添加 packageOptions.@P.Sohm
  • 你清理过项目并添加了-info选项吗?
【解决方案2】:

小小的阳光给了我一些线索,终于找到了答案

我需要删除

compile 'org.apache.httpcomponents:httpcore:4.4.4'

在我的 gradle 构建配置中,因为它现在集成在 android 构建工具中(我认为)。我不知道为什么它在调试/发布模式下工作,但在被 proguard 混淆时却不行。

【讨论】:

    猜你喜欢
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    相关资源
    最近更新 更多