2015-05-05 2 views
4

Вот очень простой класс:правила Proguard для Котлин отражения

class MainActivity : AppCompatActivity() { 

    val prop: String = "test" 

    override fun onCreate(savedInstanceState: Bundle?) { 
     super.onCreate(savedInstanceState) 

     Log.d("MainActivity", ::prop.name) 
    } 

} 

Если я запускаю это приложение с ProGuard, используя следующие правила:

-dontwarn kotlin.** 
-dontwarn org.w3c.dom.events.* 
-dontwarn org.jetbrains.kotlin.di.InjectorForRuntimeDescriptorLoader 

Я получаю это исключение:

a.d.g: Property 'prop' not resolved in class com.cypressworks.kotlinreflectionproguard.MainActivity 

Какие правила ProGuard мне нужно применить, чтобы заставить его работать?

+0

ли у вас есть успешный ответ на этот вопрос? –

+0

Не совсем, проблема отслеживается здесь: https://youtrack.jetbrains.com/issue/KT-7652. Однако отражение свойств теперь работает без 'kotlin-reflection.jar' и не требует каких-либо правил proguard. –

ответ

1

Если ProGuard удаляет ваш атрибут, правило dontwarn будет скрывать только предупреждающие сообщения. Что вам нужно, так это сказать ProGuard, чтобы сохранить его.

Одним из возможных путей может быть:

-keepclassmembers public class com.cypressworks.kotlinreflectionproguard.** { 
    public * *; 
} 
Смежные вопросы