Kotlin 反射的 ProGuard 规则

Kir*_*man 5 reflection android proguard kotlin

这是一个非常简单的类:

class MainActivity : AppCompatActivity() {

    val prop: String = "test"

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

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

}
Run Code Online (Sandbox Code Playgroud)

如果我使用 ProGuard 使用以下规则运行此应用程序:

-dontwarn kotlin.**
-dontwarn org.w3c.dom.events.*
-dontwarn org.jetbrains.kotlin.di.InjectorForRuntimeDescriptorLoader
Run Code Online (Sandbox Code Playgroud)

我得到这个异常:

a.d.g: Property 'prop' not resolved in class com.cypressworks.kotlinreflectionproguard.MainActivity
Run Code Online (Sandbox Code Playgroud)

我需要应用哪些 ProGuard 规则才能使其正常工作?

Log*_*ain 1

如果 ProGuard 正在删除您的属性,则该dontwarn规则将仅隐藏警告消息。你需要的是实际告诉 ProGuard 保留它。

一种可能的方法是:

-keepclassmembers public class com.cypressworks.kotlinreflectionproguard.** {
    public * *;
}
Run Code Online (Sandbox Code Playgroud)