Android组件化开发思想与实践( 三 )

if (mineDataProvider != ) { mGetMineData.setText(mineDataProvider.getMineData);} 
四 , 资源冲突组件化项目中有很多个module , 这就难免会出现module中资源命名相同而引起引用错误的情况 。为此我们可以在每个module的build.gradle文件进行如下配置(例如login模块) 。
resourcePrefix "login_"所有的资源必须以指定的字符串(建议module名称)做前缀 , 不然会报错 。不过这种方式只限定与xml文件 , 对图片资源无效 , 图片资源仍需要手动修改 。
//布局文件命名示例login_activity_login.xml<resources> <!--字符串资源命名示例--> <string name="login_app_name">Login</string></resources> 
五 , 单个组件运行调试当项目越来越庞大时 , 编译或运行一次就需要花费很长时间 , 而组件化可以通过配置对每个模块进行单独调试 , 大大提高了开发效率 。我们需要对每个module进行如下配置:
1、在项目根目录新建common_config.gradle文件并声明变量isModuleDebug;
project.ext { //是否允许module单独调试 isModuleDebug = false}2、引入common_config配置 , 另外因为组件化中每个module都是一个library , 如要单独运行调试需要将library换成application,在module的build.gradle中文件中做如下修改:
//引入common_config配置apply from: "${rootProject.rootDir}/common_config.gradle"if (project.ext.isModuleDebug.toBoolean) { apply plugin: 'com.android.application'} else { apply plugin: 'com.android.library'}android { defaultConfig { if (project.ext.isModuleDebug.toBoolean) { // 单独调试时需要添加 applicationId applicationId "com.linda.login" } ... } sourceSets { main { //在需要单独调试的module的src/main目录下新建manifest目录和AndroidManifest文件 // 单独调试与集成调试时使用不同的 AndroidManifest.xml 文件 if (project.ext.isModuleDebug.toBoolean) { manifest.srcFile 'src/main/manifest/AndroidManifest.xml' } else { manifest.srcFile 'src/main/AndroidManifest.xml' } } }}关于两个清单文件的不同之处如下:
<!--单独调试--><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.linda.login"> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/login_app_name" android:supportsRtl="true" android:theme="@style/base_AppTheme"> <activity android:name=".ui.LoginActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application></manifest><!-- 集成调试--><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.linda.login"> <application android:allowBackup="true" android:label="@string/login_app_name" android:supportsRtl="true" android:theme="@style/base_AppTheme"> <activity android:name=".ui.LoginActivity" /> </application></manifest>3、如果module单独调试 , 那么在app就不能再依赖此module , 因为此时app和module都是project,project之间不能相互依赖 , 在app的build.gradle文件中做如下修改
dependencies { if (!project.ext.isModuleDebug) { implementation project(path: ':detail') implementation project(path: ':login') implementation project(path: ':pay') } implementation project(path: ':main') implementation project(path: ':home') implementation project(path: ':mine')


推荐阅读