java - 如何修复 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.** { *;}
我该如何解决?
解决方案
正如错误所指出的,您的 ProGuard 规则中有一个语法错误,它位于keep
您需要在提供名称之前指定类型的关键字之后。
在这种情况下,您缺少单词class
。
换行就好
-keep com.app.app.utils.custom_view.** { *;}
至
-keep class com.app.app.utils.custom_view.** { *;}
有关自定义规则文件的更多信息,请阅读ProGuard 手册。
推荐阅读
- sql - SQL通过唯一项创建具有另一列总和的列
- string - 如何在 Vala 中将 int64 格式化为大写十六进制?
- vctrs - 如何解决运行“汽车”包的“vctrs”更新问题?
- assembly - 使用 z/OS 高级汇编程序 (HLASM) 时,有没有办法将等号符号(通过 EQU 定义)返回到未定义状态?
- python - 如何在 tkinter 中更改按钮文本?
- java - 使用接口创建 Stack Generic ArrayList
- javascript - WebRTC:如何在 Firefox 中检测流或轨道何时从 PeerConnection 中删除?
- javascript - 创建可在 Tabulator 中直接单击的复选框
- python - 美丽的汤:FileNotFoundError:[Errno 2]没有这样的文件或目录:
- python - sklearn中的x_test、x_train、y_test、y_train有什么区别?