新闻详情

新闻详情

首页 / 资讯中心 / 详情

AIRI stage-pocket 的 Android 构建指南:Capacitor 环境搭建、开发联调与图标资源再生成

发布时间:2026/9/10 13:06:51来源:尧图网络
AIRI stage-pocket 的 Android 构建指南:Capacitor 环境搭建、开发联调与图标资源再生成
AIRI stage-pocket 的 Android 构建指南Capacitor 环境搭建、开发联调与图标资源再生成【免费下载链接】airi Self hosted, you-owned Grok Companion, a container of souls of waifu, cyber livings to bring them into our worlds, wishing to achieve Neuro-samas altitude. Capable of realtime voice chat, Minecraft, Factorio playing. Web / macOS / Windows supported.项目地址: https://gitcode.com/GitHub_Trending/ai/airi本篇技术指南基于 AIRI 仓库中 stage-pocket 的 Android 文档 展开覆盖 Android 端的环境前置条件SDK/Build-Tools/Java 版本、pnpm dev:android的完整开发联调链路、Capacitor 关键配置项的真实取值以及应用图标与启动屏资源的再生成方法。读完本篇你可以独立完成 AIRI 移动端stage-pocket的 Android 工程初始化、真机/模拟器运行并正确维护多分辨率的 launcher 图标与 splash 资源。一、stage-pocket 的 Android 工程定位stage-pocket 是 AIRI 的移动端应用proj-airi/stage-pocketLLM powered virtual character前端为 Vue 3 Vite 工程原生壳基于 Capacitor 生成。apps/stage-pocket/android/目录就是标准的 Gradle 工程入口清单 AndroidManifest.xml 声明了INTERNET、MODIFY_AUDIO_SETTINGS、RECORD_AUDIO三项权限usesCleartextTraffictrue用于支持开发期的明文开发服务器MainActivity.kt 继承 Capacitor 的BridgeActivity在load()中注册MicrophonePermissionPlugin、WebAuthenticationPlugin两个原生插件并通过AiriHostBridge这个 JavaScript 接口安装了一个基于 OkHttp 的 WebSocket 桥HostWebSocketBridge/OkHttpHostWebSocketSessionFactory用于把宿主的 WebSocket 能力注入 WebView开发模式下MainActivity还会安装一个DebugTlsBypassWebViewClient仅当serverUrl为 https 且证书错误的主机、端口与开发服务器完全一致时才跳过证书校验源码注释明确要求该 bypass 仅限调试且范围限定在配置的 dev server origin。从 capacitor.settings.gradle 可以看到当前工程引入的原生插件及其版本capacitor/android8.3.1、capacitor/app8.1.0、capacitor/barcode-scanner3.0.2、capacitor/local-notifications8.0.2、capacitor-native-settings8.1.0。该文件由capacitor update自动生成头部注释明确写着 DO NOT EDIT THIS FILE。二、环境前置条件官方文档列出的前置条件如下依赖要求Node.js18Android Studio需包含 JDK 与 Android SDKAndroid SDK Platform 36通过 Android Studio → SDK Manager 安装Android SDK Build-Tools通过 Android Studio → SDK Manager 安装设置以下环境变量原文示例为 Windows 路径写法Linux/macOS 请按本机 SDK 实际位置填写如ANDROID_HOME~/Android/SdkANDROID_HOMEC:/Users/you/AppData/Local/Android/Sdk JAVA_HOMEC:/Program Files/Android/Android Studio/jbr文档特别强调Gradle 需要 Java 21。Android Studio 自带的 JBRJetBrains Runtime可直接满足要求。如果没有显式设置JAVA_HOMEGradle 可能回退到系统里较旧的 Java 版本并抛出invalid source release: 21错误。这一要求与仓库中的构建链一致gradle-wrapper.properties 锁定了 Gradle 8.14.3gradle-8.14.3-all.zip而 Gradle 8.14 本身即要求 JDK 21 来运行构建。gradle.properties 中另设置了org.gradle.jvmargs-Xmx1536m与android.useAndroidXtrue。三、SDK 版本与构建参数README 声明 vs 实际构建配置文档在开头声明了 SDK 级别Min SDK: 24Android 7.0Target SDK: 36Android 16而从实际构建配置看variables.gradle.kts 中的取值是val minSdkVersion by extra(26) val compileSdkVersion by extra(36) val targetSdkVersion by extra(36)即compileSdkVersion与targetSdkVersion均为 36与文档的 Target SDK 声明一致minSdkVersion实际配置为 26Android 8.0 及以上。以当前仓库的构建文件为准最低系统支持应按 minSdk 26 理解README 中的 24 可能是历史遗留的旧值。该文件还集中管理了 Android 端的依赖版本例如okhttpVersion 4.12.0对应上文 MainActivity 使用的 OkHttp WebSocket 桥、androidxCoreVersion 1.17.0、coreSplashScreenVersion 1.2.0、junitVersion 4.13.2等便于统一升级。应用自身的版本号独立存放在 app-version.propertiesAIRI_VERSION_NAME0.12.0-beta.2 AIRI_VERSION_CODE18这与仓库根 package.json 中proj-airi/root的version: 0.12.0-beta.2保持一致说明 Android 端版本号由版本发布流程同步维护。四、开发流程从安装依赖到跑上设备首次安装依赖在仓库根目录执行根目录锁定pnpm11.24.0pnpm install的 postinstall 还会顺带构建 workspace 内部包pnpm install在设备 / 模拟器上运行先把工程在 Android Studio 中打开然后用文档给出的两种等价方式指定目标设备pnpm dev:android -- target CAPACITOR_DEVICE_ID # 或者 CAPACITOR_DEVICE_ID_ANDROIDCAPACITOR_DEVICE_ID pnpm dev:android两种写法背后的机制可以在 stage-pocket 的 package.json 和 monorepo 内的cap-vite工具包中印证dev:android脚本实际是cap-vite -- android由 workspace 包 cap-vite 驱动 Vite dev server 与 Capacitor 的联调resolveCapRunArgs的逻辑是如果参数里没有显式--target则读取环境变量CAPACITOR_DEVICE_ID_ANDROID作为目标仍没有时执行cap run android --list --json取第一个可用设备/模拟器两者都拿不到会抛出明确错误提示连接设备、启动模拟器或显式传--target。这与 README 给出的两种用法一一对应从仓库根目录也可以用 package.json 中定义的聚合脚本pnpm dev:pocket:android启动它等价于pnpm -rF proj-airi/stage-pocket run dev:android。开发服务器与产物同步capacitor.config.ts 揭示了联调期的关键行为const serverURL env.CAPACITOR_DEV_SERVER_URL const appId argv.includes(android) ? ai.moeru.airi_pocket : ai.moeru.airi-pocket const config: CapacitorConfig { appId, appName: AIRI, webDir: dist, server: serverURL ? { url: serverURL, cleartext: false } : undefined, android: { buildOptions: { keystorePath: env.CAPACITOR_ANDROID_KEYSTORE_PATH, keystoreAlias: env.CAPACITOR_ANDROID_KEYSTORE_ALIAS, keystorePassword: env.CAPACITOR_ANDROID_KEYSTORE_PASSWORD, keystoreAliasPassword: env.CAPACITOR_ANDROID_KEYSTORE_ALIAS_PASSWORD, releaseType: APK, signingType: apksigner, }, }, }要点appId 按平台区分Android 端为ai.moeru.airi_pocket注意 Android 应用 id 不能包含连字符所以用了下划线。Manifest 中的自定义深链 scheme 是ai.moeru.airi-pockethost 为links见 AndroidManifest.xmlwebDir: distcap sync会把 Vite 构建产物同步到原生工程CAPACITOR_DEV_SERVER_URL设置后WebView 会加载该外部开发服务器地址cleartext: false这正是 MainActivity 中 Debug TLS bypass 生效的场景Release 签名通过四个环境变量keystore 路径、别名、两个密码注入产出releaseType: APK、signingType: apksigner的签名包。五、更新应用图标与启动屏Splash文档说明源素材存放在../resources/即apps/stage-pocket/resources/相对于android/目录。需要说明的是当前仓库快照中未见该目录它属于需要按文档约定在本地准备的设计素材目录文件用途icon-only.png应用图标1024×1024无背景icon-foreground.png自适应图标Adaptive Icon前景层1024×1024splash.png启动屏2732×2732图标背景色为白色#FFFFFF定义在 ic_launcher_background.xmlresources color nameic_launcher_background#FFFFFF/color /resources更新源素材后在apps/stage-pocket/下执行以下命令重新生成全部 Android 尺寸# from apps/stage-pocket/ npx capacitor/assets3.0.5 generate --android \ --iconBackgroundColor #FFFFFF \ --iconBackgroundColorDark #000000 \ --splashBackgroundColor #FFFFFF \ --splashBackgroundColorDark #000000该命令会覆盖app/src/main/res/mipmap-*/与app/src/main/res/drawable-*/下的所有文件。仓库现状与之一致mipmap-ldpi到mipmap-xxxhdpi各密度下各有ic_launcher.png、ic_launcher_round.png、ic_launcher_foreground.pngdrawable-*目录下则按横竖屏 × 密度组合存放多份splash.png例如drawable-port-xxxhdpi/splash.png为 1280×1920、drawable-land-xxxhdpi/splash.png为 1920×1280。必须验证的已知坑点执行完工具后要检查 mipmap-anydpi-v26/ic_launcher.xml 和同目录的ic_launcher_round.xml是否仍然引用color/ic_launcher_background而不是mipmap/ic_launcher_backgroundadaptive-icon xmlns:androidhttp://schemas.android.com/apk/res/android background android:drawablecolor/ic_launcher_background/ foreground android:drawablemipmap/ic_launcher_foreground/ /adaptive-icon工具有时会把背景引用写成错误的mipmap/...形式导致编译期找不到资源此时用git checkout恢复这两个文件即可。六、生成物、Git 忽略项与 Gradle 陷阱文档 Notes 部分列出的三条注意事项都是实际维护 Android 壳工程时的高频坑app/src/main/assets/public/与app/src/main/assets/capacitor.config.json由cap sync生成已被 gitignore——不要手工编辑改动应落在 Vite 工程侧后重新 synclocal.propertiesSDK 路径是机器相关的已被 gitignore——每台开发机首次打开工程时由本机ANDROID_HOME生成不要把org.gradle.java.home加进 gradle.properties——Android Studio 有时会替你在其中写入该配置通常指向某个 IDE 内置 JDK。若被自动添加应删除坚持用环境变量JAVA_HOME控制 Gradle 使用的 Java 21这正是第二节中invalid source release: 21错误的根治方式。另外从 settings.gradle.kts 可见工程结构除:app外还包含:capacitor-cordova-android-plugins并在末尾apply(from capacitor.settings.gradle)挂入 Capacitor 生成的原生模块。七、小结事项关键信息前置Node 18、Android Studio含 JBR 21、SDK Platform 36、Build-Tools设置ANDROID_HOME与JAVA_HOME版本compileSdk/targetSdk 36minSdk 构建配置为 26应用版本 0.12.0-beta.2versionCode 18联调pnpm install后pnpm dev:android -- target ID或CAPACITOR_DEVICE_ID_ANDROIDID pnpm dev:android配置webDir: distCAPACITOR_DEV_SERVER_URL指定 dev serverrelease 签名走CAPACITOR_ANDROID_KEYSTORE_*环境变量APK apksigner资源源素材 1024×1024 图标 / 2732×2732 启动屏npx capacitor/assets3.0.5 generate --android全量再生成注意校验mipmap-anydpi-v26的背景色引用禁忌不编辑capacitor.settings.gradle不提交assets/public/、capacitor.config.json、local.propertiesgradle.properties中不放org.gradle.java.home以上流程均基于当前仓库apps/stage-pocket/android/的实际文件状态整理可对照 README、variables.gradle.kts、capacitor.config.ts 与 MainActivity.kt 继续深入。【免费下载链接】airi Self hosted, you-owned Grok Companion, a container of souls of waifu, cyber livings to bring them into our worlds, wishing to achieve Neuro-samas altitude. Capable of realtime voice chat, Minecraft, Factorio playing. Web / macOS / Windows supported.项目地址: https://gitcode.com/GitHub_Trending/ai/airi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Element Plus ColorPickerPanel 面板组件完全指南:核心实现、API 与实战用法 2026/9/10 13:33:55

