Android —Kotlin 如何在手機App中直接架設起REST Server by Ktor

JLin
5 min readApr 10, 2020

--

如果你想要在手機App中同時也可以架設起一個Restful server怎麼做呢?

Ktor

可以參考由Kotlin提供個一個framwork

可以參考這篇文章,這也是唯一我找到可以教學在Android執行ktor的方法(其實跟windows端架設的方式是一樣的)

像是這樣在你的App中執行就可以了,startActivity的地方

// onCreate
embeddedServer(Netty, 8080) {
install(ContentNegotiation) {
gson {}
}
routing {
get("/") {
call.respond(mapOf("message" to "Hello world"))
}
}
}
.start(wait = true)

而由於他是一個會卡住main Thread的start,所以快速可以先加上一個簡單的Thread

Thread{
embeddedServer(Netty, 8080) {
install(ContentNegotiation) {
gson {}
}
routing {
get("/") {
call.respond(mapOf("message" to "Hello world"))
}
}
}
.start(wait = true)
}.start()

接著在你的手機瀏覽器輸入

http://127.0.0.1:8080

就可以看到結果

而未來就可以改成鎖有程式碼都在App中執行,透過ADB連接電腦去顯示需要顯示的資訊就可以,將會非常方便

如果想要使用responseHtml該怎麼寫?

可以引用官方提供的一個html template

dependencies {     
implementation "io.ktor:ktor-html-builder:$ktor_version"
}

接著你就可以在原本的response改成 responseHtml並且使用HTML DSL方式撰寫

call.respondHtml {
head {
title { +"Async World" }
}
body {
h1(id = "title") {
+"Title"
}
}
}

譬如sample

routing {
get("/") {
call.respond(mapOf("message" to "Hello world"))
}

get("/hello"){
call.respondHtml {
head{
title{ + "" }
}
body{
h1{
+"Android Ktor Demo"
}
p{
+"Hello World"
}
}
}
}
}

這概念可以看我之前另一篇文章

這個概念是在windows上跑ktor,然後透過adb進行回傳,而ktor跑在android

上架構將會更加方便,未來有實作在分享

Done.

--

--

JLin

台中 / JAVA / Android /Kotlin / Kotlin Native 對於Kotlin衍生的JVM等技術 Compose for web / desktop / Ktor Server,生成式AI (Gemini/OpenAI)各式應用, 都有小興趣