跳转到正文
ygjoon
返回

Android Kotlin 多模块资源与路由管理

编辑文章

模块划分原则

模块类型内容
app壳工程、导航入口、依赖注入
feature独立业务(Home、Profile)
core基础能力(network、database、designsystem)
library通用工具、日志、分析等

资源管理

1. 命名规范

object Dimens {
    val screenPadding = 16.dp
}

val LocalDimens = staticCompositionLocalOf { Dimens }

2. 共享资源

路由通信

接口化导航

interface HomeNavigator {
    fun openDetail(context: Context, id: Long)
}

class HomeNavigatorImpl @Inject constructor() : HomeNavigator {
    override fun openDetail(context: Context, id: Long) {
        val intent = Intent(context, DetailActivity::class.java)
        intent.putExtra("id", id)
        context.startActivity(intent)
    }
}

Compose 导航模块化

interface NavGraphInstaller {
    val route: String
    fun install(builder: NavGraphBuilder, navController: NavController)
}

@Module
@InstallIn(SingletonComponent::class)
abstract class NavigationModule {
    @Binds @IntoSet
    abstract fun bindHomeInstaller(installer: HomeNavInstaller): NavGraphInstaller
}

@Composable
fun AppNavHost(installers: Set<NavGraphInstaller>) {
    val navController = rememberNavController()
    NavHost(navController, startDestination = "home") {
        installers.forEach { it.install(this, navController) }
    }
}

依赖管理

plugins {
    id("com.example.android.feature")
}

dependencies {
    implementation(projects.core.designsystem)
    implementation(projects.core.model)
}

动态特性模块

fun Context.loadFeatureNavigator(): FeatureNavigator? {
    return try {
        Class.forName("com.example.feature.FeatureNavigatorImpl")
            .getDeclaredConstructor()
            .newInstance() as FeatureNavigator
    } catch (e: ClassNotFoundException) {
        null
    }
}

常见问题

问题原因解决方案
资源命名冲突跨模块使用相同资源名引入命名空间前缀,或使用专用资源模块
依赖环模块互相引用拆分基础模块,通过接口转移依赖关系
路由更新困难模块直接构造 Intent使用接口 + DI 管理路由

总结

多模块工程需要统一的资源命名、路由接口与依赖管理策略。通过设计系统模块、导航接口与 Gradle Convention 插件,可以构建更可维护的 Kotlin Android 项目架构,为规模化团队协作提供保障。


编辑文章
分享这篇文章:

上一篇
Android Kotlin 安全加固与数据保护
下一篇
Android Kotlin 协程测试与调试技巧