Legacy Rapid Expansion
Installation
SKILL.md
Legacy Rapid Expansion (旧项目快速扩充)
Instructions
- 仅在旧项目加入新功能时使用
- 先填写 Required Inputs(隔离边界、桥接契约、回退方案)
- 依照下方章节顺序套用
- 一次只创建一个隔离区与桥接点
- 完成后对照 Quick Checklist
When to Use
- Scenario B:旧项目加新功能
Example Prompts
- "请依照 Islanding Architecture 创建 modern/ 与 bridge/"
- "用 Hybrid Theming 章节让新 Compose UI 沿用旧 Theme"
- "请用 Feature Toggle 章节设计新功能开关"
Workflow
- 先确认 Required Inputs(隔离范围、bridge API、toggle 策略)
- 创建 Islanding Architecture 与 Bridge Pattern
- 处理 Hybrid Theming 与 Wrapper Activities
- 配置 Feature Toggle 与回滚流程
- 执行 Legacy Gate 并用 Quick Checklist 验收
Practical Notes (2026)
- 新功能必须独立于 legacy 内部实作
- Bridge API 需稳定,避免频繁变更造成扩散
- Feature Toggle 作为上线与回退的唯一入口
- 新旧系统边界必须有 owner,避免“共享无人区”
- 迁移期间每个 bridge 调用都应有埋点便于回滚判断
Minimal Template
目标:
隔离范围:
旧系统依赖:
回滚触发条件:
Bridge 契约:
Toggle 策略:
验收: Quick Checklist
Required Inputs (执行前输入)
隔离范围(新功能边界与 legacy 触点)Bridge 契约(输入/输出/错误码)Feature Toggle 策略(开关位置、默认值、回滚)回滚触发条件(指标阈值与负责人)埋点字段(新旧路径识别)
Deliverables (完成后交付物)
modern/与bridge/目录落地Bridge API文档与使用样例Hybrid theme兼容策略Toggle配置与灰度/回滚脚本Legacy Gate验收记录
Legacy Gate (验收门槛)
./gradlew test
./gradlew connectedDebugAndroidTest
需要在 PR 说明中附新旧路径对照与回滚步骤。
Islanding Architecture (孤岛策略)
在旧架构中切出一块「净土」,新功能完全使用现代架构开发。
目录结构
app/
├── legacy/ # 旧代码 (不动)
│ ├── activities/
│ └── fragments/
├── modern/ # 新代码 (净土)
│ ├── core/
│ │ ├── data/
│ │ ├── domain/
│ │ └── ui/
│ └── feature/
│ └── newfeature/
└── bridge/ # 桥接层
├── LegacyNavigator.kt
└── ModernEntryPoint.kt
Bridge Pattern
// bridge/ModernEntryPoint.kt
object ModernEntryPoint {
fun startNewFeatureActivity(context: Context, params: Bundle) {
val intent = Intent(context, NewFeatureActivity::class.java).apply {
putExtras(params)
}
context.startActivity(intent)
}
fun startCheckoutCompose(context: Context, orderId: String) {
startNewFeatureActivity(
context = context,
params = bundleOf("order_id" to orderId, "entry" to "checkout")
)
}
@Composable
fun NewFeatureScreen(params: Map<String, Any>) {
// 现代 Compose UI
}
}
// 旧代码调用
class LegacyActivity : AppCompatActivity() {
fun onButtonClick() {
ModernEntryPoint.startNewFeatureActivity(this, bundleOf("id" to productId))
}
}
Hybrid Theming
让 Compose UI 沿用旧有的 XML Theme。
MDC-Android Compose Theme Adapter
// build.gradle.kts
dependencies {
implementation("com.google.android.material:compose-theme-adapter:<project-verified-version>")
}
// 使用
@Composable
fun NewFeatureScreen() {
MdcTheme { // 自动桥接 XML Theme
Surface {
// Compose UI 会使用 XML 定义的 colors/typography
}
}
}
渐进式迁移
// 1. 初期:完全沿用 XML Theme
MdcTheme { content() }
// 2. 中期:覆写部分 Token
MdcTheme(
setTextColors = true,
setDefaultFontFamily = true
) { content() }
// 3. 后期:完全使用 Compose Theme
AppTheme { content() }
Wrapper Activities
快速将 Compose Screen 包装供旧有 startActivity 调用。
通用 Wrapper
@AndroidEntryPoint
class ComposeWrapperActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val screenType = intent.getStringExtra(EXTRA_SCREEN_TYPE)
val params = intent.extras ?: Bundle.EMPTY
setContent {
AppTheme {
when (screenType) {
"new_feature" -> NewFeatureScreen(params.toMap())
"settings" -> SettingsScreen()
else -> ErrorScreen()
}
}
}
}
companion object {
private const val EXTRA_SCREEN_TYPE = "screen_type"
fun newIntent(context: Context, screenType: String, params: Bundle = Bundle.EMPTY): Intent {
return Intent(context, ComposeWrapperActivity::class.java).apply {
putExtra(EXTRA_SCREEN_TYPE, screenType)
putExtras(params)
}
}
}
}
Feature Toggle
安全地在 Production 环境开关新功能。
interface FeatureFlags {
val useNewCheckout: Boolean
val enableComposeProfile: Boolean
}
class RemoteFeatureFlags @Inject constructor(
private val remoteConfig: FirebaseRemoteConfig
) : FeatureFlags {
override val useNewCheckout: Boolean
get() = remoteConfig.getBoolean("use_new_checkout")
}
// 使用
class CheckoutNavigator @Inject constructor(
private val context: Context,
private val featureFlags: FeatureFlags
) {
fun navigateToCheckout(orderId: String) {
if (featureFlags.useNewCheckout) {
ModernEntryPoint.startCheckoutCompose(context, orderId)
} else {
context.startActivity(Intent(context, LegacyCheckoutActivity::class.java))
}
}
}
Quick Checklist
- Required Inputs 已填写并冻结(边界/契约/回滚)
- 新功能放在
modern/目录 - 桥接层清晰定义 (bridge/)
- Hybrid Theming 确保视觉一致
- Feature Toggle 控制上线
- 避免新代码依赖旧代码的内部实作
- Legacy Gate 已执行并记录结果
Related skills
More from fwrite0920/android-skills
crash monitoring
Crashlytics 设置、ANR 分析与结构化日志
9deep performance tuning
Systrace, Memory Analysis, R8 优化与 App Startup 调校
9android skill index
资深 Android 工程师技能导航中心,根据场景推荐适合的技能组合
7coding style conventions
Kotlin 代码规范、Linter 配置与 Code Review 检核标准
7navigation patterns
Deep Links、跨模块导航与复杂 Back Stack 管理
7devops and security
CI/CD 自动化、Gradle 优化与应用程序安全加固
7