1. 程式人生 > >[譯]開發工具的No-op版本

[譯]開發工具的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是非常好的。對所有人都好。