【问题标题】:Android: How to call ndk function from Kotlin?Android:如何从 Kotlin 调用 ndk 函数?
【发布时间】:2016-04-29 07:51:50
【问题描述】:

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

答案是:

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替换native吗?
  • native fun stringFromNative(): String 放在伴随对象之外并放入MainActivity 有什么不同吗?
  • @KenVanHoeylandt 已解决!谢谢!

标签: android android-ndk kotlin


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:
    Kotlin :
    
    call method from ndk file
     external fun stringFromJNI(): String
    
    
     load c++ file
     companion object {
            init {
                System.loadLibrary("native-lib")
            }
        }
    

    【讨论】:

    • 不鼓励仅使用代码回答,因为它们没有为未来的读者提供太多信息,请对您所写的内容提供一些解释
    猜你喜欢
    • 1970-01-01
    • 2021-10-25
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    相关资源
    最近更新 更多