Skip to content
This repository has been archived by the owner on Apr 13, 2023. It is now read-only.

Latest commit

 

History

History
126 lines (107 loc) · 4.74 KB

Kotlin Native v0.3 is out.md

File metadata and controls

126 lines (107 loc) · 4.74 KB
title author date translator translator_url source_url tags categories
Kotlin/Native v0.3 is out
Nikolay Igotti
2017-06-22 13:41:00 -0700
SnakEys
官方动态

Kotlin/Native 0.3发布啦!此次升级包括支持Windows同时作为编译主机与运行平台,同时也增加了对Google Android设备运行native activities的支持。因此在Windows平台编写'Hello World'看起来会像下面一样简单:

{% raw %}

{% endraw %}
import win32.*
fun main(args: Array<String>) {
  MessageBoxW(null, "Привет!","标题", MB_YESNOCANCEL or MB_ICONQUESTION)
}

{% raw %}

{% endraw %}

{% raw %}

{% endraw %}

Android native activies事件处理:

{% raw %}

{% endraw %}
if (AInputQueue_getEvent(queue, event.ptr) < 0) {
  logError("Failure reading input event")
  return
}
if (AInputEvent_getType(event.value) == AINPUT_EVENT_TYPE_MOTION) {
  when (AKeyEvent_getAction(event.value) and AMOTION_EVENT_ACTION_MASK) {
    AMOTION_EVENT_ACTION_DOWN -> {
      animating = false
      currentPoint = getEventPoint(event.value, 0)
      startTime = getEventTime(event.value)
      startPoint = currentPoint
    }
    AMOTION_EVENT_ACTION_UP -> {
      val endPoint = getEventPoint(event.value, 0)
      val endTime = getEventTime(event.value)
      ....
   }
   AMOTION_EVENT_ACTION_MOVE -> {
      val numberOfPointers = AMotionEvent_getPointerCount(event.value).toInt()
      for (i in 0 until numberOfPointers)
         move(getEventPoint(event.value, i))
   }
}
AInputQueue_finishEvent(queue, event.value, 1)

{% raw %}

{% endraw %}

调试

本次发布的版本支持源代码级调试(仅限单步调试)。例如:

{% raw %}

{% endraw %}
$ bin/konanc string0.kt  -g -o string0
$ lldb ./string0.kexe
(lldb) target create "string0.kexe"
Current executable set to 'string0.kexe' (x86_64).
(lldb) b string0.kt:1
Breakpoint 1: where = string0.kexe`kfun:main(kotlin.Array<kotlin.String>) + 4 at string0.kt:1, address = 0x0000000100001344
(lldb) r
Process 12288 launched: '/Users/jetbrains/kotlin/kotlin-native-release/kotlin-native/string0.kexe' (x86_64)
Process 12288 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
    frame #0: 0x0000000100001344 string0.kexe`kfun:main(kotlin.Array<kotlin.String>) at string0.kt:1
-> 1       fun main(args: Array<String>) {
   2           val str = "hello"
   3           println(str.equals("HElLo", true))
   4           val strI18n = "Привет"
   5           println(strI18n.equals("прИВет", true))
   6           println(strI18n.toUpperCase())
   7           println(strI18n.toLowerCase())
(lldb) s
Process 12288 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = step in
    frame #0: 0x0000000100001354 string0.kexe`kfun:main(kotlin.Array<kotlin.String>) at string0.kt:3
   1       fun main(args: Array<String>) {
   2           val str = "hello"
-> 3           println(str.equals("HElLo", true))
   4           val strI18n = "Привет"
   5           println(strI18n.equals("прИВет", true))
   6           println(strI18n.toUpperCase())
   7           println(strI18n.toLowerCase())

{% raw %}

{% endraw %}

依赖库

非常值得一提的是,我们引入了一个新的依赖库格式:.klib,今后也将作为Kotlin/Native库的默认发行版本。本地库和框架可以轻松地使用 .klib 进行互操作,并通过指定 -library library 命令行参数或 library Gradle插件选项与Kotlin/Native编译器一起使用。Interop工具默认自动生成 .klib 格式文件。更多详细信息,请参阅此处

下载

欢迎使用Kotlin错误跟踪器提交错误和问题。