Kotlin禁用元数据注释

Kotlin禁用元数据注释,kotlin,proguard,obfuscation,decompiling,Kotlin,Proguard,Obfuscation,Decompiling,有没有办法禁用Kotlin元数据或只是混淆它们?它是在编译过程中添加的。 整个代码都很模糊,但名为“Kotlin reflect.jar”的Kotlin库将类名、方法和参数等方法细节留给了类型 @元数据(mv={1,1,13},bv={1,0,3},k=1,d1= {“\000\022\n\002\030\002\n\002\030\002\n\000\n\002\020\016\n\002\b\002\030\0002\0020\001B\r\022\006\020\002\032\0020\

有没有办法禁用Kotlin元数据或只是混淆它们?它是在编译过程中添加的。 整个代码都很模糊,但名为“Kotlin reflect.jar”的Kotlin库将类名、方法和参数等方法细节留给了类型

@元数据(mv={1,1,13},bv={1,0,3},k=1,d1= {“\000\022\n\002\030\002\n\002\030\002\n\000\n\002\020\016\n\002\b\002\030\0002\0020\001B\r\022\006\020\002\032\0020\003?\006\002\020\004R\016\020\002\032\0020\0020\003X?\004\006\002\n\000�\006\005"}, d2={“Lcom/test/SomeException;”、“Lcom/test/SomeException;”、“errorMessage”、“”、“(Ljava/lang/String;)V、“build”}) 公共最终类SomeException扩展了异常{ public SomeException(@NotNull String paramString){super(paramString);this.errorMessage=paramString;} 私有最终字符串错误消息; }


我创建了“unmeta”,这是一个Android Gradle插件,它删除了发布版本的所有Kotlin
@Metadata
@DebugMetadata
注释

你可以在这里找到它:


它使用ASM并直接对编译的字节码进行操作。

我认为任何Java.jar/.class模糊器都应该可以工作。但是,您应该注意,这可能会破坏或显著影响依赖于方法、字段和(如果您也混淆了这些)类名的任何内容,包括反射、依赖项注入、日志、堆栈跟踪和c。最后使用R8代替Proguard,使用相同的规则,并在dexing步骤中工作,但相同的类仍然有这个注释,其中包含类、方法和参数的详细信息。我认为这是Kotlin语言中的巨大安全漏洞,应该以某种方式加以修复。不确定此元数据是否仍在使用,因为代码中不再使用实名。我们不知道您的R8/ProGuard规则是什么,例如,如果您的
keep
规则太宽。@Michael,这绝对不是关于
keep
规则的。如上所述,元数据在索引步骤(apk构建的一部分)中被删除。