You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android的Kotlin项目中使用TypeScript库?

在Android Kotlin项目中运行TypeScript/JS库的完整方案

先解决你的核心疑问

.d.ts是TypeScript的类型声明文件,仅用于TS开发时的类型提示,不需要编译,实际运行只需要你手里的index.js(这就是TS编译后的可执行JS文件)。


依赖获取选择

优先从Nexus获取:直接用npm install your-lib --save下载库,找到包目录下的dist文件夹(或直接找入口index.js),复制编译后的JS文件到Android项目即可,比手动下载本地文件更能保证版本完整性。如果本地已经有完整的index.js,直接用本地文件也没问题。


具体实现方案

方案1:WebView加载(最简便,全版本兼容)

适合不需要和Kotlin频繁交互的场景,直接用WebView运行JS代码:

  1. 把index.js放到Android项目的src/main/assets目录(没有assets文件夹就新建)。
  2. 在assets目录新建lib_loader.html,用来引入JS库:
<!DOCTYPE html>
<html>
<head>
    <script src="index.js"></script>
</head>
<body>
</body>
</html>
  1. Kotlin代码中初始化WebView并调用JS方法:
val webView = WebView(context)
val webSettings = webView.settings
webSettings.javaScriptEnabled = true
webSettings.allowFileAccess = true

// 加载本地HTML
webView.loadUrl("file:///android_asset/lib_loader.html")

// 加载完成后调用JS库方法
webView.webViewClient = object : WebViewClient() {
    override fun onPageFinished(view: WebView?, url: String?) {
        super.onPageFinished(view, url)
        // 替换成你的库实际方法,比如yourLib.calculate(10,20)
        webView.evaluateJavascript("window.yourLib.calculate(10,20)") { jsResult ->
            // 处理JS返回的结果,jsResult为字符串格式
            Log.d("JSResult", jsResult)
        }
    }
}

方案2:Android内置JsEngine(Android 12+)

适合轻量场景,不需要WebView,仅支持Android 12(API 31)及以上:

  1. 同样把index.js放到assets目录。
  2. Kotlin代码中读取并执行JS:
// 读取assets中的JS文件内容
val jsContent = context.assets.open("index.js").bufferedReader().use { it.readText() }

// 初始化JsEngine并执行
val jsEngine = JsEngine.create()
try {
    jsEngine.evaluate(jsContent)
    // 调用库方法
    val result = jsEngine.evaluate("yourLib.calculate(30,40)")
    Log.d("JsEngineResult", result.toString())
} finally {
    jsEngine.close()
}

方案3:集成V8引擎(兼容低版本Android)

如果需要兼容Android 12以下版本,使用Google V8引擎:

  1. 在Module级别的build.gradle添加依赖:
dependencies {
    implementation "com.eclipsesource.j2v8:j2v8-android:6.2.0"
}
  1. Kotlin代码中执行JS:
val jsContent = context.assets.open("index.js").bufferedReader().use { it.readText() }
val v8 = V8.createV8Runtime()
try {
    v8.executeScript(jsContent)
    // 调用库方法,根据返回值类型选择对应execute方法
    val result = v8.executeIntegerScript("yourLib.calculate(50,60)")
    Log.d("V8Result", result.toString())
} finally {
    v8.release()
}

内容的提问来源于stack exchange,提问作者Aethia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 13:12:34