此代码在Java上有效。但是在迁移到Kotlin之后,编译器会将方法native fun stringFromNative(): String视为错误,并显示以下文本:

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    Toast.makeText(this, stringFromNative(), Toast.LENGTH_LONG).show()
}

companion object {

    init {
        System.loadLibrary("_ndkkt")
    }
    native fun stringFromNative(): String
}
}
谢谢@KenVanHoeylandt!
Andswer是:
class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    Toast.makeText(this, stringFromNative(), Toast.LENGTH_LONG).show()
}

   init {
        System.loadLibrary("_ndkkt")
    }

    external fun getStringFromNative(): String
}

}
如果希望在另一个类中使用此本机函数,则可以指定将其包围的类,如下所示:
val aStringFromNative : String = MainActivity().getStringFromNative()

最佳答案

external fun stringFromNative(): String放在伴随对象之外,并放入MainActivity

(我通过查看https://github.com/ligee/kotlin-ndk-samples找到了答案)

07-26 09:31