Element Plus ColorPickerPanel 面板组件完全指南:核心实现、API 与实战用法

Element Plus ColorPickerPanel 面板组件完全指南:核心实现、API 与实战用法 【免费下载链接】element-plus 🎉 A Vue.js 3 UI Library made by Element team 项目地址: https://gitcode.com/GitHub_Trending/el/element-plus 导读:Col…

阅读更多 →
日志分级设计:从DEBUG到ERROR,验证日志的价值挖掘 2026/9/10 13:33:55

日志分级设计:从DEBUG到ERROR,验证日志的价值挖掘

日志分级设计:从DEBUG到ERROR,验证日志的价值挖掘 一个被日志救了的故事: 「有段时间三个店验证频率莫名翻倍,找不到原因。翻日志才发现——那周我把监控频率调高了,采集请求密集了一倍。降回原频,两天后验…

阅读更多 →
Vibe-Trading 数据接入实战:用 Tushare sge_daily 接口获取上海黄金交易所现货合约日行情 2026/9/10 13:33:55

Vibe-Trading 数据接入实战:用 Tushare sge_daily 接口获取上海黄金交易所现货合约日行情

Vibe-Trading 数据接入实战:用 Tushare sge_daily 接口获取上海黄金交易所现货合约日行情 【免费下载链接】Vibe-Trading "Vibe-Trading: Your Personal Trading Agent" 项目地址: https://gitcode.com/GitHub_Trending/vi/Vibe-Trading 本文以 Vib…

