Jorgen's blog Jorgen's blog
首页
  • 平台架构
  • 混合式开发记录
  • 推送服务
  • 数据分析
  • 实时调度
  • 架构思想

    • 分布式
  • 编程框架工具

    • 编程语言
    • 框架
    • 开发工具
  • 数据存储与处理

    • 数据库
    • 大数据
  • 消息、缓存与搜索

    • 消息队列
    • 搜索与日志分析
  • 前端与跨端开发

    • 前端技术
    • Android
  • 系统与运维

    • 操作系统
    • 容器化与 DevOps
  • 物联网与安全

    • 通信协议
    • 安全
    • 云平台
收藏
  • 关于我
  • 终身学习
  • 关于时间的感悟
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

jorgen

Love it, make mistakes, learn, keep grinding.
首页
  • 平台架构
  • 混合式开发记录
  • 推送服务
  • 数据分析
  • 实时调度
  • 架构思想

    • 分布式
  • 编程框架工具

    • 编程语言
    • 框架
    • 开发工具
  • 数据存储与处理

    • 数据库
    • 大数据
  • 消息、缓存与搜索

    • 消息队列
    • 搜索与日志分析
  • 前端与跨端开发

    • 前端技术
    • Android
  • 系统与运维

    • 操作系统
    • 容器化与 DevOps
  • 物联网与安全

    • 通信协议
    • 安全
    • 云平台
收藏
  • 关于我
  • 终身学习
  • 关于时间的感悟
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Capacitor浅析
    • ❓嘛是混合式开发
    • 🚀 混合式开发:传统与现代的完美结合
      • 🏗 背景介绍
    • 🔍 问题 & 方案
      • 💡 最初构思:鱼和熊掌能否兼得?
      • 选型困惑 🤔
      • Capacitor 开发 Android 插件的步骤
      • 1. 创建 Capacitor 插件
      • 2. 编写 Android 端插件逻辑
      • 2.1 继承 `Plugin` 并注册方法
      • 3. 更新 `AndroidManifest.xml`(如需权限)
      • 4. 在前端项目中安装插件
      • 5. 在前端调用插件
      • 6. 运行 Android 项目
    • 🎭 自嘲一下
  • ADB调试
  • mlkit
  • face detection
  • android
Jorgen
2024-03-08
目录

Capacitor浅析

# ❓嘛是混合式开发

你写过App吗?有没有觉得原生开发太累,Web开发又不够“硬核”?混合式开发就跳出来说:“嘿,我来帮你!”它把Web技术和原生功能捏一块儿,一套代码跑iOS和安卓,省时又省力。我用过几次,挺香,今天跟你唠唠这事儿!🥳

# 🚀 混合式开发:传统与现代的完美结合

# 🏗 背景介绍

随着移动互联网的发展,原生开发(Native)和Web开发(H5)各自占据着一席之地。然而,企业在追求高性能体验的同时,也希望兼顾跨平台和开发成本。于是,**混合式开发(Hybrid Development)**应运而生,它结合了原生和Web的优势,成为越来越多企业的选择。


# 🔍 问题 & 方案

# 💡 最初构思:鱼和熊掌能否兼得?

面对多端兼容的需求,传统的做法是分别开发 iOS 和 Android 版本,但这样不仅成本高,还可能导致不同平台的用户体验不一致。

混合式开发的出现让我们眼前一亮,它允许在一个代码库的基础上,同时兼顾 Web 的灵活性和 Native 的高性能。最初,我们决定尝试 React Native 和 Flutter 这两种方案。

# 选型困惑 🤔

  • Flutter:Google 出品,性能优秀,但需要学习 Dart 语言。
  • React Native:Facebook 出品,社区活跃,但对原生模块的支持不够完善。
  • UniApp:DCloud 出品,支持多端开发,但对原生 API 的支持有限。
  • Taro:京东出品,支持多端开发,但对小程序生态更友好。
  • Capacitor:Ionic 团队出品,支持 Web 技术栈,但对原生 API 的支持有限。
  • Ionic:基于 Angular/React/Vue,生态完善,但性能较低。

主流混合式开发方案对比

