mcpField
S
solana-mobile

solana-mobile

github.com/solana-mobile开发812.6k 次安装1 周前更新
代码仓库

关于 solana-mobile

solana-mobile 是用于搭建和维护 Solana Mobile 应用的命令行技能,涵盖项目脚手架、Android 环境检查、设备与模拟器管理、本地验证器连接和钱包测试。

主要功能

  1. 01从模板创建项目
  2. 02检查 Android 和 Node 工具链
  3. 03管理设备与模拟器
  4. 04运行设备可访问的本地验证器
  5. 05测试钱包交互

适用场景

  1. 01从模板创建 Solana Mobile 应用
  2. 02排查 Android 构建故障
  3. 03准备模拟器并测试钱包流程
  4. 04检查设备能否访问本地验证器

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/solana-mobile/solana-mobile-skills --skill solana-mobile

安装后在 Claude Code 中输入/solana-mobile确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
add-to-existing-app.md
cli.md
troubleshooting.md

详细介绍

Solana Mobile 项目

搭建和维护 Solana Mobile 应用。solana-mobile CLI 负责项目脚手架、环境检查和模拟器管理——优先使用它,而不是手动搭建。

无需安装即可运行:

npx solana-mobile@latest --help

pnpm dlx solana-mobile@latest 和 bunx solana-mobile@latest 与之等效。使用项目已有的包管理器,并保留 @latest,以免运行器复用较旧的缓存版本。

命令用途
create搭建新项目
device安装 APK、打开 URL、准备设备
doctor检查工具链
emulator(emu)创建和运行模拟器
localnet设备可访问的本地验证器
playground无需构建应用即可测试钱包
templates维护模板仓库——仅适用于模板作者
webshell将现有 Web 应用封装在 Android WebView 外壳中

所有命令的全部标志:请参阅 references/cli.md。不要猜测标志——CLI 自带帮助,任何命令上的 --help 都是权威说明。

不可妥协的限制

Mobile Wallet Adapter 需要开发构建。Expo Go 无法运行——MWA 依赖 Expo Go 未打包的原生 Android 模块。如果有人反馈在 Expo Go 中钱包连接失败,原因就在于此;没有其他解决方法,必须运行 expo run:android。

只有 Android 支持钱包。iOS 构建可以运行,但不支持 MWA。

首先:确定你属于哪种情况

情况操作
还没有项目创建新项目
已有 Expo 应用,但未集成 Solana阅读 references/add-to-existing-app.md
项目已存在,但构建或工具链出现问题检查环境
项目已存在,需要钱包功能使用 solana-mobile-wallet 技能
需要测试钱包连接或签名无需应用即可测试钱包

创建新项目

npx solana-mobile@latest create

默认采用交互模式。若要跳过提示,请指定项目名称和模板:

npx solana-mobile@latest create my-app --template expo-kit-wallet

实用标志:

标志效果
-t, --template <id>以非交互方式选择模板
--pm <manager>要使用的包管理器
--minimal使用最简模板
--list-templates打印模板目录
--list-template-ids将模板 ID 打印为 JSON 数组
--skip-install不安装依赖
--skip-git不初始化 git 仓库
-d, --dry-run显示将执行的操作,不写入任何内容
选择模板

模板分为两个系列。请选择 expo-kit-* 模板。 @solana/kit 是当前的 Solana 客户端库,而这些模板也是 CLI 最积极维护的模板。

只有在用户有意继续使用现有的 @solana/web3.js 代码库,或明确点名要求时,才选择 expo-web3js-*。如果用户没有说明理由就提出要求,请先说明 kit 是更好的起点,再按其要求操作——使用 web3.js 开始的新应用从一开始就需要迁移。

expo-kit-minimal 最清晰地展示了 kit 各部分如何配合使用,即使使用其他模板构建,也值得阅读。

模板技术栈用途
expo-kit-walletKit + MWA + Uniwind最佳默认选择。 已接入钱包连接、签名和发送功能
expo-kit-minimalKit最基础的起点,不含 UI 工具包
expo-kit-uniwindKit + UniwindTailwind 风格的样式,不含钱包
expo-kit-privyKit + Privy + Uniwind使用 Privy 身份验证代替 MWA,或与 MWA 并用
expo-web3js-walletweb3.js + MWA旧版钱包应用
expo-web3js-paperweb3.js + RN Paper旧版 Material UI
expo-web3js-minimalweb3.js旧版基础起点

也可以使用完整的 gh:solana-mobile/templates/mobile/<name> 形式指定模板 ID。如果模板似乎缺失,请重新运行 --list-templates,不要仅凭此表判断——模板目录随 CLI 一同发布,而不随此技能发布。

脚手架搭建后
cd my-app && npm run android

这会运行 expo run:android,构建并安装开发版。首次 Android 构建较慢(Gradle 冷启动);之后的构建会复用缓存。

检查环境

调试构建失败之前,先检查工具链:

npx solana-mobile@latest doctor

它会检查本地 Android 和 Node 工具链,并针对缺少的内容提供建议。--json 会输出稳定的报告,适合在需要根据特定检查结果进行分支处理时解析;--verbose 会附加解析后的路径和诊断信息。

如果构建失败的原因并非明显出在应用代码中,请先运行 doctor。

管理 Android 模拟器

npx solana-mobile@latest emu list
npx solana-mobile@latest emu status
npx solana-mobile@latest emu create
npx solana-mobile@latest emu start my_phone
npx solana-mobile@latest emu stop my_phone

emu 是 emulator 的别名。子命令包括:create、delete、images、list、start、status、stop、tune。系统映像位于 emu images 下(install、list、delete)。

在指定设备配置文件上创建命名模拟器:

npx solana-mobile@latest emu create local_phone --device pixel_9
准备全新的模拟器

新创建的 AVD 尚未准备好用于钱包工作:它尚未运行,首次启动对话框仍会弹出,也没有钱包应用。先启动并调整配置,再安装钱包——顺序很重要,因为 device install 需要设备已启动才能安装:

npx solana-mobile@latest emu start local_phone --tune
npx solana-mobile@latest device install fakewallet

--tune 会禁用动画、首次启动对话框、锁屏和通知,否则这些内容会遮挡全新 AVD 上的应用。调整配置需显式启用——只有传入 --tune 时,emu start 和 emu create --start 才会应用调整;以这种形式运行时不会交互,因此适合在脚本中使用。emu create 可通过 --start --tune 在创建时完成所有这些操作。

device install fakewallet 会将 Mobile Wallet Adapter 测试钱包安装到正在运行的模拟器上。没有钱包应用,MWA 就无法切换到钱包,连接操作也会悄无声息地无事发生——这是“在模拟器上点击连接毫无反应”最常见的原因。

任何需要 Seeker Genesis Token 才能使用的功能仍需在真实的 Seeker 设备上运行;模拟器无法持有该 Token。请参阅 seeker-genesis-token 技能。

使用已连接的设备

device 涵盖所有通过 adb 进行的操作,既适用于模拟器,也适用于实体手机。

npx solana-mobile@latest device list                       # serials, states, names
npx solana-mobile@latest device install fakewallet         # catalog APK
npx solana-mobile@latest device install ./app-release.apk  # local file
npx solana-mobile@latest device open http://localhost:3000 # opens on the device
npx solana-mobile@latest device tune --all -y              # prepare for automation

device open 会自行为 localhost URL 创建 adb reverse,因此 USB 连接的手机可以访问此计算机上的开发服务器。相比手动编写 adb reverse 和 am start 命令,优先使用它。

device tune 和 emu tune 会应用相同的调整,但有两点不同,其中第二点会影响脚本。device tune 接受实体设备,使用 --device <serial> 或 --all,并在只连接了一台设备时默认使用该设备。emu tune 不接受非模拟器序列号,将 AVD 名称或序列号作为位置参数;如果未提供参数,就会打开选择器——即使当前恰好只运行着一台模拟器也是如此,而且即使使用 -y 也一样:它会跳过调整提示,但不会跳过模拟器选择提示。在任何无人值守的操作中都应指定目标:emu tune local_phone -y。

运行本地验证器

npx solana-mobile@latest localnet start
npx solana-mobile@latest localnet check

localnet start 会在主机上运行验证器,并将其端口转发到每台已连接的设备,这样应用就能访问 localhost:8899,就像验证器运行在设备上一样。它会复用已启动的 localnet 容器,连接到已在这些端口上响应的验证器——包括无需 Docker 的原生验证器;只有两者都不存在时才会启动容器。 check 会验证每台设备是否都能访问验证器——当应用无法连接到明明正在此计算机上运行的验证器时,就应该检查这一点。

localnet forward 会在连接新设备后重新应用端口转发,logs、status 和 stop 则会执行其名称所示的操作。

不使用应用测试钱包

npx solana-mobile@latest playground

提供钱包测试页面,在设备上打开该页面,并将所有 MWA 交互实时输出到终端:连接、登录(SIWS)、签名消息、签名交易、签名并发送。默认使用 devnet;--cluster localnet 会将其指向 localnet 验证器;由于公共端点会拒绝来自浏览器源的请求,使用 mainnet 时需要提供自己的 --url。

用它来区分应用错误和配置错误。 如果该测试页面也无法签名,问题出在钱包或设备,而不是正在调试的代码。设备上必须安装 MWA 钱包——如果没有,可以使用 device install fakewallet。

参考资料

相关技能

  • solana-mobile-wallet — 连接钱包、签名、发送交易
  • solana-mobile-publishing — 签署发布版 APK 并发布到 dApp Store
  • seeker-genesis-token — 验证 Seeker 设备所有权
  • seeker-domains — .skr 域名解析

对于一般的非移动端 Solana 工作——Anchor 或 Pinocchio 程序、Codama 客户端生成、测试、安全审查——请改用 Solana Foundation 的 solana-dev 技能。create 会将其安装到 .agents/skills/solana-dev/,因此脚手架生成的项目已包含该技能。

链接

评论

支持 Markdown