Я хочу создать приложение Android, которое будет запускать локальное HTTP server
. Через этот сервер я хочу загрузить index.html
в WebView
. index.html
не работает сам по себе. Это веб-приложение, которое необходимо инициализировать на локальном хосте. Также он запускает другие. js файлы внутри assets
папки.
Чтобы запустить это раньше, я использовал python HTTP-сервер и запускал его оттуда в браузере.
Я использовал Ktor
для создания простого HTTP-сервера, но показывает только пустую страницу. Я не знаю, правильно ли я придерживаюсь этого решения.
Все мое приложение:
import android.annotation.SuppressLint
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.webkit.WebView
import android.webkit.WebViewClient
import io.ktor.application.install
import io.ktor.features.ContentNegotiation
import io.ktor.gson.gson
import io.ktor.http.content.default
import io.ktor.routing.routing
import io.ktor.server.engine.embeddedServer
import io.ktor.server.netty.Netty
class MainActivity : AppCompatActivity() {
private lateinit var webView: WebView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
webView = findViewById(R.id.web_view)
initHttpServer()
initWebViewContent()
}
private fun initHttpServer(){
embeddedServer(Netty, 8080) {
install(ContentNegotiation) {
gson {}
}
routing {
default("/app/src/main/assets/index.html")
}
}.start(wait = true)
}
@SuppressLint("SetJavaScriptEnabled")
private fun initWebViewContent(){
webView.apply {
loadUrl("http://127.0.0.1:8080")
webViewClient = object : WebViewClient() {
override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
view.loadUrl(url)
return false
}
}
settings.apply {
setSupportZoom(true)
builtInZoomControls = true
displayZoomControls = false
javaScriptEnabled = true
javaScriptCanOpenWindowsAutomatically = true
}
}
}
}
Хорошо, мне не нужен HTTP-сервер - index. html может загружаться как: webView.loadUrl("file:///android_asset/index.html")
index.html
помещается в подпапку /app/src/main/assets/
, которая является папкой ресурсов по умолчанию для проекта Android.