我目前正在尝试使用proguard,作为第一步,我想在proguard本身上使用它(必须从某处开始……)。然而,这并不容易,任何帮助都是欢迎的。
版本:
proguard-7.0.1版本
openjdk-11.0.2版本
命令行:
java -jar proguard.jar @proguard.pro
配置文件:
-injars proguard.jar
-outjars proguard_out.jar
-libraryjars <java.home>/jmods/java.base.jmod(!**.jar;!module-info.class)
-printmapping myapplication.map
-keep public class proguard.ProGuard {
public static void main(java.lang.String[]);
}
输出:
ProGuard, version 7.0.1
Reading program jar [C:\Users\Myself\Desktop\TestProGuard\proguard.jar] (filtered)
Reading library jmod [E:\software\Java\jdk-11.0.2\jmods\java.base.jmod] (filtered)
Note: com.google.gson.FieldAttributes calls 'Field.getAnnotation'
Note: com.google.gson.FieldAttributes calls 'Field.getAnnotations'
Note: com.google.gson.internal.Excluder calls 'Field.getAnnotation'
Note: com.google.gson.internal.Excluder calls 'Class.getAnnotation'
Note: com.google.gson.internal.bind.JsonAdapterAnnotationTypeAdapterFactory calls 'Class.getAnnotation'
Note: com.google.gson.internal.bind.ReflectiveTypeAdapterFactory calls 'Field.getAnnotation'
Note: com.google.gson.internal.bind.TypeAdapters$EnumTypeAdapter calls 'Field.getAnnotation'
Note: kotlin.coroutines.jvm.internal.DebugMetadataKt calls 'Class.getAnnotation'
Note: com.google.gson.FieldAttributes calls 'Field.getGenericType'
Note: com.google.gson.FieldAttributes calls 'Field.getType'
Note: com.google.gson.internal.$Gson$Types calls 'Class.getGenericInterfaces'
Note: com.google.gson.internal.$Gson$Types calls 'Class.getGenericSuperclass'
Note: com.google.gson.internal.$Gson$Types calls 'Class.getTypeParameters'
Note: com.google.gson.internal.Excluder calls 'Field.getType'
Note: com.google.gson.internal.bind.ReflectiveTypeAdapterFactory calls 'Field.getType'
Note: com.google.gson.internal.bind.ReflectiveTypeAdapterFactory calls 'Field.getGenericType'
Note: com.google.gson.internal.bind.ReflectiveTypeAdapterFactory calls 'Class.getGenericSuperclass'
Note: com.google.gson.reflect.TypeToken calls 'Class.getGenericSuperclass'
Note: com.google.gson.reflect.TypeToken calls 'Class.getTypeParameters'
Note: com.google.gson.reflect.TypeToken calls 'Class.getGenericInterfaces'
Note: kotlin.jvm.internal.ReflectionFactory calls 'Class.getGenericInterfaces'
Note: com.google.gson.internal.$Gson$Types$ParameterizedTypeImpl calls 'Class.getEnclosingClass'
Warning: com.google.gson.DefaultDateTypeAdapter: can't find referenced class java.sql.Date
Warning: com.google.gson.DefaultDateTypeAdapter: can't find referenced class java.sql.Timestamp
Warning: com.google.gson.DefaultDateTypeAdapter: can't find referenced class java.sql.Timestamp
Warning: com.google.gson.DefaultDateTypeAdapter: can't find referenced class java.sql.Date
Warning: com.google.gson.GsonBuilder: can't find referenced class java.sql.Timestamp
Warning: com.google.gson.GsonBuilder: can't find referenced class java.sql.Date
Warning: com.google.gson.GsonBuilder: can't find referenced class java.sql.Timestamp
Warning: com.google.gson.GsonBuilder: can't find referenced class java.sql.Date
Warning: com.google.gson.GsonBuilder: can't find referenced class java.sql.Timestamp
Warning: com.google.gson.GsonBuilder: can't find referenced class java.sql.Date
Warning: com.google.gson.GsonBuilder: can't find referenced class java.sql.Timestamp
Warning: com.google.gson.GsonBuilder: can't find referenced class java.sql.Date
Warning: com.google.gson.internal.bind.SqlDateTypeAdapter: can't find referenced class java.sql.Date
Warning: com.google.gson.internal.bind.SqlDateTypeAdapter: can't find referenced class java.sql.Date
Warning: com.google.gson.internal.bind.SqlDateTypeAdapter: can't find referenced class java.sql.Date
Warning: com.google.gson.internal.bind.SqlDateTypeAdapter: can't find referenced class java.sql.Date
Warning: com.google.gson.internal.bind.SqlDateTypeAdapter: can't find referenced class java.sql.Date
Warning: com.google.gson.internal.bind.SqlDateTypeAdapter: can't find referenced class java.sql.Date
Warning: com.google.gson.internal.bind.SqlDateTypeAdapter: can't find referenced class java.sql.Date
Warning: com.google.gson.internal.bind.SqlDateTypeAdapter$1: can't find referenced class java.sql.Date
...
Note: com.google.gson.internal.reflect.UnsafeReflectionAccessor: can't find dynamically referenced class sun.misc.Unsafe
Note: kotlin.internal.PlatformImplementationsKt: can't find dynamically referenced class kotlin.internal.jdk8.JDK8PlatformImplementations
Note: kotlin.internal.PlatformImplementationsKt: can't find dynamically referenced class kotlin.internal.JRE8PlatformImplementations
Note: kotlin.internal.PlatformImplementationsKt: can't find dynamically referenced class kotlin.internal.jdk7.JDK7PlatformImplementations
Note: kotlin.internal.PlatformImplementationsKt: can't find dynamically referenced class kotlin.internal.JRE7PlatformImplementations
Note: kotlin.jvm.internal.Reflection: can't find dynamically referenced class kotlin.reflect.jvm.internal.ReflectionFactoryImpl
Note: proguard.configuration.ConfigurationLogger: can't find dynamically referenced class android.util.Log
Note: com.google.gson.internal.ConstructorConstructor accesses a declared constructor '<init>()' dynamically
Maybe this is program method 'com.google.gson.Gson { Gson(); }'
Maybe this is program method 'com.google.gson.Gson$3 { Gson$3(); }'
Maybe this is program method 'com.google.gson.Gson$FutureTypeAdapter { Gson$FutureTypeAdapter(); }'
Maybe this is program method 'com.google.gson.GsonBuilder { GsonBuilder(); }'
Maybe this is program method 'com.google.gson.JsonArray { JsonArray(); }'
Maybe this is program method 'com.google.gson.JsonElement { JsonElement(); }'
Maybe this is program method 'com.google.gson.JsonNull { JsonNull(); }'
Maybe this is program method 'com.google.gson.JsonObject { JsonObject(); }'
Maybe this is program method 'com.google.gson.JsonParser { JsonParser(); }'
Maybe this is program method 'com.google.gson.TypeAdapter { TypeAdapter(); }'
...
Maybe this is program method 'org.intellij.lang.annotations.JdkConstants { JdkConstants(); }'
Maybe this is program method 'org.intellij.lang.annotations.PrintFormatPattern { PrintFormatPattern(); }'
Maybe this is program method 'proguard.ClassPath { ClassPath(); }'
Maybe this is program method 'proguard.ClassSpecification { ClassSpecification(); }'
Maybe this is program method 'proguard.ClassSpecificationVisitorFactory { ClassSpecificationVisitorFactory(); }'
Maybe this is program method 'proguard.Configuration { Configuration(); }'
Maybe this is program method 'proguard.ConfigurationConstants { ConfigurationConstants(); }'
Maybe this is program method 'proguard.GPL { GPL(); }'
Maybe this is program method 'proguard.MemberSpecification { MemberSpecification(); }'
Maybe this is program method 'proguard.MemberValueSpecification { MemberValueSpecification(); }'
Maybe this is program method 'proguard.ParseException { ParseException(); }'
...
Maybe this is library method 'com.sun.crypto.provider.AESCipher$AES128_CBC_NoPadding { AESCipher$AES128_CBC_NoPadding(); }'
Maybe this is library method 'com.sun.crypto.provider.AESCipher$AES128_CFB_NoPadding { AESCipher$AES128_CFB_NoPadding(); }'
Maybe this is library method 'com.sun.crypto.provider.AESCipher$AES128_ECB_NoPadding { AESCipher$AES128_ECB_NoPadding(); }'
Maybe this is library method 'com.sun.crypto.provider.AESCipher$AES128_GCM_NoPadding { AESCipher$AES128_GCM_NoPadding(); }'
Maybe this is library method 'com.sun.crypto.provider.AESCipher$AES128_OFB_NoPadding { AESCipher$AES128_OFB_NoPadding(); }'
Maybe this is library method 'com.sun.crypto.provider.AESCipher$AES192_CBC_NoPadding { AESCipher$AES192_CBC_NoPadding(); }'
Maybe this is library method 'com.sun.crypto.provider.AESCipher$AES192_CFB_NoPadding { AESCipher$AES192_CFB_NoPadding(); }'
Maybe this is library method 'com.sun.crypto.provider.AESCipher$AES192_ECB_NoPadding { AESCipher$AES192_ECB_NoPadding(); }'
Maybe this is library method 'com.sun.crypto.provider.AESCipher$AES192_GCM_NoPadding { AESCipher$AES192_GCM_NoPadding(); }'
Maybe this is library method 'com.sun.crypto.provider.AESCipher$AES192_OFB_NoPadding { AESCipher$AES192_OFB_NoPadding(); }'
Maybe this is library method 'com.sun.crypto.provider.AESCipher$AES256_CBC_NoPadding { AESCipher$AES256_CBC_NoPadding(); }'
Maybe this is library method 'com.sun.crypto.provider.AESCipher$AES256_CFB_NoPadding { AESCipher$AES256_CFB_NoPadding(); }'
Maybe this is library method 'com.sun.crypto.provider.AESCipher$AES256_ECB_NoPadding { AESCipher$AES256_ECB_NoPadding(); }'
Maybe this is library method 'com.sun.crypto.provider.AESCipher$AES256_GCM_NoPadding { AESCipher$AES256_GCM_NoPadding(); }'
Maybe this is library method 'com.sun.crypto.provider.AESCipher$AES256_OFB_NoPadding { AESCipher$AES256_OFB_NoPadding(); }'
...
Maybe this is library method 'java.io.ByteArrayOutputStream { ByteArrayOutputStream(); }'
Maybe this is library method 'java.io.CharArrayWriter { CharArrayWriter(); }'
Maybe this is library method 'java.io.CharConversionException { CharConversionException(); }'
Maybe this is library method 'java.io.EOFException { EOFException(); }'
Maybe this is library method 'java.io.FileDescriptor { FileDescriptor(); }'
Maybe this is library method 'java.io.FileNotFoundException { FileNotFoundException(); }'
Maybe this is library method 'java.io.FilePermissionCollection { FilePermissionCollection(); }'
Maybe this is library method 'java.io.IOException { IOException(); }'
Maybe this is library method 'java.io.InputStream { InputStream(); }'
Maybe this is library method 'java.io.InterruptedIOException { InterruptedIOException(); }'
Maybe this is library method 'java.io.NotActiveException { NotActiveException(); }'
Maybe this is library method 'java.io.NotSerializableException { NotSerializableException(); }'
Maybe this is library method 'java.io.ObjectInputStream { ObjectInputStream(); }'
Maybe this is library method 'java.io.ObjectInputStream$GetField { ObjectInputStream$GetField(); }'
Maybe this is library method 'java.io.ObjectInputStream$HandleTable$HandleList { ObjectInputStream$HandleTable$HandleList(); }'
Maybe this is library method 'java.io.ObjectOutputStream { ObjectOutputStream(); }'
Maybe this is library method 'java.io.ObjectOutputStream$PutField { ObjectOutputStream$PutField(); }'
Maybe this is library method 'java.io.ObjectStreamException { ObjectStreamException(); }'
Maybe this is library method 'java.io.OutputStream { OutputStream(); }'
Maybe this is library method 'java.io.PipedInputStream { PipedInputStream(); }'
Maybe this is library method 'java.io.PipedOutputStream { PipedOutputStream(); }'
Maybe this is library method 'java.io.PipedReader { PipedReader(); }'
Maybe this is library method 'java.io.PipedWriter { PipedWriter(); }'
Maybe this is library method 'java.io.Reader { Reader(); }'
Maybe this is library method 'java.io.StreamCorruptedException { StreamCorruptedException(); }'
Maybe this is library method 'java.io.StringWriter { StringWriter(); }'
Maybe this is library method 'java.io.UTFDataFormatException { UTFDataFormatException(); }'
Maybe this is library method 'java.io.UnsupportedEncodingException { UnsupportedEncodingException(); }'
Maybe this is library method 'java.io.WinNTFileSystem { WinNTFileSystem(); }'
Maybe this is library method 'java.io.Writer { Writer(); }'
...
Maybe this is program field 'com.google.gson.internal.reflect.UnsafeReflectionAccessor { java.lang.Object theUnsafe; }'
Note: com.google.gson.internal.UnsafeAllocator accesses a method 'allocateInstance(java.lang.Class)' dynamically
Maybe this is library method 'jdk.internal.misc.Unsafe { java.lang.Object allocateInstance(java.lang.Class); }'
Note: com.google.gson.internal.reflect.UnsafeReflectionAccessor accesses a method 'objectFieldOffset(java.lang.reflect.Field)' dynamically
Maybe this is library method 'jdk.internal.misc.Unsafe { long objectFieldOffset(java.lang.reflect.Field); }'
Note: com.google.gson.internal.reflect.UnsafeReflectionAccessor accesses a method 'putBoolean(java.lang.Object,long,boolean)' dynamically
Maybe this is library method 'jdk.internal.misc.Unsafe { void putBoolean(java.lang.Object,long,boolean); }'
Note: com.google.gson.internal.reflect.UnsafeReflectionAccessor accesses a declared field 'theUnsafe' dynamically
Maybe this is program field 'com.google.gson.internal.reflect.UnsafeReflectionAccessor { java.lang.Object theUnsafe; }'
Note: kotlin.coroutines.jvm.internal.DebugMetadataKt accesses a declared field 'label' dynamically
Maybe this is program field 'kotlin.collections.SlidingWindowKt$windowedIterator$1 { int label; }'
Maybe this is program field 'kotlin.coroutines.experimental.jvm.internal.CoroutineImpl { int label; }'
Maybe this is program field 'kotlin.coroutines.intrinsics.IntrinsicsKt__IntrinsicsJvmKt$createCoroutineFromSuspendFunction$1 { int label; }'
Maybe this is program field 'kotlin.coroutines.intrinsics.IntrinsicsKt__IntrinsicsJvmKt$createCoroutineFromSuspendFunction$2 { int label; }'
Maybe this is program field 'kotlin.coroutines.intrinsics.IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$1 { int label; }'
Maybe this is program field 'kotlin.coroutines.intrinsics.IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$2 { int label; }'
Maybe this is program field 'kotlin.coroutines.intrinsics.IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$3 { int label; }'
Maybe this is program field 'kotlin.coroutines.intrinsics.IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$4 { int label; }'
Maybe this is program field 'kotlin.sequences.SequencesKt__SequencesKt$ifEmpty$1 { int label; }'
Maybe this is program field 'kotlin.sequences.SequencesKt___SequencesKt$zipWithNext$2 { int label; }'
Maybe this is program field 'proguard.classfile.util.DynamicMemberReferenceInitializer$MyDynamicMemberFinder { int label; }'
Maybe this is program field 'proguard.optimize.gson.GsonDeserializationOptimizer$FromJsonFieldCase { proguard.classfile.editor.CompactCodeAttributeComposer$Label label; }'
Maybe this is program field 'proguard.optimize.gson.OptimizedTypeAdapterInitializer$SwitchCase { proguard.classfile.editor.CodeAttributeEditor$Label label; }'
Maybe this is library field 'jdk.internal.org.objectweb.asm.tree.JumpInsnNode { jdk.internal.org.objectweb.asm.tree.LabelNode label; }'
Note: kotlin.coroutines.jvm.internal.ModuleNameRetriever accesses a declared method 'getDescriptor()' dynamically
Maybe this is library method 'com.sun.java.util.jar.pack.Package$Class$Member { com.sun.java.util.jar.pack.ConstantPool$DescriptorEntry getDescriptor(); }'
Maybe this is library method 'java.lang.Module { java.lang.module.ModuleDescriptor getDescriptor(); }'
Maybe this is library method 'java.lang.StackFrameInfo { java.lang.String getDescriptor(); }'
Maybe this is library method 'java.lang.StackWalker$StackFrame { java.lang.String getDescriptor(); }'
Maybe this is library method 'jdk.internal.org.objectweb.asm.Type { java.lang.String getDescriptor(); }'
Maybe this is library method 'jdk.internal.org.objectweb.asm.commons.Method { java.lang.String getDescriptor(); }'
...
Note: kotlinx.metadata.internal.protobuf.GeneratedMessageLite$SerializedForm accesses a method 'newBuilder()' dynamically
Maybe this is program method 'com.google.gson.Gson { com.google.gson.GsonBuilder newBuilder(); }'
Maybe this is program method 'kotlinx.metadata.internal.metadata.ProtoBuf$Annotation { kotlinx.metadata.internal.metadata.ProtoBuf$Annotation$Builder newBuilder(); }'
Maybe this is program method 'kotlinx.metadata.internal.metadata.ProtoBuf$Annotation$Argument { kotlinx.metadata.internal.metadata.ProtoBuf$Annotation$Argument$Builder newBuilder(); }'
Maybe this is program method 'kotlinx.metadata.internal.metadata.ProtoBuf$Annotation$Argument$Value { kotlinx.metadata.internal.metadata.ProtoBuf$Annotation$Argument$Value$Builder newBuilder(); }'
Maybe this is program method 'kotlinx.metadata.internal.metadata.ProtoBuf$Class { kotlinx.metadata.internal.metadata.ProtoBuf$Class$Builder newBuilder(); }'
Maybe this is program method 'kotlinx.metadata.internal.metadata.ProtoBuf$Constructor { kotlinx.metadata.internal.metadata.ProtoBuf$Constructor$Builder newBuilder(); }'
Maybe this is program method 'kotlinx.metadata.internal.metadata.ProtoBuf$Contract { kotlinx.metadata.internal.metadata.ProtoBuf$Contract$Builder newBuilder(); }'
Maybe this is program method 'kotlinx.metadata.internal.metadata.ProtoBuf$Effect { kotlinx.metadata.internal.metadata.ProtoBuf$Effect$Builder newBuilder(); }'
Maybe this is program method 'kotlinx.metadata.internal.metadata.ProtoBuf$EnumEntry { kotlinx.metadata.internal.metadata.ProtoBuf$EnumEntry$Builder newBuilder(); }'
Maybe this is program method 'kotlinx.metadata.internal.metadata.ProtoBuf$Expression { kotlinx.metadata.internal.metadata.ProtoBuf$Expression$Builder newBuilder(); }'
Maybe this is program method 'kotlinx.metadata.internal.metadata.ProtoBuf$Function { kotlinx.metadata.internal.metadata.ProtoBuf$Function$Builder newBuilder(); }'
Maybe this is program method 'kotlinx.metadata.internal.metadata.ProtoBuf$Package { kotlinx.metadata.internal.metadata.ProtoBuf$Package$Builder newBuilder(); }'
Maybe this is program method 'kotlinx.metadata.internal.metadata.ProtoBuf$PackageFragment { kotlinx.metadata.internal.metadata.ProtoBuf$PackageFragment$Builder newBuilder(); }'
Maybe this is program method 'kotlinx.metadata.internal.metadata.ProtoBuf$Property { kotlinx.metadata.internal.metadata.ProtoBuf$Property$Builder newBuilder(); }'
Maybe this is program method 'kotlinx.metadata.internal.metadata.ProtoBuf$QualifiedNameTable { kotlinx.metadata.internal.metadata.ProtoBuf$QualifiedNameTable$Builder newBuilder(); }'
Maybe this is program method 'kotlinx.metadata.internal.metadata.ProtoBuf$QualifiedNameTable$QualifiedName { kotlinx.metadata.internal.metadata.ProtoBuf$QualifiedNameTable$QualifiedName$Builder newBuilder(); }'
Maybe this is program method 'kotlinx.metadata.internal.metadata.ProtoBuf$StringTable { kotlinx.metadata.internal.metadata.ProtoBuf$StringTable$Builder newBuilder(); }'
Maybe this is program method 'kotlinx.metadata.internal.metadata.ProtoBuf$Type { kotlinx.metadata.internal.metadata.ProtoBuf$Type$Builder newBuilder(); }'
Maybe this is program method 'kotlinx.metadata.internal.metadata.ProtoBuf$Type$Argument { kotlinx.metadata.internal.metadata.ProtoBuf$Type$Argument$Builder newBuilder(); }'
Maybe this is program method 'kotlinx.metadata.internal.metadata.ProtoBuf$TypeAlias { kotlinx.metadata.internal.metadata.ProtoBuf$TypeAlias$Builder newBuilder(); }'
Maybe this is program method 'kotlinx.metadata.internal.metadata.ProtoBuf$TypeParameter { kotlinx.metadata.internal.metadata.ProtoBuf$TypeParameter$Builder newBuilder(); }'
Maybe this is program method 'kotlinx.metadata.internal.metadata.ProtoBuf$TypeTable { kotlinx.metadata.internal.metadata.ProtoBuf$TypeTable$Builder newBuilder(); }'
Maybe this is program method 'kotlinx.metadata.internal.metadata.ProtoBuf$ValueParameter { kotlinx.metadata.internal.metadata.ProtoBuf$ValueParameter$Builder newBuilder(); }'
Maybe this is program method 'kotlinx.metadata.internal.metadata.ProtoBuf$VersionRequirement { kotlinx.metadata.internal.metadata.ProtoBuf$VersionRequirement$Builder newBuilder(); }'
Maybe this is program method 'kotlinx.metadata.internal.metadata.ProtoBuf$VersionRequirementTable { kotlinx.metadata.internal.metadata.ProtoBuf$VersionRequirementTable$Builder newBuilder(); }'
Maybe this is program method 'kotlinx.metadata.internal.metadata.jvm.JvmModuleProtoBuf$Module { kotlinx.metadata.internal.metadata.jvm.JvmModuleProtoBuf$Module$Builder newBuilder(); }'
Maybe this is program method 'kotlinx.metadata.internal.metadata.jvm.JvmModuleProtoBuf$PackageParts { kotlinx.metadata.internal.metadata.jvm.JvmModuleProtoBuf$PackageParts$Builder newBuilder(); }'
Maybe this is program method 'kotlinx.metadata.internal.metadata.jvm.JvmProtoBuf$JvmFieldSignature { kotlinx.metadata.internal.metadata.jvm.JvmProtoBuf$JvmFieldSignature$Builder newBuilder(); }'
Maybe this is program method 'kotlinx.metadata.internal.metadata.jvm.JvmProtoBuf$JvmMethodSignature { kotlinx.metadata.internal.metadata.jvm.JvmProtoBuf$JvmMethodSignature$Builder newBuilder(); }'
Maybe this is program method 'kotlinx.metadata.internal.metadata.jvm.JvmProtoBuf$JvmPropertySignature { kotlinx.metadata.internal.metadata.jvm.JvmProtoBuf$JvmPropertySignature$Builder newBuilder(); }'
Maybe this is program method 'kotlinx.metadata.internal.metadata.jvm.JvmProtoBuf$StringTableTypes { kotlinx.metadata.internal.metadata.jvm.JvmProtoBuf$StringTableTypes$Builder newBuilder(); }'
Maybe this is program method 'kotlinx.metadata.internal.metadata.jvm.JvmProtoBuf$StringTableTypes$Record { kotlinx.metadata.internal.metadata.jvm.JvmProtoBuf$StringTableTypes$Record$Builder newBuilder(); }'
Maybe this is library method 'java.nio.file.attribute.AclEntry { java.nio.file.attribute.AclEntry$Builder newBuilder(); }'
Note: proguard.configuration.ConfigurationLogger accesses a method 'w(java.lang.String,java.lang.String)' dynamically
Note: there were 8 classes trying to access annotations using reflection.
You should consider keeping the annotation attributes
(using '-keepattributes *Annotation*').
(https://www.guardsquare.com/proguard/manual/troubleshooting#attributes)
Note: there were 13 classes trying to access generic signatures using reflection.
You should consider keeping the signature attributes
(using '-keepattributes Signature').
(https://www.guardsquare.com/proguard/manual/troubleshooting#attributes)
Note: there were 1 classes trying to access enclosing classes using reflection.
You should consider keeping the inner classes attributes
(using '-keepattributes InnerClasses').
(https://www.guardsquare.com/proguard/manual/troubleshooting#attributes)
Note: there were 8 unresolved dynamic references to classes or interfaces.
You should check if you need to specify additional program jars.
(https://www.guardsquare.com/proguard/manual/troubleshooting#dynamicalclass)
Note: there were 11 accesses to class members by means of reflection.
You should consider explicitly keeping the mentioned class members
(using '-keep' or '-keepclassmembers').
(https://www.guardsquare.com/proguard/manual/troubleshooting#dynamicalclassmember)
Warning: there were 36 unresolved references to classes or interfaces.
You may need to add missing library jars or update their versions.
If your code works fine without the missing classes, you can suppress
the warnings with '-dontwarn' options.
(https://www.guardsquare.com/proguard/manual/troubleshooting#unresolvedclass)
Error: Please correct the above warnings first.
如您所见,它提供了大量警告,需要在继续之前修复它们。我查看了几个参考资料,它们都表明在这个基本配置中使用proguard本身是非常容易的,但是没有任何关于处理这些错误的内容。。。
那么我该如何修复这些错误呢?先谢谢你,
暂无答案!
目前还没有任何答案,快来回答吧!