Android 搭建模块化应用

        第一次开始学习 Kotlin,也是第一次构建多模块项目。其中踩过很多坑,也浪费了不少时间,但是还是有成果的,所以记录下来以便后续查看。

创建 Kotlin Project

首先创建一个新的Project,注意:下方要勾选 Include Kotlin support,然后正常创建即可。 
创建KotlinMall Project

创建BaseLibrary

接着我们在原 Project 中再创建一个新的 Module,勾选 Android Library 作为 BaseLibrary。 
创建BaseLibrary

因为这是一个基础库,所以一些共有的参数我们都会放在这里。 
首先我们就要先把 styles.xml 设定好,也就是 App 的主题文件; 
可以直接把 KotlinMall Project 中的 style 内容复制到 BaseLibrary 中。 

然后我们要把这个新建的库作为 KotlinMall Project 的依赖库。 
通过快捷键 Shift+Ctrl+Alt+S 打开 Project Structure ,选择 app 的 Dependencies ,点击 "+" 后的 Module dependency ,选择 baselibrary 确认即可。 
做依赖库的方法

        当编译完成后,我们就可以注释掉或者直接删除 KotlinMall Project 中的 styles.xml 中的内容,因为 BaseLibrary 已经作为 KotlinMall Project 的依赖库了,所以主项目可以直接取到 BaseLibrary 中的 style 文件并使用该主题。

创建UserCenter

        创建一个 Android Library 作为 UserCenter,再新建包名 ui.activity 并创建一个 RegisterActivity。 然后在 gradle.properties 中写 isUserModule=false ,这句话主要用来判断 UserCenter 是不是作为依赖库,这样就可以通过 false 或者 true 来进行单独调试,或者做为主项目工程的一个模块一起运行。 
        既然可以分开,那么我们在编译和运行的时候肯定要区分对待,不然程序就不知道我们要运行的是哪个了。 
于是我们在 src/main 中新建 2 个目录,分别为 debug 和 release, 用来存放不同版本的 AndroidManifest.xml,那么他们又有何区别呢? 
        目录 
        存放 debug 中的 AndroidManifest.xml,由于是可以单独模块运行,所以配置文件必不可少。 
        UserCenter中release的AndroidManifest.xml,可以单独运行
        而在 release 目录下,只需要注册 Activity 即可,因为它要和 App 一起运行,不需要额外的操作。 
        UserCenter中release的AndroidManifest.xml

        当然区分开来仅仅是不够的,还要用代码进行判断。我们需要打开 UserCenter 的 build.gradle, 对插件进行区分,来判断编译的时候是作为库还是单独的运行程序。

  1. if (isUserModule.toBoolean()) {
  2. apply plugin: 'com.android.library'
  3. }else{
  4. apply plugin: 'com.android.application'
  5. }

        接着在android方法中添加以下方法来选择运行哪个 AndroidManifest.xml。

  1. sourceSets {
  2. main {
  3. if (isUserModule.toBoolean()) {
  4. manifest.srcFile 'src/main/release/AndroidManifest.xml'
  5. } else {
  6. manifest.srcFile 'src/main/debug/AndroidManifest.xml'
  7. }
  8. }
  9. }

测试

        这样,总体的我们已经搭好了,现在只需要验证一下能不能实现就大功告成。 
        我们现在单独运行 UserCenter 模块,应该是可以直接运行的,这说明我们逻辑和代码都是正确的,因为 isUserModule = false 。 
        UserCenter运行时截图 
        让我们看看 在KotlinMall 工程中运行 UserCenter 模块,首先改变 gradle.properties 中的 isUserModule 为 true, 这时在 KotlinMall 的 AndroidManifest.xml 中,注册 UserCenter 模块中的 RegisterActivity 并作为启动页。 
        KotlinMall的AndroidManifest.xml
        运行 App 后发现:在 KotlinMall 中显示了 UserCenter 模块中的 Activity,这说明也是正确的。 
        KotlinCenter运行时截图

总结

        至此,Android 搭建多模块已经完成。我们可以通过 " isUserModule = false / true " 来设定对项目进行单独运行还是一起运行。 
        当 isUserModule = true 时,UserCenter 模块是无法单独运行的了;
        当 isUserModule = false 时,两个模块都能单独运行,但互不相通。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章