Android:如何从 Kotlin 调用 ndk 函数?

标签 android android-ndk kotlin

此代码适用于 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/

相关文章:

android - Camera.translate 和 Matrix.preTranslate 或 Matrix.postTranslate 之间的区别?

android - 如何允许特定 native 库的特定 ABI?

rx-java - Kotlin 和 RxJava - 为什么我的 Single.zip() 没有编译?

android - Jetpack Compose 将参数传递给 viewModel

java - 照片由相机上传异常(Firebase 存储)

java - 使用 Retrofit2 gson-converter 解析 json,并使用其他名称的字段

java - "UnsatisfiedLinkError: Native method not found"但命名正确吗?

android - 为什么 clang 将 NULL 定义为 __null?

kotlin - 单位归还功能的目的是什么

java - 使用绑定(bind)类的 inflate() 时,Android 数据绑定(bind)不起作用