先日Yelpがオープンソースとして公開したVaranusは、アプリが不用意に大量のデータを消費することを防ぐためのAndroidライブラリだ。ネットワークトラフィックを監視すると同時に、必要であれば遮断することも可能である。
Varanusの最初の目標は(こちらのdroidconでの講演のように)、誤ってサイトにDDOS攻撃を加えてしまうような、過度のネットワークトラフィック送信を伴うバグの防止だったのですが、結果として、より汎用的な、ネットワークトラフィックの管理や監視に適したものになりました。
同社エンジニアのsanae Rosen氏とKurt Bonatz氏によると、Varanusは、シンプルで故障しないこと、設定不要で最初から期待される動作をすること、さまざまなアプリに少ない労力で統合可能であること、という3つの目標の下に開発された。
Varanusはネットワーク全体と特定のエンドポイントの両方に対して、ネットワークトラフィックの監視と遮断を行うことができる。VaranusはOkHttpインタセプタのすべてのネットワークトラフィックをインタセプトすることで動作する。下の図に見るように、インタセプタは、Varanusの主要な2つのエンティティであるNetwork Monitor
およびNetwork Shutoff Manager
と通信を行う。これら2つはいずれも、ユーザの提供するログサービス(Traffic Log Persister
とNetwork Shutoff Pertsister
)を使用して、ユーザの望む場所にログを保管する。パフォーマンス上のオーバーヘッドとリソース消費を低減するため、ログは実際にネットワークが使用された場合にのみ生成される。
アプリが過剰なデータを消費しているとリモートサービスが判断した場合には、非標準のエラーコードである555と556を送信して、特定のエンドポイントを通過するデータか、あるいはネットワーク全体の使用を遮断することができる。Varanusをアプリで使用する上でサーバ側に必要な要件は、これらの特殊なエラーコードを送信可能であることのみである。
VaranusはKotlinで記述されており、gradleを使用してインストールすることができる。
// Top level build.gradle
allprojects {
repositories {
mavenCentral()
}
}
// Module level build.gradle
dependencies {
implementation "com.yelp.android:varanus:<version-number>"
}
関連してYelpは、自社のマイグレーションツールであるRusty Jetpackもオープンソースにした。
このツールは、新しいAndroid Xパッケージネームスペースを使うために、gitリポジトリ内の全ファイルをマイグレーションするものです。インポート、完全修飾されたリファレンス、pro-guard(難読化)定義の他、変更の必要なgradleパッケージの警告も行います。
Rusty Jetpackパッケージは、Yelpプロジェクトの場合のように、Android Studioが提供する公式マイグレータが動作しないプロジェクトのマイグレーションに役立つ、とRosen、Bonatz両氏は述べている。