android - Kotlin - 间歇性 "bad class file"错误

标签 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.

它指向一个扩展 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/

相关文章:

android - Android中setTitle方法详解

javascript - React Native Maps - 自定义标记图像不在更高的 Android 版本中呈现

为版本 > 5.0 的设备构建时,Android Studio 找不到资源

android - 使用HMS Toolkit添加HMS和GMS时找不到com.huawei.hms :hwid:5. 3.0.301和推送套件

java - Kotlin 中字段的 `open` 关键字是什么?

java - android中的改造-使用对象而不是json中的数组

java - 从 mysql select 获取计数结果并解析到 TextView

android - 异步结果的类型是什么?

在 Internet 代理后面的 VirtualBox Ubuntu 主机 windows 10 上的 Gradle,获取 rg.apache.http.ssl.SSLInitializationException : Windows-ROOT not found

android - 如何编写在 Kotlin Android 中的间隔内循环的计数器