「錘子」使用♂手冊

weixin_34194087發表於2018-04-13

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的生命週期中注入一些自定義邏輯
    }

}

相關文章