[譯]開發工具的No-op版本
原文連結:https://medium.com/@orhanobut/no-op-versions-for-dev-tools-b0a865934398
開發工具的No-op版本
“在電腦科學中,NOP或NOOP(無操作的簡稱)是組合語言指令,程式語言語句或計算機協議命令,它什麼都不做。”
wiki
對於每個拉取請求,我們總結了構建資訊以及可能的更改,並用電子郵件傳送到CI伺服器相應的組。
最近我們提交了一個拉取請求,並且有一些有趣的指標。拉取請求增加了apk大小和方法數量。以下資料是報告的一小部分。檢查構建報告以獲取更多詳細資訊
前置資訊
APK資訊(正式版本)
提交的唯一重大變化是引入Facebook Stetho。這是一個很好的除錯工具,我們需要一些具體的原因,但絕對不想增加正式apk中的方法數量和大小。
有幾個選項可以從正式的apk中丟棄它。
Proguard
我們(還)沒有使用它。我想是時候在考慮一次了。
使用無操作版本的庫
有些庫提供了無操作版本,如LeakCanary。有些則沒有(像LeakCanary一樣)。
releasecompile編譯無操作實現,apk不會包含庫中任何冗餘程式碼。
dependencies {
debugCompile '...:leakcanary-android' :1.4-beta2''
releaseCompile '...:leakcanary-android-no-op:1.4-beta2'
}
不提供無操作版本的庫
例如:Stetho沒有這個選項,因此我們必須自己建立它。Stetho有許多可選的配置,因此他們不希望有一個無操作版本。
我們有幾個選項來建立自己的無操作版本。基本上所有的行為都做同樣的事情,唯一的區別是實現。
為庫建立一個模組
建立庫的無操作版本作為模組。在這種情況下,我們只使用Stetho的一種方法,所以讓我們在模組中建立一個no-op方法。
- 建立模組。File -> New -> New Module
- 建立與同包中的工具完全相同的名稱。
- 新增無操作實現
- 在build.gradle指定debugCompile使用工具依賴,releaseCompile使用無操作版本。
- 對於非除錯構建,只允許使用無操作實現。
使用DebugApplication
由於大多數除錯工具都是在應用程式類中初始化的,所以我們可以利用它。
- 建立除錯原始碼集資料夾。src/debug
- 建立DebugApplication類,該類繼承自自定義Application。
- 在DebugApplication中初始化開發工具。
- 在debug原始碼集中建立AndroidManifest.xml。我們利用manifest合併,並使用“tools:replace”替換DebugApplication中的實際應用程式。這將使用“.DebugApplication”替換“android:name”的標記值。
- 在build.gradle中指定針對debugCompile。
- 對非除錯構建,只有無操作實現。
使用DevUtils的變體原始碼集
由於我們使用幾種不同的開發者工具,因此我們更願意把它們放到不同的原始碼集中,而不是為每個工具建立一個類,而是建立一個實用工具類,他講所有邏輯包含在內部,因此我們不必考慮哪個類在那個包裡等待。
- 針對每個構建型別建立原始碼集。src/debug,src/release。
- 建立工具類,例如DevUtils。
- 為每個開發者工具建立適當的腳手架。 即:initStetho,initSomethingElse。
- 在應用中使用DevUtils。DebUtils.initStetho(this)等。
- 在build.gradle中,使用適當的編譯選項,通常是debugCompile,除非有其他具有特定工具的生成型別。
每個解決方案都有優缺點,但總的來說,使用無操作版本來構建apk是非常好的。對所有人都好。