跳到主要内容
版本:v6

自定义原生 Android 代码

使用 Capacitor,你可以编写 Java 或 Kotlin 代码来实现应用所需的本机功能。

可能并非所有功能都有现成的 Capacitor 插件——但这没关系!你完全可以直接在应用中编写 WebView 可以访问的原生代码。

WebView 可访问的原生代码

在 JavaScript 和原生代码之间进行通信的最简单方法,是在你的应用中构建一个自定义的 Capacitor 插件。

EchoPlugin.java

首先,创建一个 EchoPlugin.java 文件。你可以通过 打开 Android Studio,展开 app 模块和 java 文件夹,右键点击应用的 Java 包,从上下文菜单中选择 New -> Java Class 来创建文件。

Android Studio 应用包

将以下 Java 代码复制到 EchoPlugin.java 中:

package com.example.myapp;

import com.getcapacitor.JSObject;
import com.getcapacitor.Plugin;
import com.getcapacitor.PluginCall;
import com.getcapacitor.PluginMethod;
import com.getcapacitor.annotation.CapacitorPlugin;

@CapacitorPlugin(name = "Echo")
public class EchoPlugin extends Plugin {

@PluginMethod()
public void echo(PluginCall call) {
String value = call.getString("value");

JSObject ret = new JSObject();
ret.put("value", value);
call.resolve(ret);
}
}

注册插件

我们必须同时在 Android 端和 Web 端注册自定义插件,这样 Capacitor 才能在 Java 和 JavaScript 之间建立桥梁。

MainActivity.java

在应用的 MainActivity.java 中,使用 registerPlugin()registerPlugins() 来注册你的自定义插件。

 public class MainActivity extends BridgeActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
+ registerPlugin(EchoPlugin.class);
super.onCreate(savedInstanceState);
}
}

JavaScript

在 JS 中,我们使用 @capacitor/core 中的 registerPlugin() 来创建一个链接到我们 Java 插件的对象。

import { registerPlugin } from '@capacitor/core';

const Echo = registerPlugin('Echo');

export default Echo;

registerPlugin() 的第一个参数是插件名称,它必须与 EchoPlugin.java@CapacitorPlugin 注解的 name 属性相匹配。

TypeScript

我们可以通过定义一个接口并在 registerPlugin() 调用中使用它,来为链接的对象定义类型。

 import { registerPlugin } from '@capacitor/core';

+export interface EchoPlugin {
+ echo(options: { value: string }): Promise<{ value: string }>;
+}

-const Echo = registerPlugin('Echo');
+const Echo = registerPlugin<EchoPlugin>('Echo');

export default Echo;

registerPlugin() 的泛型参数定义了链接对象的结构。如果需要,你可以使用 registerPlugin<any>('Echo') 来忽略类型。我们不做评判。❤️

使用插件

使用导出的 Echo 对象来调用你的插件方法。以下代码片段将在 Android 上调用 Java 代码并打印结果:

import Echo from '../path/to/echo-plugin';

const { value } = await Echo.echo({ value: 'Hello World!' });
console.log('Response from native:', value);

后续步骤

阅读 Android 插件指南 ›