Kotlin - 间歇性的“坏类文件”错误

时间:2016-01-19 01:35:50

标签: android gradle kotlin

从今天开始,当我尝试构建我的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.

它指向一个内部类Baz,它扩展了android.support.v4.app.FragmentStatePagerAdapter。我可以通过注释掉类,以及在外部类中对它的任何引用以及重建来暂时解决错误。错误消失了,但显然该类不再存在,因此其他事情在运行时中断。然后,如果我取消注释并构建,它将适用于一些构建。然后错误回来了。冲洗并重复。我认为关闭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 个答案:

答案 0 :(得分:2)

我有两种选择可以帮助你。

1-尝试升级proguard。使用THIS

2-使用Java 7,改变你的路径。 导出JAVA_HOME = /usr/libexec/java_home -v 1.7