「锤子」使用♂手册

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.导入jar包
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
<application
    android:name="com.synews.hammer.base.BaseApplication"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:theme="@style/AppTheme">

    <!-- 全局配置 -->
    <meta-data
        android:name="com.synews.hammer.AppConfig"
        android:value="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<AppLifecycles> lifecycles) {

        //向Application的生命周期中注入一些自定义逻辑
    }

    @Override
    public void injectActivityLifecycle(Context context, List<Application.ActivityLifecycleCallbacks> lifecycles) {
        //向Activity的生命周期中注入一些自定义逻辑
    }

    @Override
    public void injectFragmentLifecycle(Context context, List<FragmentManager.FragmentLifecycleCallbacks> lifecycles) {
      //向Fragment的生命周期中注入一些自定义逻辑
    }

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,809评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,189评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,290评论 0 359
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,399评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,425评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,116评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,710评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,629评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,155评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,261评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,399评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,068评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,758评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,252评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,381评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,747评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,402评论 2 358

推荐阅读更多精彩内容