Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

166
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!