我有一个整洁的功能,可以在视图上执行某些操作:
fun<T : View> Activity.withView(nr : Int, fn : T.()->Unit) {
(findViewById(nr) as T?)?.fn()
}
现在,当我在我的活动中使用此功能时:
withView<Spinner>(R.id.spinner_toolbar) {
adapter = AdapterIndeksuDlaSpinnera(this@NewMainActivity, PlaylistIndex)
......在使用ProGuard之前一切正常。我可以看到AdapterIndeksuDlaSpinnera
被破坏,正如预期的那样,但是当使用“无法加载类AdapterIndeksuDlaSpinnera”进行编程时应用程序失败(同时它应该抱怨错误的适配器名称)。
我能够通过禁用可以在withView
-keep class pl.qus.xenoamp.adapter.** { *; }
但我觉得这不是一个好的解决方案(我不知道其他类可以通过这种方式失败!)。那么有人可以解释什么是问题,我应该添加什么ProGuard行来潜在地修复withView
中使用的其他类的类似事件?
答案 0 :(得分:1)
这是一个艰难的。简而言之,Proguard并不了解Kotlin。它使用简单的代码分析来检测Class.forName()
之类的东西并解决它们,但是对于任何更复杂的事情都可能会失败。您需要查看来自.class
子目录的生成的build
文件(您可以发布相关的文件吗?)以找出实际发生的情况。
现在你可以做两件事: