组件化中需要一个app壳工程,这个壳工程中不处理任何业务,就只是一个空壳,由它将所需要的各个组件模块组合起来,构成一个完整的应用。
接着进入app的AndroidManifest
文件将注册Activity的相关代码也搬到ModuleMain
模块的AndroidManifest
中去,只留下application
标签。
这里注意组件化项目中每个Module都会有自己的AndroidManifest
文件,最后打包时会将这些文件合并成一个文件,所以会出现application
标签中的属性重复问题,要在app的AndroidManifest
文件中添加如下两行代码:
//加在manifest标签里
xmlns:tools="http://schemas.android.com/tools"
//加在application标签里
tools:replace="android:name,android:label,android:icon, android:theme,android:allowBackup"
这里的name
、label
、icon
、theme
、allowBackup
都可能会有重复,所以全部写上之间用逗号隔开。 完整AndroidManifest
如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapplication"
xmlns:tools="http://schemas.android.com/tools">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:replace="android:name,android:label,android:icon, android:theme,android:allowBackup">
application>
manifest>
接着将app目录下的build.gradle内容复制到mainmodule下的build.gradle里面,然后将app下的res资源目录及文件拷贝到mainmodule的res目录下。
需要在project下的自定义的gradle文件里加入一个判断是模块还是应用的boolean值,如本项目在fjs.gradle里添加一个布尔类型的isModule值
ext{
isModule = false //true:作为Lib组件存在, false:作为application存在
android = [
compileSdkVersion :28,
buildToolsVersion :"29.0.0",
minSdkVersion :18,
targetSdkVersion :28,
versionCode :1,
versionName :"1.0"//必须是int或者float,否则影响线上升级
]
version = [
androidSupportSdkVersion:"28.0.0",
constraintLayoutVersion:"1.1.3",
rxJavaVersion:"2.0.1",
junitVersion:"4.12",
runnerVersion:"1.0.2",
espressoCoreVersion:"3.0.2",
]
dependencies = [
"appcompat-v7":"com.android.support:appcompat-v7:${version["androidSupportSdkVersion"]}",
"constraint-layout":"com.android.support.constraint:constraint-layout:${version["constraintLayoutVersion"]}",
"rxjava":"io.reactivex.rxjava2:rxjava:${version["rxJavaVersion"]}",
"junit":"junit:junit:${version["junitVersion"]}",
"runner":"com.android.support.test:runner:${version["runnerVersion"]}",
"espresso-core":"com.android.support.test.espresso:espresso-core:${version["espressoCoreVersion"]}"
]
}
if (rootProject.ext.isModule){
implementation project(":mainmodule")
}
源码:https://github.com/Yedongsheng/Jianshu/tree/develop