首页 > 解决方案 > 如何修复 ProGuard 错误

问题描述

在我的应用程序中,我想启用 proguard 并编写 proguard 规则,但是在生成 apk 后会在logcat中显示一些错误。

在我的应用程序中,我想启用 proguard 并编写 proguard 规则,但是在生成 apk 后会在logcat中显示一些错误。

告诉我这个错误:

Error: D:\Projects\myapp\BaseApp\1.0.22\app\proguard-rules.pro, offset: 3207, line: 88, column: 7, Expected [!]interface|@interface|class|enum

ProGuard 规则:

##########################
#        OKHTTP          #
##########################
-dontwarn javax.annotation.**
-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase
-dontwarn org.codehaus.mojo.animal_sniffer.*
-dontwarn okhttp3.internal.platform.ConscryptPlatform
##########################
#        OKIO            #
##########################
-dontwarn org.codehaus.mojo.animal_sniffer.*
##########################
#        RETROFIT        #
##########################
-keepattributes Signature, InnerClasses, EnclosingMethod
-keepattributes RuntimeVisibleAnnotations, RuntimeVisibleParameterAnnotations
-keepclassmembers,allowshrinking,allowobfuscation interface * {
    @retrofit2.http.* <methods>;
}
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
-dontwarn javax.annotation.**
-dontwarn kotlin.Unit
-dontwarn retrofit2.KotlinExtensions
-dontwarn retrofit2.KotlinExtensions$*
-if interface * { @retrofit2.http.* <methods>; }
-keep,allowobfuscation interface <1>
##########################
#        GSON            #
##########################
-keepattributes Signature
-keepattributes *Annotation*
-dontwarn sun.misc.**
-keep class com.google.gson.examples.android.model.** { <fields>; }
-keep class * implements com.google.gson.TypeAdapter
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer
-keepclassmembers,allowobfuscation class * {
  @com.google.gson.annotations.SerializedName <fields>;
}
##########################
#        GLIDE           #
##########################
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public class * extends com.bumptech.glide.module.AppGlideModule
-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {
  **[] $VALUES;
  public *;
}
##########################
#        ROOM            #
##########################
-keep class * extends androidx.room.RoomDatabase
-dontwarn androidx.room.paging.**
##########################
#       EVENTBUS         #
##########################
-keepattributes *Annotation*
-keepclassmembers class * {
    @org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
    <init>(java.lang.Throwable);
}
##########################
#          YOYO          #
##########################
-keep class com.daimajia.easing.** { *; }
-keep interface com.daimajia.easing.* { *; }
-keep class com.daimajia.** { *; }
-dontwarn com.daimajia.**
-keepnames class com.daimajia.**
##########################
#        PDFVIEW         #
##########################
-keep class com.shockwave.**
##########################
#      DOWNLOADER        #
##########################
-keep class com.downloader.** {*;}
##########################
#       MY_FILES         #
##########################
-dontwarn com.app.app.data.model.**
-keep class com.app.app.data.model.** { *;}
-dontwarn com.app.app.utils.custom_view.**
-keep com.app.app.utils.custom_view.** { *;}

显示第 88 行的错误,88行是!-keep com.app.app.utils.custom_view.** { *;}

我该如何解决?

标签: javaandroidproguard

解决方案


正如错误所指出的,您的 ProGuard 规则中有一个语法错误,它位于keep您需要在提供名称之前指定类型的关键字之后。

在这种情况下,您缺少单词class

换行就好

-keep com.app.app.utils.custom_view.** { *;}

-keep class com.app.app.utils.custom_view.** { *;}

有关自定义规则文件的更多信息,请阅读ProGuard 手册


推荐阅读