特性 Flutter React Native UniApp Taro Capacitor Ionic
技术栈 Dart JavaScript (React) JavaScript (Vue) JavaScript (React) JavaScript (TS) JavaScript (Angular/React/Vue)
渲染方式 自绘引擎 Native 组件 WebView + Native WebView + Native WebView + Native WebView + Native
性能 高 接近原生 中等 中等 中等 较低
开发成本 高 中 低 低 低 低
跨平台能力 iOS / Android / Web / 桌面 iOS / Android iOS / Android / H5 / 小程序 iOS / Android / H5 / 小程序 iOS / Android / Web iOS / Android / Web
生态成熟度 高 高 高 中 中 高
社区活跃度 高 高 高 中 中 中
原生 API 支持 强 强 依赖插件 依赖插件 强 依赖插件
适用场景 追求高性能 UI 兼顾性能与开发效率 多端小程序 / H5 微信生态 轻量级应用 快速开发 Web App

最终选型 Capacitor

其核心优势在于:Capacitor 让 Web 技术真正成为原生应用的一部分,而不是简单的 WebView 容器。这意味着它既可以用于 已有的 Web 应用扩展为移动端,又可以作为 移动端开发的轻量级方案,降低成本,提高可维护性,适用于 长期技术选型。

# Capacitor 开发 Android 插件的步骤

Capacitor 允许你使用 Java/Kotlin 编写 Android 插件,以扩展原生功能。以下是完整的开发流程:


# 1. 创建 Capacitor 插件

运行以下命令,在你的 Capacitor 项目中创建一个新的插件:

npx @capacitor/cli plugin:generate
1
  • 根据提示输入:
    • 插件名称(如 CameraPlugin)
    • 插件 ID(如 com.camera.plugin)
    • 插件类名(如 CameraPlugin)

此命令会生成一个插件目录,包含 android/、ios/ 和 src/ 文件夹。


# 2. 编写 Android 端插件逻辑

打开 android/src/main/java/com/camera/plugin/CameraPlugin.java,修改 CameraPlugin 代码:

# 2.1 继承 Plugin 并注册方法

package com.camera.plugin;

import android.util.Log;
import com.getcapacitor.Plugin;
import com.getcapacitor.PluginMethod;
import com.getcapacitor.JSObject;
import com.getcapacitor.annotation.CapacitorPlugin;

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

    @PluginMethod
    public void start(JSObject call) {
        String value = call.getString("value");
        Log.d("CameraPlugin", "Received: " + value);
        JSObject ret = new JSObject();
        ret.put("value", value);
        call.resolve(ret);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  • @CapacitorPlugin(name = "CameraPlugin") 让 Capacitor 识别该插件。
  • @PluginMethod 标记为可在前端调用的方法。

# 3. 更新 AndroidManifest.xml(如需权限)

如果插件需要访问摄像头、定位等功能,在 android/src/main/AndroidManifest.xml 中添加权限:

<uses-permission android:name="android.permission.CAMERA" />
1

# 4. 在前端项目中安装插件

运行以下命令将插件链接到 Capacitor:

npm install path-to-your-plugin
npx cap sync android
1
2

# 5. 在前端调用插件

在前端(如 Vue/React/Angular),使用 Capacitor 调用你的插件:

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

const { CameraPlugin } = Plugins;

async function testPlugin() {
    const response = await CameraPlugin.start({ value: "Hello, Capacitor!" });
    console.log(response.value);
}
testPlugin();
1
2
3
4
5
6
7
8
9

# 6. 运行 Android 项目

进入 android/ 目录,使用 Android Studio 打开项目:

npx cap open android
1

在模拟器或真机上运行并测试你的插件。这里更推荐使用真机来运行。Android设备上记得打开开发者模式。

这里只是简单的演示,实际开发中,你可能需要处理权限请求、异步任务、UI 线程等问题。详细的开发文档请参考 Capacitor 官方文档。 (opens new window)


# 🎭 自嘲一下

开发前:混合式开发一统江湖!
开发中:怎么又崩了?这个 Native 模块怎么调?🤯
开发后:终于跑通了!看起来真香啊!🔥

混合式开发,没有银弹,只有权衡。但只要方向对,坑踩多了,总会越来越顺! 😆


📌 "最困难之时,就是我们离成功不远之日。" —— 拿破仑

#混合式开发#Capacitor
上次更新: 2025/03/09, 15:45:50
ADB调试

ADB调试→

最近更新
01
STM32入门
03-09
02
ADB调试
03-09
03
微信小程序学习记录
02-09
更多文章>
Theme by Vdoing | Copyright © 2019-2025 Jorgen | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式