Java ProGuard-应用程序在emulator中运行良好,但在尝试构建apk时失败

Java ProGuard-应用程序在emulator中运行良好,但在尝试构建apk时失败,java,android,proguard,android-proguard,Java,Android,Proguard,Android Proguard,我试图释放我的应用程序,但我需要的apk是模糊的+我想削减一些大小。我也不需要对apk进行签名,所以调试构建就可以做到这一点 我正在使用几个库: 番石榴22.0 Okhttp 3.8.1 SimpleXML 2.7+ 事件总线3.0 Apache通用编解码器1.10 我当前在apk生成过程中遇到的错误: Warning:com.google.common.util.concurrent.FuturesGetChecked$GetCheckedTypeValidatorHolder$Class

我试图释放我的应用程序,但我需要的apk是模糊的+我想削减一些大小。我也不需要对apk进行签名,所以调试构建就可以做到这一点

我正在使用几个库:

  • 番石榴22.0
  • Okhttp 3.8.1
  • SimpleXML 2.7+
  • 事件总线3.0
  • Apache通用编解码器1.10
我当前在apk生成过程中遇到的错误:

Warning:com.google.common.util.concurrent.FuturesGetChecked$GetCheckedTypeValidatorHolder$ClassValueValidator$1: can't find superclass or interface java.lang.ClassValue
Warning:com.google.common.util.concurrent.FuturesGetChecked$GetCheckedTypeValidatorHolder$ClassValueValidator: can't find referenced class java.lang.ClassValue
Warning:com.google.common.util.concurrent.FuturesGetChecked$GetCheckedTypeValidatorHolder$ClassValueValidator$1: can't find referenced class java.lang.ClassValue
Warning:there were 8 unresolved references to classes or interfaces.
Warning:Exception while processing task java.io.IOException: Please correct the above warnings first.
Error:Execution failed for task ':app:transformClassesAndResourcesWithProguardForDebug'.
> Job failed, see logs for details
当前proguard规则:

#EventBus
-keepclassmembers class ** {
    @org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }

-printmapping out.map
-keepparameternames
-renamesourcefileattribute SourceFile
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,EnclosingMethod

-keepattributes *Annotation*

-allowaccessmodification
-optimizationpasses 3

-keep public class * {
    public protected *;
}

-keepclassmembernames class * {
    java.lang.Class class$(java.lang.String);
    java.lang.Class class$(java.lang.String, boolean);
}

-keepclassmembernames class * {
    native <methods>;
}

-keepclassmembers class * extends java.lang.Enum {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

#SimpleXML
-dontwarn com.bea.xml.stream.**
-dontwarn org.simpleframework.xml.stream.**
-keep public class org.simpleframework.** { *; }
-keep class org.simpleframework.xml.** { *; }
-keep class org.simpleframework.xml.core.** { *; }
-keep class org.simpleframework.xml.util.** { *; }
-keepattributes ElementList, Root
-keepclassmembers,allowobfuscation class * {
    @org.simpleframework.xml.* <fields>;
    @org.simpleframework.xml.* <init>(...);
}
-keepclassmembers class * {
    @org.simpleframework.xml.* *;
}


#guava
-dontwarn com.google.errorprone.annotations.CanIgnoreReturnValue
-dontwarn com.google.errorprone.annotations.concurrent.LazyInit
-dontwarn com.google.errorprone.annotations.ForOverride
-dontwarn com.google.errorprone.annotations.IncompatibleModifiers
-dontwarn com.google.errorprone.annotations.RequiredModifiers
-dontwarn com.google.errorprone.annotations.Var
-dontwarn javax.inject.**
-dontwarn sun.misc.Unsafe
-dontwarn com.google.common.util.concurrent.**

#okhttp3
-dontwarn okio.**
-dontwarn javax.annotation.Nullable
-dontwarn javax.annotation.ParametersAreNonnullByDefault
放置
-dontwarn javax.xml.stream.events.*
将警告减少到86,但我不确定如何处理其余的警告

另外,行
“任务执行失败”:app:transformclasses andresourceswithproguardfordebug.
此错误是因为警告,还是完全不同

我真的非常感谢你在这方面的帮助

干杯

更新:将警告减少到只有8条,更新了我的proguard规则以及警告


更新2:删除了所有警告,但apk一点也不模糊,我可以简单地用apktool/dex2jar对其进行反编译,并查看正在发生的一切。这里是可以帮助您的proguard规则:

# EventBus 3.0 rules
# http://greenrobot.org/eventbus/documentation/proguard/
-keepattributes *Annotation*
-keepclassmembers class ** {
    @org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }

# Only required if you use AsyncExecutor
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
    <init>(java.lang.Throwable);
}

