大量の Android エミュレーターを管理するためのスクリプトに取り組んでおり、それらの一部ですべてのネットワーク トラフィックを無効にする必要があります。このすべてをヘッドレス サーバーで実行しているため、エミュレータのドキュメントに記載されている F8 ホットキーを使用できません。
私は現在、null プロキシを介して TCP トラフィックをルーティングしていますemulator-arm ... -http-proxy 0.0.0.0:0
。これにより、必要なトラフィックがブロックされます。
スクリプトの実行中に奇妙なエラー メッセージが表示されるまで、これはうまく機能していると思いました。コンソールはaccept too many open files
、開いているファイルの出力とチェックを開始し、 lsof
「プロトコルを識別できません」という多数のメッセージが表示されます
...
emulator- 19463 username 19u sock 0,6 0t0 1976595845 can't identify protocol
emulator- 19463 username 20u sock 0,6 0t0 1976595847 can't identify protocol
...
これに対して私が見つけた唯一の「解決策」は、すべてのエミュレーターを強制終了し、この制限に再び達するまで待つことですが、これはほとんど解決策ではありません。
エミュレーターの起動中にこれを行う別の方法はありますか? スイッチを誤って使用し-htt-proxy
てトラフィックをブロックしていませんか?
他の人は、機内モードを使用して手動でこれを行うことでトラフィックをブロックする解決策を見つけましたが、スクリプトを介してエミュレーターを制御しているため、これは実行できません。スクリプトを使用してキーイベントをエミュレーターに送信し、機内モードで電話をオンにすることもできますが、これよりも信頼性の高い方法が望ましいです。
編集: ヌル ルートを介して TCP トラフィックをルーティングしない場合でも、「プロトコルを識別できません」というエラーが発生するようです。そのため、何が起こっているのかわかりません。私の状況を考えると、このヌル ルート メソッドが最善の方法であることを誰でも確認できますか?