Android模块化(三)——模块可插拔单独编译运行

转自:

此文属于finddreams的原创博客,转载请注明出处:http://blog.csdn.net/finddreams/article/details/78354209


下面主要来讲一下单一模块的独立编译运行和插拔式的集成。

单一模块的独立编译运行

  模块化的好处之一就是单一模块可以独立的开发编译运行安装到用户的手机上,这样就方便了对某一模块的单独开发调试,单一模块生成的apk体积也小,编译时间也快,开发效率会高很多。

  比如前面的示例项目中我们的可以把用户中心这个模块变成可独立运行的APP,在打包发布的时候,也不需要改动即可变成library模块集成到我们要发布的主APP中去,下图是经过独立运行的用户中心模块的APP和主APP,可以同时的安装在用户手机上进行分别开发调试。 
这里写图片描述

  要想实现这样的目标我们得对用户中心模块进行项目简单的改造,下图是改造之后的项目结构: 
这里写图片描述

   从上图中我们可以看到有两个AndroidManifest.xml,一个在app目录下,一个在module下,主要是做什么用的呢?下面先看一下在用户中心模块module_user中的build.gradle中android {}中的一段配置:

sourceSets {
        main {
            if (!isNeedUserModule.toBoolean()) {
                manifest.srcFile 'src/main/app/AndroidManifest.xml'
            } else {
                manifest.srcFile 'src/main/module/AndroidManifest.xml'
            }
        }

    }

 上面的 isNeedUserModule 变量是来自项目根目录gradle.properties配置文件中的,

isNeedUserModule=true
#isNeedUserModule=false

   isNeedUserModule变量的作用主要用来配置这个用户中心模块是不是需要集成到主的APP中去,如果是true则是集成到主APP,这个模块就会变成library库,如果是false,那么它就可以当成APP安装到用户手机上。这是因为在module_user中的build.gradle文件中加入了这样的代码来控制此库是library还是APP:

if (!isNeedUserModule.toBoolean()) {
    apply plugin: 'com.android.application'
} else {
    apply plugin: 'com.android.library'
}

  isNeedUserModule是true我们就把这个模块变成:’com.android.application’,清单文件 manifest使用app目录下的AndroidManifest :manifest.srcFile ‘src/main/app/AndroidManifest.xml’ ;反之则是:’com.android.library’,清单文件 manifest使用module目录下的AndroidManifest :manifest.srcFile ‘src/main/module/AndroidManifest.xml’。app 和module目录下的AndroidManifest有什么不一样呢? 
  app中的AndroidManifest:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.finddreams.module_user">

    <application>
        <activity
            android:name=".LoginActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

  module目录下的AndroidManifest:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.finddreams.module_user" >
    <application>
        <activity android:name=".LoginActivity"></activity>
    </application>

</manifest>

  做Android的都知道一个APP要安装到用户的手机上,要有一个启动的页面,这个启动页的Activity需要配置intent-filter,所以app项目中的AndroidManifest 要多出这个,而module中则不需要配置:

 <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
   </intent-filter>

另外在主的APP的build文件中需要加入可动态引入用户中心模块的配置:

 if (isNeedUserModule.toBoolean()) {
        compile project(':module_user')
    }

  如此我们只需要在根目录gradle.properties配置文件中的改动一下isNeedUserModule变量的参数即可实现用户模块的可插拔形式集成和独立运行。 
  下一篇将介绍在模块化的过程中遇到的问题和注意事项; 
  文中提到的示例项目地址为:https://github.com/finddreams/AndModulePractice ,参考示例项目加深你对模块化的理解。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值