外观
发布前 Checklist
| 检查项 | |
|---|---|
| 必须 | 命名 com.zhinian.plugin.<name>,namespace == applicationId |
| 必须 | aaptOptions --package-id 0x80 |
| 必须 | Manifest:application 无任何属性,只有 HUALUO_PLUGIN_LAUNCHER_CLASS meta-data;无 <activity>、无 <uses-permission> |
| 必须 | 入口 BasePluginActivity + activity.setContent { PluginTheme { App(…) } };UI 退出/跳转由入口传回调(如 onFinish),不写 findActivity |
| 必须 | res 仅两样:values/strings.xml(app_name + plugin_description)+ 图标 mipmap-xxxhdpi/ic_launcher.png(512 透明底、原色、不放大,phosphor/gen_icons.js 生成);无 themes.xml / colors.xml / roundIcon / anydpi |
| 必须 | 颜色/字号/形状全走 token;多行输入 singleLine = false |
| 必须 | 图标 import 用通配符 com.hualuo.compose.ui.icons.phosphor.*,用法必须带接收者 Phosphor.Bold.X / Phosphor.MagnifyingGlass(图标是扩展属性,裸写 MagnifyingGlass 编译不过) |
| 必须 | 列表翻页用自动加载更多(滚到底自动请求下一页),不写「加载更多」按钮;优先官方 Paging 3(paging-compose + prefetchDistance,见 /guide/ui-design/paging);失败要有「加载失败,点击重试」页脚;到底了显示「没有更多了」 |
| 必须 | 搜索入口二选一:页面里画搜索框,或标题栏画图标按钮(TopTitleScaffold(actions = { ActionImageButton(…) }));不用列表项假装搜索框 |
| 必须 | 组件库 TextField / TextArea 必须同时传 placeholder 和 label |
| 必须 | 所有文件 UTF-8 无 BOM |
| 按需 | 持久化走 PluginKv / PluginRecords(库名 = 包名) |
| 按需 | 走中转接口才加 RELAY_TOKEN;域名一律 ZhinianHost.BASE_URL |
| 按需 | 走中转接口:权益展示统一 RelayConfigClient + BenefitCard(obsession-shared),币数与次数不写死 |
| 按需 | 媒体落盘统一 MediaExporter(obsession-shared,字节/位图/GIF/视频/下载入口);14 个插件的本地副本已全部删除 |
| 编译 | 出包一律 gradlew :obsession-plugin-<name>:assembleDebug(重编再加 --rerun-tasks)—— 禁止 assembleRelease:debug 才是受支持的方式,宿主是在运行时加载插件 APK 的,加载链路不看 release / debug、也不校验签名,用 debug 是兼容性需要(YG 2026-10-13 定性);改过 UI组件/插件框架才需要先发布 AAR + 重编宿主 |