# SimpleXML proguard
# Keep public classes and methods.
-dontwarn com.bea.xml.stream.**
-dontwarn org.simpleframework.xml.stream.**
-keep class org.simpleframework.xml.**{ *; }
-keepclassmembers,allowobfuscation class * {
    @org.simpleframework.xml.* <fields>;
    @org.simpleframework.xml.* <init>(...);
}

#okhttp3 rules, https://github.com/square/okhttp#proguard
-dontwarn okio.**
-dontwarn javax.annotation.Nullable
-dontwarn javax.annotation.ParametersAreNonnullByDefault
#事件总线3.0规则
# http://greenrobot.org/eventbus/documentation/proguard/
-keepattributes*注释*
-keepclassmembers类**{
@org.greenrobot.eventbus.Subscribe;
}
-保持枚举org.greenrobot.eventbus.ThreadMode{*;}
#仅当使用AsyncExecutor时才需要
-keepclassmembers类*扩展org.greenrobot.eventbus.util.ThrowableFailureEvent{
(java.lang.Throwable);
}
#SimpleXML proguard
#保持公共类和方法。
-dontwarn com.bea.xml.stream**
-dontwarn org.simpleframework.xml.stream**
-保持类org.simpleframework.xml.*{*;}
-keepclassmembers,AllowFusion类*{
@org.simpleframework.xml.*;
@org.simpleframework.xml.*(…);
}
#okhttp3规则,https://github.com/square/okhttp#proguard
-唐特沃恩·奥基奥**
-dontwarn javax.annotation.Nullable
-默认情况下,dontwarn javax.annotation.ParametersAreNonnull
对于:

番石榴18.0的配置 # #不同意Guava项目提供的指示:https://code.google.com/p/guava-libraries/wiki/UsingProGuardWithGuava -保留com.google.common.io.Resources类{ 公共静态; } -保留com.google.common.collect.list类{ 公共静态**反向(**); } -保留com.google.common.base.charset类{ 公共静态; } -保留com.google.common.base.Joiner类{ 公共静态com.google.common.base.Joiner on(java.lang.String); 公众**加入(…); } -保留com.google.common.collect.MapMakerInternalMap$ReferenceEntry类 -保留类com.google.common.cache.LocalCache$ReferenceEntry # http://stackoverflow.com/questions/9120338/proguard-configuration-for-guava-with-obfuscation-and-optimization -dontwarn javax.annotation** -dontwarn javax.inject** -dontwarn sun.misc #番石榴19.0 -dontwarn java.lang.ClassValue -dontwarn com.google.j2objc.annotations.Weak -dontwarn org.codehaus.mojo.animal_sniffer.ignorejrrequirement
我刚刚遇到了与您相同的错误,我通过为java.lang添加一个直接的dontwar来解决它:

-dontwarn java.lang.**

它从8个警告变为0,并更正了APK的构建。

对simplexml使用此proguard规则如何:
-dontwarn com.bea.xml.stream.*-dontwarn org.simpleframework.xml.stream.*-keep class org.simpleframework.xml.*{*;}-keepclassmembers,AllowBuzzation class*{@org.simpleframework.xml.*;@org.simpleframework.xml.*(…);}
摆脱了simpleXML警告,谢谢。我仍然坚持“错误:任务执行失败”:app:transformClassesAndResourcesWithProguardForDebug”。“tho.不客气。你解决问题了吗?遗憾的是,没有,我用build.gradle以及新规则+警告/错误更新了我的帖子。谢谢,确实有帮助。我仍然有一个问题,那就是apk一点也不模糊。它很容易反编译。”。
# Configuration for Guava 18.0
#
# disagrees with instructions provided by Guava project: https://code.google.com/p/guava-libraries/wiki/UsingProGuardWithGuava

-keep class com.google.common.io.Resources {
    public static <methods>;
}
-keep class com.google.common.collect.Lists {
    public static ** reverse(**);
}
-keep class com.google.common.base.Charsets {
    public static <fields>;
}

-keep class com.google.common.base.Joiner {
    public static com.google.common.base.Joiner on(java.lang.String);
    public ** join(...);
}

-keep class com.google.common.collect.MapMakerInternalMap$ReferenceEntry
-keep class com.google.common.cache.LocalCache$ReferenceEntry

# http://stackoverflow.com/questions/9120338/proguard-configuration-for-guava-with-obfuscation-and-optimization
-dontwarn javax.annotation.**
-dontwarn javax.inject.**
-dontwarn sun.misc.Unsafe

# Guava 19.0
-dontwarn java.lang.ClassValue
-dontwarn com.google.j2objc.annotations.Weak
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
-dontwarn java.lang.**