>_ DevTrendsja

言語

ホーム

言語

セクション

フロントエンド バックエンド モバイル DevOps AI / ML ゲーム開発 ブロックチェーン 組み込み セキュリティ
Java

AndroidでRoot権限なしでhostsファイルをオーバーライドする方法

モバイル開発者またはQAエンジニアであれば、アプリをテスト環境に向けたいと思ったことがあるでしょう。デスクトップなら、2や3のファイルを開くだけですぐに解決します。しかしAndroidでは、システムセキュリティの壁に阻まれてしまいます。Root権限なしでは、システム4のファイルを編集することは不可能です。

もちろん、社内のネットワークにローカルDNSサーバー(5など)を構築し、スマートフォンのWi-Fi設定でそのIPを指定することは可能です。しかし、カフェで作業していたり、移動中だったり、ルーターの設定なんて面倒だという場合はどうでしょうか?

そんなときに役立つのが、Virtual-Hostsリポジトリです。このプロジェクトは、ファームウェアを改変したりsuperuser権限を取得したりすることなく、モバイルデバイス上で直接IPアドレスのリダイレクト問題を解決します。

Root権限なしでDNSをオーバーライドする方法

このユーティリティのアイデアはシンプルです。Androidはシステムファイルの編集を許可していませんが、標準の6 APIを通じてアプリがローカルネットワークインターフェースを作成することは許可しています。

アプリがデバイス上に仮想ネットワークアダプタを構築します。スマートフォンからのすべての送信トラフィックがこのローカルインターフェースを通過し、Virtual Hosts内のカスタムDNSリゾルバがドメイン名へのリクエストを傍受します。

ドメインがテキストルールファイルに存在する場合、アプリが指定されたIPアドレスを即座に返します。リストにない場合は、プロバイダやGoogleの標準DNSサーバーにリクエストが送られます。すべての処理はスマートフォンのメモリ内で完結し、トラフィックが第三者サーバーに流れることはありません。

この仕組みを実現するため、著者はLocalVPNライブラリを基盤として使い、その周りに便利なJavaラッパーを作成しました。

Virtual Hostsが便利な理由

オペレーティングシステムの一般的な7ファイルには大きな制約があります。各エントリを手動で入力する必要があるため、サブドメインが十几个あるだけでリストがすぐに長くなります。

Virtual Hostsはワイルドカードエントリをサポートしています。マイクロサービスアーキテクチャやマルチテナントアプリケーションを扱う際に、大幅な時間節約になります。

長いエントリリストを書く代わりに:

0

1行だけ書けば済みます:

1

ドメイン名の前のドットは、8のすべてのレベルのサブドメインが自動的に指定されたIPアドレスに送信されることを意味します。

アプリの基本機能の中で、特に注目すべき点は以下の通りです:

  • デバイスストレージのプレーンテキストファイルまたは直接リンクからルールを読み込む
  • ワンクリックでオーバーライドを有効/無効にできるクイックトグル
  • 標準的なIPとドメインのマッピング構文をサポート
  • バッテリーとRAMの消費を最小限に抑えている

起動と実践的な使用方法

このアプリはビルド済みバイナリとソースコードの両方で配布されています。APKはF-DroidカタログまたはGoogle Playから直接ダウンロードできます:

Get it on F-Droid

ワークフローは以下の通りです:

  1. スマートフォンに必要なリダイレクトルールを含むテキストファイル9を作成します。
  2. Virtual Hostsを開き、システムダイアログからこのファイル」を選択します。
  3. 大きな電源ボタンをタップします。
  4. AndroidがVPN接続の作成を確認する求めてきます。リクエストを承認します。

その後、デバイス上のブラウザ、curlリクエスト、モバイルアプリすべてが、指定されたドメイン名でテストサーバーにアクセスできるようになります。

実践的な使用例

このプロジェクトは、さまざまな日常的な開発シナリオで役立ちます。

ローカルマシンでAPIをテストする。開発者がノートパソコン(10)でバックエンドを実行していますが、モバイルアプリはドメイン11を使用するようにハードコードされています。異なるURLでAPKを再ビルドする代わりに、Virtual Hostsでリダイレクトを追加するだけで済みます。

レイアウトとフロントエンドの確認。ホットコードリローディング対応のローカルDevServerに、実際のスマートフォンを素早く向けることができます。

テスト環境の分離。複数のブランチを同時にテストする場合、アプリのインターフェースから数秒で設定ファイルを切り替えられます。

制限事項と注意点

すべての利点にもかかわらず、このアプローチには事前に把握しておくべきいくつかの注意点があります。

主な欠点はAndroidのアーキテクチャに起因します。システムでは一度に1つのVPNサービスしかアクティブにできません。仕事のリソースにアクセスするために企業のWireGuardやOpenVPNを有効にしておく必要がある場合、Virtual Hostsを並行して使用することはできません。

2点目はコードに関するものです。このプロジェクトは2017年に作成されたため、Javaコードベースは最新のAndroid開発基準から見ると少し古く見えます。しかし、壊れるようなものではありません:このユーティリティは1つの明確なタスクを実行し、最新のAndroidバージョンでも完璧に動作します。

まとめ

Virtual Hostsは、モバイル開発者またはQAエンジニアのツールキットにとって優れたユーティリティです。カスタムファームウェア、Bootloaderのアンロック、Root権限の取得などでテストデバイスを弄る必要なく、特定の問題を解決します。ドメインをローカルIPに素早くリダイレクトし現場でアプリビルドをテストする必要があるなら、このリポジトリはぜひブックマークしておきましょう。

関連プロジェクト