# Hammer **Repository Path**: cdalj/Hammer ## Basic Information - **Project Name**: Hammer - **Description**: Android component-based development framework - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-04-16 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Hammer Android component-based development framework # What is a Chuizi 「锤子」是一个Android组件化快速开发框架 ### 特征 * 组件化开发通用框架, 高度解耦,方便配置 * 提供Base 基类(BaseActivity, BaseFragment, BaseApplication ) * 提供MVP 基类(IModel, IVIew, IPresenter )并提供一键生成锤子模版 * 高度可自定义化 ,可以自由的对 Retoift, Okhttp, RxCache, Gson 等框架的特有属性进行自定义化配置, 可在不修改框架源码的情况下向 BaseApplication, BaseActivity, BaseFragment 的对应生命周期中插入任意代码, 并且框架独有的 ConfigModule 配置类, 可在不修改框架源码的情况下为框架轻松扩展任何新增功能 * 提供了第三方框架(Retoift, Okhttp, RxCache, Gson 等)的默认的配置,通过简单配置即可上手开发 * 封装RxLifeCycle , 可在不继承 RxLifeCycle 提供的 Activity 和 Fragment 的情况下, 正常使用 RxLifeCycle 的所有功能, 且使用方式不变 * 提供全局配置Module , 可用 Dagger2 在任意位置注入自定义参数, 可轻松扩展任意自定义参数 * 全局使用 Dagger2 管理 (将所有模块使用 Dagger2 连接起来) * 提供全局监听整个 App 所有 Activity 以及 Fragment 的生命周期 (包括三方库)配置方法, 并可向其生命周期内插入任意代码 * 提供【AppHttpHandler】实现全局监听 Http Request(请求参数, Headers ...), Response (服务器返回的结果, Headers, 耗时 ...)等信息(包括 Glide 的请求), 可解析 json 后根据状态码做相应的全局操作以及数据加密, Cookie 管理等操作 * 提供RxTransformer转换器简化网络请求生命周期绑定和线程转换操作 * 封装 【AppManager】实现全局管理所有 Activity (包括三方库的 Activity), 可实现在整个 App 任意位置, 退出所有 Activity, 以及拿到前台 Activity 做相应的操作(如您可以在 App 任何位置做弹出 Dialog 的操作) * 封装【DataManager】统一管理网络请求和数据缓存,以及快捷的本地数据存储 * 封装全局 Rxjava 错误处理, 错误后自动重试, 捕捉整个应用的所有错误(手动调用) * 封装图片加载类【 ImageLoader 】使用策略模式和建造者模式, 方便切换图片加载框架和功能扩展 (提供了glide加载策略作为默认方案) * 网络请求日志打印封装(提供解析后的服务器的请求信息和服务器的响应信息, 按可自定义的任意格式输出打印日志) * 组件的缓存机制封装(框架内可缓存内容的组件都提供有接口方便自定义) * 提供锤子工具集(常用工具类,UI,字符,图片,日志,压缩,判断式等) TODO * 添加更多的UI部件和适配器 * 封装leakcanary ### 使用的库 1. 使用MVP架构 2. Dagger2 Google出品的依赖注入框架,通过Apt编译时生成代码,性能优于使用运行时反射技术的依赖注入框架. 3. RxJava 提供优雅的响应式Api解决异步请求以及事件处理. 4. RxAndroid 为Android提供响应式Api. 5. Rxlifecycle 在Android上使用rxjava都知道的一个坑,就是生命周期的解除订阅,这个框架通过绑定activity和fragment的生命周期完美解决. 6. RxCache 是使用注解为Retrofit加入二级缓存(内存,磁盘)的缓存库. 7. RxPermissions 用于处理Android运行时权限的响应式库. 8. Retrofit Okhttp封装库,极大的减少了http请求的代码和步骤. 9. Okhttp 网络请求库 10. GsonGoogle 官方的Json Convert框架. 11. Butterknife view注入框架. 12. AndroidEventBus 一个轻量级使用注解的Eventbus. 13. Timber Log框架容器 14. Glide 图片加载库 15. Hawk 本地轻量储存库,只需一行代码 , 能存任何数据类型 ~~16. Green Dao 数据库~~ #开发准备 ---- ##### 1.导入框架 Add it in your root build.gradle at the end of repositories: allprojects { repositories { ... maven { url 'https://jitpack.io' } } } Step 2. Add the dependency dependencies { compile 'com.github.chendongde310:Hammer:0.0.2' } ##### 2.引用config.gradle 本框架提供一个含有大量第三方库的 **config.gradle** 文件 (里面的所有第三方库并不会全部被引入到项目中, 只是作为变量方便项目中多个位置进行引用, 特别适用于多 Module 的项目), 用于第三方库的版本管理, 将 **config.gradle**复制进根目录, 并在项目的顶级 **build.gradle**中添加如下代码引用它 apply from: "config.gradle" //这里表示引用config.gradle文件 ##### 2.5推荐app下build.gradle配置信息(可选) android { compileSdkVersion rootProject.ext.android["compileSdkVersion"] buildToolsVersion rootProject.ext.android["buildToolsVersion"] useLibrary 'org.apache.http.legacy' defaultConfig { minSdkVersion rootProject.ext.android["minSdkVersion"] targetSdkVersion rootProject.ext.android["targetSdkVersion"] versionCode rootProject.ext.android["versionCode"] versionName rootProject.ext.android["versionName"] } } ##### 3.向app下build.gradle添加依赖(必须,否则报错) dependencies { annotationProcessor rootProject.ext.dependencies["butterknife-compiler"] //Butterknife annotationProcessor rootProject.ext.dependencies["dagger2-compiler"]//依赖插件 } ##### 4.配置AndroidManifest * 添加全局配置ConfigModule(如何配置之后说明) * 指定application ##### 5.混淆(可选) 自带一份锤子使用框架的混淆文件(proguard-rules.pro),如使用混淆,请将混淆配置添加到自己的混淆配置中 # 快速开始 ----- ##### 全局配置 创建AppConfig实现ConfigModule接口 public class AppConfig implements ConfigModule { @Override public void applyOptions(Context context, AppConfigModule.Builder builder) { //全局配置 } @Override public void injectAppLifecycle(Context context, List lifecycles) { //向Application的生命周期中注入一些自定义逻辑 } @Override public void injectActivityLifecycle(Context context, List lifecycles) { //向Activity的生命周期中注入一些自定义逻辑 } @Override public void injectFragmentLifecycle(Context context, List lifecycles) { //向Fragment的生命周期中注入一些自定义逻辑 } }