Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

173
Vistas
La metada de la clase de datos se elimina con proguard / R8

Tengo un paquete con algunas clases de datos y estoy tratando de acceder al constructor en tiempo de ejecución usando Kotlin reflection clazz.primaryConstructor . Todo funciona como se esperaba, pero cuando habilito R8, los metadatos de las clases de datos se eliminan, por ejemplo, cuando verifico si el KClass isData devuelve falso y el constructor principal también es nulo, lo que ocurre solo cuando se habilita R8. Intenté todo, incluso agregar la anotación @keep a todas las clases de datos y agregar una regla para mantener todo en el paquete de modelos, también agregué estas reglas

 -keep class kotlin.reflect.** -keep class kotlin.Metadata { *; }

pero aún no tuve suerte, ¿alguna idea de qué está pasando o cómo solucionarlo?

Informe de muestra

Gracias por adelantado.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Lo que resultó ser el problema es que R8 incluido con AGP 7.0 (versión con Android Studio - Arctic Fox ) no maneja correctamente los metadatos de Kotlin para Kotlin 1.6.0.

Si usa Kotlin 1.6.0 ( classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.0" ) con AGP 7.0, se requiere la versión 3.0.77 de R8 para reducir las bibliotecas de Kotlin y usar kotlin-reflect . Actualizar a AGP 7.0.4 no es suficiente, ya que esa versión se incluye con R8 3.0.76.

Para usar R8 3.0.77, agregue lo siguiente a su settings.gradle o settings.gradle.kts :

 pluginManagement { buildscript { repositories { mavenCentral() maven { url = uri("https://storage.googleapis.com/r8-releases/raw") } } dependencies { classpath("com.android.tools:r8:3.0.77") classpath('com.google.guava:guava:30.1.1-jre') } } }

Otra opción para AGP 7.0 es usar Kotlin 1.5.31.

También considere alinear su versión de kotlin-reflect con la versión del compilador de Kotlin.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda