tech stack migration
3
总安装量
0
周安装量
#61898
全站排名
安装命令
npx skills add https://github.com/fwrite0920/android-skills --skill 'Tech Stack Migration'
Skill 文档
Tech Stack Migration (ææ¯è¿ç§»)
Instructions
- ä» å¨éè¦æ¸è¿å¼è¿ç§»æ¶ä½¿ç¨
- ä¾ç §ä¸æ¹ç« è顺åºå¥ç¨
- 䏿¬¡åªæ¿æ¢ä¸ä¸ªææ¯æ
- 宿åå¯¹ç § Quick Checklist
When to Use
- Scenario Cï¼æ§é¡¹ç®ç°ä»£å
Example Prompts
- “请ä¾ç § View â Compose ç« èï¼å¸®æåµå ¥ ComposeView”
- “ç¨ RxJava â Flow å¯¹ç §è¡¨ï¼æ¹åè¿æ®µ stream”
- “è¯·ç¨ LiveData â StateFlow çæ¥éª¤è§åè¿ç§»”
Workflow
- å 确认è¦è¿ç§»çææ¯æ ä¸èå´
- ä¾åºå¥ç¨å¯¹åºç« èçèä¾ä¸å¯¹ç §è¡¨
- æåç¨ Quick Checklist éªæ¶
Practical Notes (2026)
- è¿ç§»å¿ å æå¯éªè¯çæµè¯å®å ¨ç½
- 䏿¬¡åªè¿ç§»ä¸ä¸ªç»´åº¦ï¼UI æ Data æ DIï¼
- ææ åå½åæè½æ¨è¿ä¸ä¸æ¥
Minimal Template
ç®æ :
è¿ç§»èå´:
æµè¯å®å
¨ç½:
å彿æ :
éªæ¶: Quick Checklist
View â Compose Interoperability
Compose in XML
<!-- layout/activity_main.xml -->
<androidx.compose.ui.platform.ComposeView
android:id="@+id/compose_view"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
findViewById<ComposeView>(R.id.compose_view).setContent {
AppTheme {
NewFeatureCard()
}
}
}
}
XML in Compose
@Composable
fun LegacyMapView(modifier: Modifier = Modifier) {
AndroidView(
modifier = modifier,
factory = { context ->
MapView(context).apply {
onCreate(null)
}
},
update = { mapView ->
mapView.getMapAsync { /* configure */ }
},
onRelease = { mapView ->
mapView.onDestroy()
}
)
}
Fragment in Compose
@Composable
fun LegacyFragmentContainer() {
AndroidViewBinding(LegacyFragmentContainerBinding::inflate) {
val fragment = LegacyFragment()
fragmentContainerView.getFragment<Fragment>() ?: run {
(LocalContext.current as FragmentActivity)
.supportFragmentManager
.beginTransaction()
.replace(fragmentContainerView.id, fragment)
.commit()
}
}
}
RxJava â Coroutines/Flow
Operator Mapping
| RxJava | Coroutines/Flow | 夿³¨ |
|---|---|---|
Observable |
Flow |
Cold stream |
Single |
suspend fun |
åå¼ |
Completable |
suspend fun |
æ åä¼ |
flatMap |
flatMapLatest |
åæ¶åä¸ä¸ª |
flatMap |
flatMapConcat |
ä¾åºè¿è¡ |
switchMap |
flatMapLatest |
çå |
debounce |
debounce |
ç¸å |
combineLatest |
combine |
ç¸å |
zip |
zip |
ç¸å |
observeOn(main) |
flowOn(Dispatchers.Main) |
注æä½ç½®ä¸å |
subscribeOn(io) |
flowOn(Dispatchers.IO) |
å½±å䏿¸¸ |
èä¾ï¼Search with Debounce
// Before (RxJava)
searchEditText.textChanges()
.debounce(300, TimeUnit.MILLISECONDS)
.switchMap { query -> api.search(query) }
.observeOn(AndroidSchedulers.mainThread())
.subscribe { results -> updateUI(results) }
// After (Flow)
searchFlow
.debounce(300)
.flatMapLatest { query -> api.search(query) }
.flowOn(Dispatchers.IO)
.collect { results -> updateUI(results) }
Error Handling å·®å¼
// RxJava: onError ç»æ¢ stream
observable
.onErrorReturn { defaultValue }
.subscribe()
// Flow: catch ä¸ç»æ¢ stream
flow
.catch { emit(defaultValue) }
.collect()
// Flow: éè¯
flow
.retry(3) { e -> e is IOException }
.collect()
LiveData â StateFlow
æ¸è¿å¼æ¿æ¢
// Step 1: ViewModel å
é¨ç¨ StateFlow
private val _uiState = MutableStateFlow(UiState())
val uiState: StateFlow<UiState> = _uiState.asStateFlow()
// Step 2: æ´é² LiveData ç»æ§ UI (è¿æ¸¡æ)
val uiStateLiveData: LiveData<UiState> = uiState.asLiveData()
// Step 3: æ° UI ç´æ¥ collect StateFlow
@Composable
fun Screen(viewModel: MyViewModel) {
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
}
Dagger â Hilt
æ¸è¿å¼è¿ç§»
// 1. ä¿ç Dagger Componentï¼å å
¥ Hilt
@HiltAndroidApp
class MyApp : Application() {
// ä¿çæ§ç Dagger component (è¿æ¸¡æ)
val legacyComponent by lazy { DaggerLegacyComponent.create() }
}
// 2. æ°æ¨¡åç¨ Hilt
@Module
@InstallIn(SingletonComponent::class)
object NewModule { }
// 3. æ¡¥æ¥æ§æ¨¡å
@Module
@InstallIn(SingletonComponent::class)
object LegacyBridgeModule {
@Provides
fun provideLegacyService(): LegacyService {
return (application as MyApp).legacyComponent.legacyService()
}
}
Quick Checklist
- Compose ä¸ View ççå½å¨æå¯¹é½
- AndroidView æ£ç¡®å¤ç onRelease
- Flow operator å¯¹ç § RxJava æ£ç¡®
- StateFlow ä½¿ç¨ collectAsStateWithLifecycle
- Hilt è¿ç§»ç»´æååå ¼å®¹