Reference
最后实现的效果
一个模块既可以作为 application 进行单独打包,也可以作为其他模块的 library 进行打包。
从零开始实现功能
下载 JIMU 项目
JIMU 项目下载地址,后面需要用到其中的 module。
新建项目
比如 component_demo。
新建 module
比如 component1。
按照 JIMU 使用指南配置
主项目引用编译脚本
1、修改component_demo\gradle.properties
为:
|
|
2、修改component_demo\build.gradle
为:
|
|
设置组件可独立打包
新建component_demo\app\gradle.properties
和component_demo\component1\gradle.properties
,并写入内容:
|
|
应用组件化编译脚本
1、修改component_demo\app\build.gradle
为:
|
|
2、修改component_demo\component1\build.gradle
为:
|
|
混淆
修改component_demo\app\proguard-rules.pro
和component_demo\component1\proguard-rules.pro
为:
|
|
application 式打包(运行 component1)
报错:Project with path ‘:sharecomponent’ could not be found in project ‘:xx’.
修改component_demo\app\gradle.properties
和component_demo\component1\gradle.properties
为:
|
|
报错:Cannot read packageName from xx\src\main\runalone\AndroidManifest.xml
新建component_demo\component1\src\main\runalone
,在该文件夹中新建AndroidManifest.xml
并写入:
|
|
运行成功
为了便于展示,修改component_demo\component1\src\main\res\layout\activity_main.xml
为:
|
|
library 式打包(运行 app)
【非必须】修改component_demo\component1\src\main\AndroidManifest.xml
为:
|
|
app 集成 component1
修改component_demo\app\gradle.properties
为:
|
|
组件数据交互
新建专用于数据交互的 module
新建component_demo\component_service\src\main\java\io\weichao\component_service\Component1Service.java
用于其他 module 和 component1 的交互:
|
|
component1 引入 component_service
修改component_demo\component1\build.gradle
为:
|
|
component1 实现 Component1Service 接口
新建component_demo\component1\src\main\java\io\weichao\component1\Component1ServiceImpl.java
,并写入内容:
|
|
将 Component1ServiceImpl 注册到 Router 中
1、导入已下载的 JIMU 项目中的 componentlib。
报错:Plugin with id ‘com.github.dcendents.android-maven’ not found.
修改component_demo\componentlib\build.gradle
为:
|
|
2、修改component_demo\component_service\build.gradle
:
|
|
3、新建component_demo\component1\src\main\java\io\weichao\component1\Component1ApplicationLike.java
,并写入内容:
|
|
app 调用 Component1
1、修改component_demo\app\build.gradle
为:
|
|
2、修改component_demo\app\src\main\java\io\weichao\component_demo\MainActivity.java
为:
|
|
报错:Library projects cannot set applicationId. applicationId is set to ‘xx’ in default config.
修改component_demo\component1\build.gradle
为:
|
|
报错:Unable to find source java class: ‘xx’ because it does not belong to any of the source dirs: ‘xx’
clean 项目。
运行成功
UI 跳转
组件添加必要的依赖
修改component_demo\component1\build.gradle
为:
|
|
注册组件到 UIRouter 中
修改component_demo\component1\src\main\java\io\weichao\component1\Component1ApplicationLike.java
为:
|
|
目标页面添加注解
修改component_demo\component1\src\main\java\io\weichao\component1\MainActivity.java
为:
|
|
跳转
1、修改component_demo\app\src\main\res\layout\activity_main.xml
为:
|
|
2、修改component_demo\app\src\main\java\io\weichao\component_demo\MainActivity.java
为:
|
|
报错:android.content.ActivityNotFoundException: Unable to find explicit activity class {xxActivity}; have you declared this activity in your AndroidManifest.xml?
修改component_demo\component1\src\main\AndroidManifest.xml
为:
|
|
报错:java.lang.NoSuchFieldError: No field xx in class Lxx/R$id; or its superclasses (declaration of ‘xx.R$id’ appears in /data/app/xx/base.apk)
重命名component_demo\component1\src\main\res\layout\activity_main.xml
为component_demo\component1\src\main\res\layout\component1_activity_main.xml
。
修改component_demo\component1\src\main\res\layout\component1_activity_main.xml
为:
|
|