legacy rapid expansion

Legacy Rapid Expansion (旧项目快速扩充)

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "legacy rapid expansion" with this command: npx skills add fwrite0920/android-skills/fwrite0920-android-skills-legacy-rapid-expansion

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 已执行并记录结果

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

crash monitoring

No summary provided by upstream source.

Repository SourceNeeds Review
General

navigation patterns

No summary provided by upstream source.

Repository SourceNeeds Review
General

android skill index

No summary provided by upstream source.

Repository SourceNeeds Review
General

dependency injection mastery

No summary provided by upstream source.

Repository SourceNeeds Review