阅读更多 →
Python文档字符串(Docstring)规范与最佳实践 2026/9/10 13:33:55

Python文档字符串(Docstring)规范与最佳实践

1. Python文档字符串(Docstring)的核心价值与常见误区刚接触Python时,我像大多数人一样忽略了文档字符串的重要性——直到接手一个没有注释的遗留项目,花了整整两周才理清函数间的调用关系。Docstring不仅是代码的说明书,更是团队协作的润滑剂…

阅读更多 →
Milvus向量数据库实战:从部署到与大模型集成 2026/9/10 13:33:55

Milvus向量数据库实战:从部署到与大模型集成

1. 项目背景与核心价值最近在折腾大模型应用开发时,发现向量数据库是个绕不开的基础设施。Milvus作为当前最热门的开源向量数据库之一,在RAG(检索增强生成)场景中表现尤为突出。实际部署过程中发现,网上教程要么过于简…

阅读更多 →
OSG Geometry模块详解:3D图形编程核心与实践 2026/9/10 13:30:54

OSG Geometry模块详解:3D图形编程核心与实践

1. 项目概述今天我们来深入探讨OSG(OpenSceneGraph)中的Geometry模块,这是3D图形编程中最基础也最核心的部分。Geometry负责定义和绘制各种几何形状,从简单的三角形到复杂的3D模型都离不开它。在实际项目中,几何体绘制直接决定了场景的视觉效…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