¿Cómo puedo ofuscar mi sdk codificado con kotlin (y deshacerme de Metadata)

Estoy desarrollando un SDK (biblioteca de Android) y tengo que ocultar una gran parte de mi código para que el cliente no intente jugar con el código interno. Mi lib está codificado en kotlin, y utilicé proguard para ofuscar el código. El problema es que todavía hay annotations @kotlin.Metadata (runtime) dentro del código después de comstackr y ofuscar. Con esas annotations, es muy fácil recuperar el código java que originó este bytecode "(no tan) ofuscado".

Primero pensé que era mi culpa, y mi proyecto tenía demasiadas fonts de entropía que podrían haber inducido este comportamiento, así que hice un proyecto de muestra para probar que el problema no proviene de mi implementación de SDK. Creé un nuevo proyecto con AS, luego un module lib con 2 files:

  • facade.kt es mi class de fachada, la que no deseo ofuscar, para que el cliente pueda usarla:

    package com.example.mylibrary class MyFacade(val internalClass:InternalClass) { fun doSomething() { internalClass.doSomething( firstArgument=1, secondArgument=2 ) } } 
  • y en esta muestra, internal.kt contiene las classs que quiero confundir:

     package com.example.mylibrary class InternalClass { fun doSomething(firstArgument: Int, secondArgument: Int) { System.out.println("Arguments are : $firstArgument, $secondArgument") } } 

Las reglas de proguard se inyectan en el proyecto de gradle con este cierre de lanzamiento:

 buildTypes { release { minifyEnabled true proguardFiles 'proguard-rules.pro' } } 

Y aquí está proguard-rules.pro (solo una línea, nada más):

 -keep class com.example.mylibrary.MyFacade {*;} 

El resultado: cuando yo ./gradlew clean myLib:assembleRelease , obtengo un aar en el que se guarda mi fachada, y mi class interna ha sido renombrada en 'a', con un método 'a', excepto que la class todavía está anotado con kotlin @Metadata, que contiene toda la información que ayuda al decomstackdor a recuperar el nombre de la class original, el método, los nombres de los attributes y los arguments, etc … Así que mi código no está tan ofuscado en absoluto …

 @Metadata( mv = {1, 1, 7}, bv = {1, 0, 2}, k = 1, d1 = {"\u0000\u001a\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0002\n\u0002\u0010\u0002\n\u0000\n\u0002\u0010\b\n\u0002\b\u0002\u0018\u00002\u00020\u0001B\u0005¢\u0006\u0002\u0010\u0002J\u0016\u0010\u0003\u001a\u00020\u00042\u0006\u0010\u0005\u001a\u00020\u00062\u0006\u0010\u0007\u001a\u00020\u0006¨\u0006\b"}, d2 = {"Lcom/example/mylibrary/InternalClass;", "", "()V", "doSomething", "", "firstArgument", "", "secondArgument", "mylibrary_release"} ) public final class a { ... } 

Entonces mi pregunta: ¿es posible deshacerse de esas annotations? ¿Soy el único que enfrenta este problema o me he perdido algo?