【问题标题】:kotlin.Any not found when enabling Proguard启用 Proguard 时未找到 kotlin.Any
【发布时间】:2021-12-28 23:18:48
【问题描述】:

当启用 Proguard 时,我看到运行时崩溃。我基本上将所有内容都保留在 Proguard 规则中。

-dontobfuscate
-dontoptimize
-dontshrink
-addconfigurationdebugging
-dontpreverify
-dontwarn ***

-keep class *** { *** *; <methods>; <init>(...);}
-keep interface *** { *** *; }
-keep @interface *** { *** *; }
-keep enum *** { *** *; }
-keepattributes ***
-optimizations !code/simplification/arithmetic,!code/simplification/cast,!code/allocation/variable,!field/*,!class/merging/*,!method/removal/*,!class/unboxing/enum

是的,这可能不是 Proguard 的最佳用途,但即使这样也会导致以下崩溃

11-17 20:23:17.168 22976 23157 E AndroidRuntime: java.lang.AssertionError: Built-in class kotlin.Any is not found
11-17 20:23:17.168 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.impl.builtins.KotlinBuiltIns$3.invoke(KotlinBuiltIns.java:113)
11-17 20:23:17.168 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.impl.builtins.KotlinBuiltIns$3.invoke(KotlinBuiltIns.java:108)
11-17 20:23:17.168 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$MapBasedMemoizedFunction.invoke(LockBasedStorageManager.java:512)
11-17 20:23:17.168 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$MapBasedMemoizedFunctionToNotNull.invoke(LockBasedStorageManager.java:587)
11-17 20:23:17.168 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.impl.builtins.KotlinBuiltIns.getBuiltInClassByName(KotlinBuiltIns.java:362)
11-17 20:23:17.168 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.impl.builtins.KotlinBuiltIns.getAny(KotlinBuiltIns.java:367)
11-17 20:23:17.168 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.impl.builtins.KotlinBuiltIns.getAnyType(KotlinBuiltIns.java:642)
11-17 20:23:17.168 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.impl.builtins.KotlinBuiltIns.getNullableAnyType(KotlinBuiltIns.java:647)
11-17 20:23:17.168 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.impl.builtins.KotlinBuiltIns.getDefaultBound(KotlinBuiltIns.java:652)
11-17 20:23:17.168 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.impl.descriptors.impl.TypeParameterDescriptorImpl.createWithDefaultBound(TypeParameterDescriptorImpl.java:56)
11-17 20:23:17.168 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.impl.descriptors.NotFoundClasses$MockClassDescriptor.<init>(NotFoundClasses.kt:55)
11-17 20:23:17.168 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.impl.descriptors.NotFoundClasses$classes$1.invoke(NotFoundClasses.kt:44)
11-17 20:23:17.168 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.impl.descriptors.NotFoundClasses$classes$1.invoke(NotFoundClasses.kt:22)
11-17 20:23:17.168 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$MapBasedMemoizedFunction.invoke(LockBasedStorageManager.java:512)
11-17 20:23:17.168 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$MapBasedMemoizedFunctionToNotNull.invoke(LockBasedStorageManager.java:587)
11-17 20:23:17.168 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.impl.descriptors.NotFoundClasses.getClass(NotFoundClasses.kt:92)
11-17 20:23:17.168 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.impl.serialization.deserialization.TypeDeserializer$typeConstructor$1.invoke(TypeDeserializer.kt:109)
11-17 20:23:17.168 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.impl.serialization.deserialization.TypeDeserializer.typeConstructor(TypeDeserializer.kt:113)
11-17 20:23:17.168 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.impl.serialization.deserialization.TypeDeserializer.simpleType(TypeDeserializer.kt:75)
11-17 20:23:17.168 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.impl.serialization.deserialization.TypeDeserializer.type(TypeDeserializer.kt:63)
11-17 20:23:17.168 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.impl.serialization.deserialization.MemberDeserializer.valueParameters(MemberDeserializer.kt:417)
11-17 20:23:17.168 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.impl.serialization.deserialization.MemberDeserializer.loadConstructor(MemberDeserializer.kt:342)
11-17 20:23:17.168 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedClassDescriptor.computePrimaryConstructor(DeserializedClassDescriptor.kt:122)
11-17 20:23:17.168 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedClassDescriptor.access$computePrimaryConstructor(DeserializedClassDescriptor.kt:34)
11-17 20:23:17.168 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedClassDescriptor$primaryConstructor$1.invoke(DeserializedClassDescriptor.kt:65)
11-17 20:23:17.168 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedClassDescriptor$primaryConstructor$1.invoke(DeserializedClassDescriptor.kt:34)
11-17 20:23:17.168 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$LockBasedLazyValue.invoke(LockBasedStorageManager.java:355)
11-17 20:23:17.168 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedClassDescriptor.getUnsubstitutedPrimaryConstructor(DeserializedClassDescriptor.kt:126)
11-17 20:23:17.168 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedClassDescriptor.computeConstructors(DeserializedClassDescriptor.kt:129)
11-17 20:23:17.169 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedClassDescriptor.access$computeConstructors(DeserializedClassDescriptor.kt:34)
11-17 20:23:17.169 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedClassDescriptor$constructors$1.invoke(DeserializedClassDescriptor.kt:66)
11-17 20:23:17.169 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedClassDescriptor$constructors$1.invoke(DeserializedClassDescriptor.kt:34)
11-17 20:23:17.169 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$LockBasedLazyValue.invoke(LockBasedStorageManager.java:355)
11-17 20:23:17.169 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$LockBasedNotNullLazyValue.invoke(LockBasedStorageManager.java:474)
11-17 20:23:17.169 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedClassDescriptor.getConstructors(DeserializedClassDescriptor.kt:137)
11-17 20:23:17.169 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.KClassImpl.getConstructorDescriptors(KClassImpl.kt:200)
11-17 20:23:17.169 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.KClassImpl$Data$constructors$2.invoke(KClassImpl.kt:91)
11-17 20:23:17.169 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.KClassImpl$Data$constructors$2.invoke(KClassImpl.kt:44)
11-17 20:23:17.169 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.ReflectProperties$LazySoftVal.invoke(ReflectProperties.java:92)
11-17 20:23:17.169 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.ReflectProperties$Val.getValue(ReflectProperties.java:31)
11-17 20:23:17.169 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.KClassImpl$Data.getConstructors(Unknown Source:7)
11-17 20:23:17.169 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.internal.KClassImpl.getConstructors(KClassImpl.kt:235)
11-17 20:23:17.169 22976 23157 E AndroidRuntime:    at kotlin.reflect.jvm.ReflectJvmMapping.getKotlinFunction(ReflectJvmMapping.kt:144)
11-17 20:23:17.169 22976 23157 E AndroidRuntime:    at com.fasterxml.jackson.module.kotlin.KotlinNamesAnnotationIntrospector.findKotlinParameterName(KotlinNamesAnnotationIntrospector.kt:115)
11-17 20:23:17.169 22976 23157 E AndroidRuntime:    at com.fasterxml.jackson.module.kotlin.KotlinNamesAnnotationIntrospector.findImplicitPropertyName(KotlinNamesAnnotationIntrospector.kt:31)
11-17 20:23:17.169 22976 23157 E AndroidRuntime:    at com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair.findImplicitPropertyName(AnnotationIntrospectorPair.java:490)
11-17 20:23:17.169 22976 23157 E AndroidRuntime:    at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector._addCreatorParam(POJOPropertiesCollector.java:485)
11-17 20:23:17.169 22976 23157 E AndroidRuntime:    at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector._addCreators(POJOPropertiesCollector.java:465)
11-17 20:23:17.169 22976 23157 E AndroidRuntime:    at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector.collectAll(POJOPropertiesCollector.java:313)
11-17 20:23:17.169 22976 23157 E AndroidRuntime:    at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector.getPropertyMap(POJOPropertiesCollector.java:287)
11-17 20:23:17.169 22976 23157 E AndroidRuntime:    at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector.getProperties(POJOPropertiesCollector.java:170)
11-17 20:23:17.169 22976 23157 E AndroidRuntime:    at com.fasterxml.jackson.databind.introspect.BasicBeanDescription._properties(BasicBeanDescription.java:164)
11-17 20:23:17.169 22976 23157 E AndroidRuntime:    at com.fasterxml.jackson.databind.introspect.BasicBeanDescription.findProperties(BasicBeanDescription.java:239)
11-17 20:23:17.169 22976 23157 E AndroidRuntime:    at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory._findCreatorsFromProperties(BasicDeserializerFactory.java:292)
11-17 20:23:17.169 22976 23157 E AndroidRuntime:    at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory._constructDefaultValueInstantiator(BasicDeserializerFactory.java:276)
11-17 20:23:17.169 22976 23157 E AndroidRuntime:    at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory.findValueInstantiator(BasicDeserializerFactory.java:224)
11-17 20:23:17.169 22976 23157 E AndroidRuntime:    at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.buildBeanDeserializer(BeanDeserializerFactory.java:220)
11-17 20:23:17.169 22976 23157 E AndroidRuntime:    at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.createBeanDeserializer(BeanDeserializerFactory.java:143)
11-17 20:23:17.169 22976 23157 E AndroidRuntime:    at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer2(DeserializerCache.java:414)
11-17 20:23:17.169 22976 23157 E AndroidRuntime:    at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializerCache.java:349)
11-17 20:23:17.169 22976 23157 E AndroidRuntime:    at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:264)
11-17 20:23:17.169 22976 23157 E AndroidRuntime:    at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)
11-17 20:23:17.172 22976 23157 E AndroidRuntime:    at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)
11-17 20:23:17.172 22976 23157 E AndroidRuntime:    at com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:479)
11-17 20:23:17.172 22976 23157 E AndroidRuntime:    at com.fasterxml.jackson.databind.ObjectMapper._findRootDeserializer(ObjectMapper.java:4405)
11-17 20:23:17.172 22976 23157 E AndroidRuntime:    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4214)
11-17 20:23:17.172 22976 23157 E AndroidRuntime:    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3214)
11-17 20:23:17.172 22976 23157 E AndroidRuntime:    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3182)
11-17 20:23:17.172 22976 23157 E AndroidRuntime:    at 
...

build.gradle 中没有排除 Kotlin 相关文件。包含 std 库,因为禁用 Proguard 时没有问题

当前使用 Proguard 7.1.1,与 6.0.3 相同的问题。任何帮助表示赞赏

【问题讨论】:

    标签: android kotlin jackson proguard


    【解决方案1】:

    这不是最佳解决方案,但您可以通过逐步调查自己测试以下代码

    -dontskipnonpubliclibraryclassmembers
        -dontshrink
        -dontoptimize
        -printmapping build/libs/output/obfuscation.map
        -keepattributes
        -adaptclassstrings
        -dontnote
        -dontwarn
    
    # Keep Android classes
    -keep class ** extends android.** {
        <fields>;
        <methods>;
    }
    
    # Keep serializable classes & fields
    -keep class ** extends java.io.Serializable {
        <fields>;
    }
    
    # Keep - Applications. Keep all application classes, along with their 'main'
    # methods.
    -keepclasseswithmembers public class * {
        public static void main(java.lang.String[]);
    }
    
    # Also keep - Enumerations. Keep the special static methods that are required in
    # enumeration classes.
    -keepclassmembers enum  * {
        public static **[] values();
        public static ** valueOf(java.lang.String);
    }
    
    
    -assumenosideeffects class android.util.Log {
        public static *** d(...);
        public static *** e(...);
        public static *** w(...);
    }
    

    【讨论】:

    • 这比我贴的更严格吧?
    • 你知道每个原始类型都扩展类 Any ,所以你的问题是混淆这个类,下面的代码必须避免混淆 kotlin 类 -keep class kotlin.reflect.jvm.internal.** { *; } -keep class kotlin.Metadata { *; }
    • 如果我的回答正确,请标记为答案
    • 添加了这些规则,还是同样的问题
    • 看起来 APK 根目录中的整个 kotlin 文件夹已被删除。有谁知道为什么会这样?我在这里发布了另一个问题:stackoverflow.com/questions/70207298/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    • 1970-01-01
    相关资源
    最近更新 更多