ktor android локальный http-сервер выдает ошибку - PullRequest
2 голосов
/ 21 июня 2020

Что я сделал?

  1. Добавлены зависимости под build.gradle
implementation "io.ktor:ktor:1.3.2"
implementation "io.ktor:ktor-server-netty:1.3.2"
implementation "io.ktor:ktor-gson:1.3.2"
AndroidMenifest.xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.BLUETOOTH" />
MainActivity.kt
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        embeddedServer(Netty, 9000) {
            install(ContentNegotiation) {
                gson {}
            }
            routing {
                get("/") {
                    call.respond(mapOf("message" to "Hello world"))
                }
            }
        }.start(wait = true)
    }
}

Что пошло не так?

После запуска приложения я получаю следующие ошибки: android локальный сервер не запускается.

No implementation found for int io.netty.channel.kqueue.Native.sizeofKEvent() 
(tried Java_io_netty_channel_kqueue_Native_sizeofKEvent 
and Java_io_netty_channel_kqueue_Native_sizeofKEvent__)

No implementation found for int io.netty.channel.epoll.Native.offsetofEpollData() 
(tried Java_io_netty_channel_epoll_Native_offsetofEpollData 
and Java_io_netty_channel_epoll_Native_offsetofEpollData__)

Ответы [ 3 ]

0 голосов
/ 21 июня 2020

Как исправить?

  1. Добавлены зависимости под build.gradle
implementation "io.ktor:ktor:1.3.2"
implementation "io.ktor:ktor-server-jetty:1.3.2"
implementation "io.ktor:ktor-gson:1.3.2"

также

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
defaultConfig {
    ...
    minSdkVersion 26
    ...
}
AndroidMenifest.xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.BLUETOOTH" />
MainActivity.kt
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        embeddedServer(Jetty, 9000) {
            install(ContentNegotiation) {
                gson {}
            }
            routing {
                get("/") {
                    call.respond(mapOf("message" to "Hello world"))
                }
            }
        }.start(wait = false)
    }
}
0 голосов
/ 06 июля 2020

У меня была такая же проблема. Изменить:

start(wait = true)

Кому:

start(wait = false)

И сервер Ktor должен быть запущен и работать на Android.

0 голосов
/ 21 июня 2020

Собственный транспорт Netty не поддерживает Android. Вероятно, вам стоит попробовать другой движок Ktor, например CIO или Jetty.

...