Appearance
源码:labs/android/host/app/src/main/res/values/strings.xml
- 原始路径:
labs/android/host/app/src/main/res/values/strings.xml - 类型:
xml
xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- 应用 -->
<string name="app_name">Android 宿主</string>
<!-- 主页面 -->
<string name="main_title">Android 宿主</string>
<string name="main_subtitle">生命周期 / 后台 / 状态演示实验室已就绪</string>
<string name="main_btn_lifecycle_kotlin_xml">打开 Android Activity 生命周期 (Kotlin + XML)</string>
<string name="main_btn_lifecycle_compose">打开 Android Activity 生命周期 (Compose)</string>
<string name="main_btn_lifecycle_java_xml">打开 Android Activity 生命周期 (Java + XML)</string>
<string name="main_btn_mvi">打开 Compose MVI 参考架构实验室</string>
<string name="main_btn_spi">打开 SPI 与模块化架构实验室</string>
<string name="main_btn_reference_types">打开软/弱引用与 WeakHashMap 实验室</string>
<string name="main_btn_memory_leak">打开 内存泄漏复现与 LeakCanary 实验室</string>
<string name="main_btn_background_tasks">打开 WorkManager / 前台服务实验室</string>
<string name="main_btn_jsbridge">打开 WebView / JSBridge 实验室</string>
<string name="main_btn_alarm">打开 AlarmManager / Doze 实验室</string>
<string name="main_btn_recording_handoff">打开 录音结束到上传交接 实验室</string>
<string name="main_btn_atomic_promotion">打开 资源包原子晋升 实验室</string>
<string name="main_btn_looper">打开 Looper / Handler 消息循环实验室</string>
<string name="main_btn_viewmodel">打开 ViewModel / SavedStateHandle 实验室</string>
<string name="main_btn_state_persistence">打开状态恢复态 / DataStore 实验室</string>
<string name="main_btn_one_shot">打开 one-shot event 实验室</string>
<string name="main_btn_deeplink">打开 Deep Link 返回栈实验室</string>
<!-- 状态恢复态实验室 -->
<string name="state_persistence_title">状态恢复态 / DataStore</string>
<string name="state_persistence_subtitle">把筛选条件、分页游标、草稿正文拆到恢复态 / 内存态 / 持久态</string>
<string name="state_persistence_filter_hint">输入筛选条件(恢复态)</string>
<string name="state_persistence_apply_filter">更新筛选条件</string>
<string name="state_persistence_next_page">分页 +1(内存态)</string>
<string name="state_persistence_capture_scroll">记录滚动锚点</string>
<string name="state_persistence_draft_hint">输入草稿正文(持久态)</string>
<string name="state_persistence_save_draft">写入 DataStore 草稿</string>
<string name="state_persistence_reload">从磁盘回补草稿</string>
<string name="state_persistence_clear">清空全部状态</string>
<string name="state_persistence_memory_placeholder">内存态:等待操作…</string>
<string name="state_persistence_restored_placeholder">恢复态 / 持久态:等待操作…</string>
<string name="state_persistence_memory_state">内存态:pageCursor=%1$d,scrollAnchor=%2$d</string>
<string name="state_persistence_restored_state">恢复态 / 持久态:filter=%1$s,draft=%2$s</string>
<string name="state_persistence_tip_default">先更新筛选、翻页、写草稿,再用旋转 / Don\'t keep activities 验证边界。</string>
<string name="state_persistence_tip_saving">正在把草稿正文写入 DataStore…</string>
<!-- one-shot event 实验室 -->
<string name="one_shot_title">one-shot event 与可恢复 state 分离</string>
<string name="one_shot_subtitle">把 Toast / 导航副作用从 uiState 中拆出来,避免重建后重复消费</string>
<string name="one_shot_submit">模拟提交成功</string>
<string name="one_shot_reset">重置状态</string>
<string name="one_shot_state_placeholder">状态区:等待提交…</string>
<string name="one_shot_event_log_placeholder">事件日志:尚未触发一次性事件</string>
<string name="one_shot_state_value">uiState:isSubmitting=%1$s,submitCount=%2$d,lastResult=%3$s</string>
<string name="one_shot_event_log_value">最近一次 event:%1$s</string>
<!-- Deep Link 返回栈实验室 -->
<string name="deeplink_home_title">Deep Link 返回栈实验室</string>
<string name="deeplink_home_subtitle">从 Home 用 https 深链拉起详情页,再验证系统返回键是否先回 Home</string>
<string name="deeplink_open_detail">用 https Deep Link 打开详情页</string>
<string name="deeplink_detail_title">订单详情(Deep Link 命中页)</string>
<string name="deeplink_detail_placeholder">等待 Deep Link 传入订单 ID…</string>
<string name="deeplink_detail_summary">当前详情 ID:%1$s</string>
<string name="deeplink_detail_hint">按系统返回键:应先回到 Home,再次返回才退出。若直接退出,说明返回栈没补好。</string>
<string name="main_btn_jank">打开卡顿监控实验室</string>
<string name="main_btn_binder">打开 Binder / Messenger 实验室</string>
<string name="main_btn_anr">打开 ANR 触发与诊断实验室</string>
<string name="main_btn_startup">打开启动耗时实验室</string>
<string name="main_btn_sso">打开 H5 SSO Cookie 实验室</string>
<!-- 后台任务实验室 -->
<string name="background_tasks_title">WorkManager / ForegroundService 演示</string>
<string name="background_tasks_subtitle">观察 WorkManager 状态流转与 FGS 常驻通知</string>
<string name="background_tasks_btn_work">提交 WorkManager 任务</string>
<string name="background_tasks_btn_fgs_start">启动 FGS</string>
<string name="background_tasks_btn_fgs_stop">停止 FGS</string>
<string name="background_tasks_log_hint">点击按钮开始观察…</string>
<!-- JSBridge 实验室 -->
<string name="jsbridge_title">WebView / JSBridge 双向通信</string>
<string name="jsbridge_native_log_hint">Native 侧日志…</string>
<!-- AlarmManager / Doze 实验室 -->
<string name="alarm_manager_title">AlarmManager / Doze 演示</string>
<string name="alarm_manager_subtitle">对比 setExact 与 setExactAndAllowWhileIdle 在 Doze 下的触发差异</string>
<string name="alarm_manager_btn_normal">设置 setExact 闹钟 (10s)</string>
<string name="alarm_manager_btn_idle">设置 setExactAndAllowWhileIdle (10s)</string>
<string name="alarm_manager_log_hint">点击按钮开始观察…(进 Doze 前先看正常触发,进 Doze 后再对比)</string>
<!-- Looper / Handler 实验室 -->
<string name="looper_title">Looper / Handler 消息循环</string>
<string name="looper_subtitle">观察 MessageQueue 入队顺序、延迟排序与子线程回传</string>
<string name="looper_btn_messages">发 3 条消息 (sendMessage)</string>
<string name="looper_btn_delayed">延迟消息 (postDelayed 排序)</string>
<string name="looper_btn_worker">HandlerThread 子线程任务</string>
<string name="looper_log_hint">点击按钮开始观察…</string>
<!-- ViewModel / SavedStateHandle 实验室 -->
<string name="vm_title">ViewModel / SavedStateHandle</string>
<string name="vm_subtitle">旋转保留 vs 进程恢复(对比两种状态存活边界)</string>
<string name="vm_btn_increment">计数 +1</string>
<string name="vm_count_value">ViewModel 内存态 count: %1$d(旋转保留,进程被杀归零)</string>
<string name="vm_saved_key_value">SavedStateHandle 恢复态 savedKey: %1$s(进程被杀可恢复)</string>
<string name="vm_tip">验证:① 旋转屏幕看 count 保留;② 开「Don\'t keep activities」切后台再回来看 count 归零、savedKey 恢复</string>
<!-- 卡顿监控实验室 -->
<string name="jank_title">卡顿监控演示</string>
<string name="jank_subtitle">Choreographer FPS 统计 + Looper Printer 主线程卡顿检测</string>
<string name="jank_fps_init">FPS: --</string>
<string name="jank_fps_value">实时 FPS: %1$s(近 1 秒 %2$d ms 内帧数)</string>
<string name="jank_btn_light">轻卡顿 (150ms)</string>
<string name="jank_btn_heavy">重卡顿 (500ms)</string>
<string name="jank_log_hint">点击按钮触发模拟卡顿,观察 FPS 与卡顿告警…</string>
<!-- Binder / Messenger 实验室 -->
<string name="binder_title">Binder / Messenger 跨进程通信</string>
<string name="binder_subtitle">bindService 拿 IBinder,Messenger 双向通信(replyTo 回信)</string>
<string name="binder_btn_bind">绑定服务</string>
<string name="binder_btn_ping">发送 PING</string>
<string name="binder_btn_unbind">解绑服务</string>
<string name="binder_log_hint">点击按钮开始观察…</string>
<!-- ANR 实验室 -->
<string name="anr_title">ANR 触发与诊断</string>
<string name="anr_subtitle">主线程阻塞 6 秒触发 ANR(Input 事件 5 秒未处理)</string>
<string name="anr_btn_trigger">触发 ANR(主线程阻塞 6s)</string>
<string name="anr_log_hint">点击按钮后界面会卡住约 6 秒,随后系统弹 ANR 对话框…</string>
<!-- 启动耗时实验室 -->
<string name="startup_title">启动耗时打点</string>
<string name="startup_subtitle">attachBaseContext / onCreate / 首帧 / reportFullyDrawn 关键点</string>
<string name="startup_log_hint">重新进入本页可再测一次;配合 adb shell am start -W 对照系统口径</string>
<!-- H5 SSO Cookie 实验室 -->
<string name="sso_title">H5 SSO / Cookie 强注入</string>
<string name="sso_btn_inject">注入 Cookie</string>
<string name="sso_btn_refresh">模拟 401 换票</string>
<string name="sso_native_log_hint">Native 侧日志…</string>
<!-- 生命周期实验室 -->
<string name="lifecycle_title_kotlin_xml">Android Activity 生命周期</string>
<string name="lifecycle_title_compose">Android Activity 生命周期 (Compose)</string>
<string name="lifecycle_title_java_xml">Android Activity 生命周期 (Java + XML)</string>
<string name="open_detail_activity">打开详情页面</string>
<string name="lifecycle_logs_placeholder">生命周期日志将显示在这里</string>
<string name="detail_activity_title">详情页面\n按系统返回键返回</string>
<!-- AES-GCM / Frida 实验室 -->
<string name="aes_gcm_frida_title">AES-GCM 加密与 Frida 检测</string>
<string name="aes_gcm_frida_btn_aes">运行 AES-256-GCM 加解密</string>
<string name="aes_gcm_frida_btn_frida">检测 Frida 特征</string>
<string name="aes_gcm_frida_log_hint">点击按钮开始观察…</string>
<string name="main_btn_aes_gcm_frida">打开 AES-GCM 加密与 Frida 检测实验室</string>
<string name="main_btn_ble_gatt">打开 BLE / GATT 最小状态机实验室</string>
<!-- BLE / GATT 实验室 -->
<string name="ble_lab_title">BLE / GATT 最小状态机实验室</string>
<string name="ble_lab_subtitle">不依赖真实外设,用状态机日志复习权限、扫描、连接、服务发现、MTU、Notification 与断线收口</string>
<string name="ble_lab_status_hint">当前阶段:idle</string>
<string name="ble_lab_checkbox_permissions">模拟已授予 Android 12+ 蓝牙权限</string>
<string name="ble_lab_checkbox_status_133">模拟 connectGatt 后触发 status=133</string>
<string name="ble_lab_checkbox_notification_failure">模拟 Notification 订阅失败(未成功写 CCCD)</string>
<string name="ble_lab_btn_start">开始 BLE 链路</string>
<string name="ble_lab_btn_disconnect">模拟断开</string>
<string name="ble_lab_btn_reset">重置状态</string>
<string name="ble_lab_log_title">状态机日志:</string>
<string name="ble_lab_log_hint">点击按钮开始观察…</string>
<!-- Native Crash 实验室 -->
<string name="native_crash_title">Native Crash (Signal / Tombstone)</string>
<string name="native_crash_btn_trigger">触发 Native Crash(进程崩溃,产生 tombstone)</string>
<string name="native_crash_log_hint">点击按钮后进程会因 SIGSEGV 崩溃;用 adb logcat / tombstone 观察</string>
<string name="main_btn_native_crash">打开 Native Crash (SIGSEGV) 实验室</string>
<string name="main_btn_image_loading">打开 图片加载 (Glide/Coil/Fresco/Landscapist) 实验室</string>
<string name="main_btn_bitmap_memory">打开 Bitmap 内存 (Config/采样/复用/大图) 实验室</string>
<string name="main_btn_nested_scroll_coordination">打开 Android 嵌套滚动协同实验室</string>
<string name="main_btn_expandable_text">打开 Android 文本测量与展开更多实验室</string>
<string name="expandable_text_case_mixed_label">样例 1:中英文混排</string>
<string name="expandable_text_case_emoji_label">样例 2:emoji 混排</string>
<string name="expandable_text_case_long_word_label">样例 3:超长单词</string>
<string name="expandable_text_case_link_label">样例 4:正文 link span + 尾部 suffix</string>
<string name="nested_scroll_view_offset_format">offset=%1$dpx, list=%2$dpx</string>
<string name="main_btn_page_result">打开页面返回结果实验室</string>
<string name="main_btn_window_size_class">打开 屏幕适配断点对照 (Compose WindowSizeClass) 实验室</string>
<string name="main_btn_view_xml_adaptive">打开 屏幕适配资源分桶 (View/XML sw600dp) 实验室</string>
<string name="page_result_home_title">页面返回结果样板</string>
<string name="page_result_home_subtitle">子页 setResult / pop(result) 回传一次性结果,父页在 launcher / await 回调里消费,不升级成全局状态。</string>
<string name="page_result_open_detail">打开详情页选择结果</string>
<string name="page_result_no_result">上次返回结果:尚未收到</string>
<string name="page_result_last_result">上次返回结果:%1$s</string>
<string name="page_result_detail_title">详情页(子页)</string>
<string name="page_result_detail_placeholder">当前选择 id:0</string>
<string name="page_result_detail_summary">当前选择 id:%1$d</string>
<string name="page_result_finish_with_result">携带结果返回</string>
<string name="page_result_detail_hint">按返回键离开而不点按钮时,父页结果应保持不变。</string>
<!-- 图片加载实验室 -->
<string name="image_loading_title">图片加载 (Glide / Coil / Fresco / Landscapist)</string>
<string name="image_loading_subtitle">同一 URL 用四种方式加载,对比约束驱动采样与缓存清理</string>
<!-- MVI 参考架构实验室 -->
<string name="mvi_title">Android 生产级 MVI (UDF) 参考架构</string>
<string name="mvi_loading">正在加载用户数据…</string>
<string name="mvi_field_id">ID: %1$s</string>
<string name="mvi_field_name">姓名: %1$s</string>
<string name="mvi_field_role">角色: %1$s</string>
<string name="mvi_error">加载失败: %1$s</string>
<string name="mvi_btn_reload_success">重新加载成功</string>
<string name="mvi_btn_simulate_error">模拟加载失败</string>
<!-- SPI 与模块化实验室 -->
<string name="spi_title">SPI 与模块化架构验证 Lab</string>
<string name="spi_subtitle">不依赖模块具体类,通过 SPI 动态绑定与触发</string>
<string name="spi_btn_broadcast">广播埋点事件 (多扩展发现)</string>
<string name="spi_btn_route">跨界解耦路由 (寻址)</string>
<string name="spi_log_title">调试与运行记录 (Log):</string>
<string name="spi_log_placeholder">等待执行 SPI 调用验证…</string>
<string name="spi_log_found">通过 SPI 发现 %1$d 个 Analytics 实现:</string>
<string name="spi_log_route_success">成功寻址模块 [%1$s] → 目标路由: %2$s</string>
<string name="spi_log_route_fail">寻址失败: 模块未注册</string>
<!-- 引用类型实验室 -->
<string name="ref_title">强/软/弱引用与 WeakHashMap 验证 Lab</string>
<string name="ref_btn_alloc">1. 分配软/弱引用</string>
<string name="ref_btn_gc">2. 触发 GC 并复查</string>
<string name="ref_btn_register">3. WeakHashMap 注册</string>
<string name="ref_btn_verify">4. GC 后验监听表自动收缩</string>
<string name="ref_log_title">验证日志:</string>
<string name="ref_log_placeholder">请点击下面按钮测试引用回收行为…</string>
<string name="ref_log_created_soft">成功创建 SoftReference(%1$s)</string>
<string name="ref_log_created_weak">成功创建 WeakReference(%1$s)</string>
<string name="ref_log_note">注意:此时局部强引用释放,堆中仅存弱/软引用指向对象。</string>
<string name="ref_log_after_gc">触发 System.gc() 后查询状态:</string>
<string name="ref_log_soft_alive">→ 软引用剩余: %1$s</string>
<string name="ref_log_soft_gone">→ 软引用剩余: 已销毁 (内存充足一般存活, 压迫才回收)</string>
<string name="ref_log_weak_alive">→ 弱引用剩余: %1$s</string>
<string name="ref_log_weak_gone">→ 弱引用剩余: 已销毁 (GC 一轮立刻清零!)</string>
<string name="ref_log_inserted">向 WeakHashMap 插入两张 Token:</string>
<string name="ref_log_token_strong">- Token(#101) 保留强引用</string>
<string name="ref_log_token_weak">- Token(#202) 无强引用 (易受 GC 回收)</string>
<string name="ref_log_registry_size">当前 weakRegistry.size = %1$d</string>
<string name="ref_log_gc_done">执行 GC 完毕!</string>
<string name="ref_log_check_size">查验 WeakHashMap 表剩余条目数量: %1$d</string>
<string name="ref_log_only_strong">→ 仅剩强引用持有的 %1$s 留存</string>
<string name="ref_log_auto_removed">→ 无强引用的 Token(#202) 键值对已被 WeakHashMap 自动去除, 防止泄漏!</string>
</resources>