此代码适用于 Java。但是在迁移到 Kotlin 之后,编译器将方法 native fun stringFromNative(): String
显示为错误,并带有以下文本:
Function without a body must be abstract
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!
答案是:
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 找到了答案)
关于Android:如何从 Kotlin 调用 ndk 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36932662/