从今天开始,当我尝试构建我的 Kotlin Android 应用时,我在 Gradle 构建中遇到了以下错误:
Error:cannot access Baz
bad class file: /Users/me/projects/site/android/app/build/tmp/kapt/debug/classFileStubs/com/company/foo/Bar$Baz.class
bad RuntimeInvisibleParameterAnnotations attribute: Baz(FragmentManager)
Please remove or make sure it appears in the correct subdirectory of the classpath.
它指向一个扩展 android.support.v4.app.FragmentStatePagerAdapter 的内部类 Baz。我可以通过注释掉类以及外部类中对它的任何引用并重新构建来临时绕过错误。错误消失了,但显然该类不再存在,因此其他事情在运行时会中断。然后,如果我取消注释并构建,它将适用于几个构建。然后错误又回来了。冲洗并重复。我认为关闭 Genymotion 模拟器可能会触发它。
还有其他人遇到过这个问题,或者有什么想法吗?
这是有问题的代码:
class Bar : Fragment() {
@Inject
lateinit var api:ApiRequester
var data : ArrayList<Data> = ArrayList()
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
//[...] view creation code
//[...] data population code
viewPager.adapter = Baz(childFragmentManager)
//[...] more view creation code
}
inner class Baz(fm:FragmentManager) : FragmentStatePagerAdapter(fm) {
override fun getCount(): Int {
return data.count()
}
override fun getItem(position: Int): Fragment? {
var jf = FooFragment()
var bundle = Bundle()
bundle.putParcelable("data", data[position])
jf.arguments = bundle
return jf
}
}
编辑:抱歉,Baz 扩展了 FragmentStatePagerAdapter,而不是我最初所说的 Fragment。我用的是 Dagger2,在这里完全可以发挥作用。
最佳答案
我有两个选择可以帮助你。
1- 尝试升级 proguard。使用THIS
2- 使用 Java 7,改变你的路径。
export JAVA_HOME=/usr/libexec/java_home -v 1.7
关于android - Kotlin - 间歇性 "bad class file"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34867130/