# module-cf-common **Repository Path**: yangji/module-cf-common ## Basic Information - **Project Name**: module-cf-common - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-11-22 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ##
模块化使用步骤

### 一、模块化创建项目 ##### 第一、创建项目 1. sunpeople-module-user 创建项目目录文件夹 2. module-user 创建项目文件夹 ##### 第二、拷贝文件 * **build.gradle** * **settings** 文件夹 * **settings.gradle** ##### 第四、通过以下任意一种实例化项目 1. 使用名称初始化项目 * **gradle cW** 创建所有项目统一管理gradle版本 * **gradle build** 初始化项目、并自动创建相关文件 2. 使用AndroidStudio 初始化项目 * 直接使用 AndroidStudio 打开项目即可 ------- ##### 第五、目录介绍 ``` sunpeople-module-user -module-user -src -app 独立运行时使用环境(差异包) -java 独立运行时环境-java代码 -res 独立运行时环境-资源文件 -AndroidManifest.xml 独立运行时环境-配置文件 -library 模块化环境使用(差异包) -java 模块化-java代码 -res 模块化-资源文件 -AndroidManifest.xml -模块化配置文件 -main 项目文件 -java 项目文件 java文件 -res 项目文件 资源文件 -AndroidManifest.xml 项目文件配置文件 -build.gradle 项目 Gradle 管理 settings 模块化组件 build.gradle root 项目 Gradle settings.gradle 项目配置 ``` ##### 第六、module-user 介绍 1. **build.gradle** 本文件自动生成 ```groovy ext { //是否是可运行APP;true 可运行;false 模块化库文件 //注意如果是false 当前项目可发布到 maven;如果是 true 发布命令是没有的 isApplication = false //是否创建一个独立 可用的 Application isAddApplication = false //如果项目可运行 独立包名 ext_packageName = 'com.cf.module.user' //当前模块版本号 ext_versionCode = 0010 //当前模块版本名(maven 发布版本) ext_versionName = '0.0.1' } apply from: ext.path.module //引用模块化 def moduleVersion = ext.moduleVersion //其他模块库集合 def versions = ext.versions //第三方资源库集合 //依赖库 dependencies { //如果当前项目可运行 主题 if (isApplication) { //可运行临时主题(主项目独立集成)maven 时不参与打包 implementation moduleVersion.theme } } ``` 初始化网络框架,最后打包放入到 App 结合使用场景使用 ```java HttpManager .getInstance().registerProvider("USER", (HttpManager.ServiceProvider) s -> RetrofitService.RetrofitBeanBuilder.create().moduleName("USER") .baseUrl( // SpCore 依赖 lib-sp-core SpCore.getSystem("HTTP_USER_BASE_URL","http://api.sunpeople.com") ) .client(new OkHttpClient.Builder()) .header(new HeaderProvider() {}) // 配置头 .retrofitFactory(FastJsonConverterFactory.create(), RxJava2CallAdapterFactory.create()) .errorAdapter( new DefaultBodyErrorAdapter( FastJsonEngine.create()) {}) .build() ); ``` ##### 第七、发布到 **maven** 在 gradle -> module-user -> upload -> **uploadArchives** 点击即可 注意版本号 ------- ### 二、模块化目前已有工具 1. **lib-comm**:工具库 2. **lib-http**:网络使用库 3. **lib-mvp**: MVP使用 4. **lib-sp-core**: SP使用 5. **lib-theme**: 模块化临时使用主题 #### lib-comm 1. **BaseApplication** 模块中 app 中的 AndroidManifest.xml 可以使用或者继承使用 2. **BaseConstrainMvpFragment** 支持 Mvp 模式的 Fragment 3. **BaseLinkageMvpFragment** 支持 Mvp 模式的 Fragment 4. **BaseMvpActivity** 支持 Mvp 模式的 Activity 5. **BaseSingleton** 单例工具类 6. **CommApplication** comm 自启动注册器 独立管理无需任何配置(无需实例化,无需Context) 7. **CurrentActivity** - 全局获取可使用最顶层的 Activity;提供给框架层使用;不允许开发者使用 - 置于后台无法获取(无需实例化,无需Context) 8. **VisibilityTracker** 前后台监听器(无需实例化,无需Context) 9. **DisplayUtils** 全局单位转换(无需实例化,无需Context) 10. **ResourcesUtils** 全局资源获取(无需实例化,无需Context) 11. **ThemeUtils** 从 主题中获取数据(需传入当前主题) 12. **WatermarkUtils** 全局管理水印 需要 App 打包配置,全局配置一次 13. **SunToolbar** 应用程序 titleView #### lib-http https://github.com/cityfruit/HttpCore #### lib-mvp 目录结构 ```text mvp -contracts :契约 管理当前任务的 model、presenter、view ... -model :MvpModel 具体业务实现类 ... -presenter :MvpPresenter 业务逻辑层(具体业务实现类) ... -view :MvpView: MvpActivity \ MvpFragment UI层 ... ``` 1、建立契约 MainContract.java ```java public interface MainContract { interface View extends IBaseView { /** * 登录成功 */ void loginSuccess(); /** * 登录失败 */ void loginFailed(); } interface Presenter extends IPresenter { /** * @param name 用户名 * @param pwd 用户秘密 */ void requestLogin(String name, String pwd); /** * model 回来数据(可不使用model) * * @param info model 登录结果 */ void responseLogin(UserInfo info); } // 可以不使用 model interface Model extends IModel { /** * 去执行网络操作 进行登录 * * @param name 用户名 * @param pwd 用户密码 */ void login(String name, String pwd, LifecycleTransformer transformer); } } ``` 2、第二步 使用 Mvp 的 View 实现其中 BaseMvpActivity、BaseConstrainMvpFragment、BaseLinkageMvpFragment ```java // MainPresenter 具体实现;如果没有可以暂时不加注解 @Presenter(MainPresenter.class) public class MainView extends BaseMvpActivity implements MainContract.View { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); getPresenter().requestLogin("admin","123456"); } @Override public void loginSuccess() { System.out.println("登录成功"); } @Override public void loginFailed() { System.out.println("登录失败"); } } ``` 3、实现 MainPresenter ```java /** * @author yangji */ public class MainPresenter extends BasePresenter implements MainContract.Presenter { @Override public void requestLogin(String name, String pwd) { HttpManager.getInstance().create(UserApi.class) .login(name, pwd) //绑定生命周期 当 onDestroy 自动取消下游 .compose(bindEvent()) //绑定生命周期 当 onStop 自动取消下游 .compose(bindEvent(Event.ON_STOP)) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new DefaultObserver>() { @Override public void onNext(BaseInfo userInfoBaseInfo) { getMvpView().loginSuccess(); } @Override public void onError(Throwable e) { getMvpView().loginFailed(); } @Override public void onComplete() { } }); } /** * 配合Mvp Model 使用 */ @Override public void responseLogin(UserInfo info) { } ``` 4、接口 UserApi ```java // @Module 配合网络框架使用 @Module("USER") public interface UserApi { /** * 用户登录 * * @param name 用户名 * @param pwd 用户密码 * @return 用户登录数据 */ @POST("/v1/login") Observable> login(@Part("userName") String name, @Part("userPwd") String pwd); } ``` #### lib-sp-core 使用方法 1. **初始化** SpCore.init(Context).build() 2. **存** SpCore.put("user", userInfo); 3. **取** UserInfo info = SpCore.get("user") 4. **统计数量** SpCore.count() 5. **存在?** SpCore.contains(key) 6. **删除** SpCore.remove(key) 7. **清空** SpCore.clear() #### lib-theme * 提供 每个独立模块 进行独立打包使用,正式打包 maven 不集成到项目中