スマホHack!

Android 用パッチ ビルド時依存関係

スマホ関連の海外ニュースです。

この記事は、Gradle でビルド時に Android プロジェクトの外部依存関係のパッチを適用する方法を示しています。これは、変換 API と Javassist、Java バイトコード操作ツールを活用します。 免責事項: 私はベテランの Android プログラマではない、塩の粒でこれを取る。 このセクションでは、例にいくつかのコンテキストを追加します。それをスキップすること自由に感じ。 Dashkiosk は、多くのディスプレイでダッシュ ボードを管理するアプリケーションです。これらの格安の Android スティックのいずれかにインストールできます Android アプリケーションを提供しています。テーブルの下は、アプリケーションは、裏打ちされた Android の古いバージョンのも、最新の web エンジンをもたらす横断プロジェクト web ランタイム埋め込み webview です。 最近では、セキュリティの脆弱性が発見されているどのように無効な証明書では処理されました。Webview を使用がメソッドを呼び出して、ホスト アプリケーションに決定を延期する証明書が検証できない場合: デフォルトの動作は横断歩道 webview に固有: Android の組み込みは 1 つだけ負荷をキャンセルします。残念ながら、横断歩道により適用される修正は異なっており、副次的な影響として、メソッドはもうに呼び出されません。 Dashkiosk は、TLS エラーを無視するためのオプションが付属します。上記のセキュリティの修正プログラムは、この機能を中断します。次の例は、以前の動作を復元する横断歩道をパッチする方法を実演します。 このバージョンのクラスからメソッドを置き換えてみましょう: Gradle 変換 API によりコンパイル済みのクラス ファイルの操作、ファイルに変換されます。変換を宣言して登録するには、次のコードが含まれて、: メソッドの変換によって消費されるデータ型のセットを返す必要があります。私たちのケースでは、クラスを変換したいです。別の可能性は、リソースを変換することです。 メソッドは、変換のスコープのセットを返す必要があります。私たちのケースで我々 は外部ライブラリによってのみ興味が。また、独自のクラスを変換することが可能です。 メソッドは、ビルドの増分に賛同したため true を返します。 メソッドは、指定されたすべての入力し、出力のプロバイダーによって提供される場所を (変更の有無にかかわらず) にコピーする予定です。このメソッドをまだ実装していません。これにより、アプリケーションから外部依存関係をすべて削除。 変更されていないすべての外部依存関係を保つためには、我々 はそれらをコピーする必要があります: 我々 はまた、2 つの追加輸入を必要: 外部依存関係を取り扱っています、ために、我々 はのみファイルを管理する必要があります。したがって、我々 はのみの反復処理ではなく。2 つの場合は、インクリメンタル ビルドを処理: ファイルは削除された (❶) をされているまたはそれは修正 (❷) をされています。他のすべてのケースで我々 は安全にファイルは既に正しくコピーを想定できます。 外部の依存関係が横断歩道ファイルと、我々 はまたそれを変更する必要があります。(交換 ❷) コードの最初の部分をここでは: また Javassist を使用する次の追加輸入が必要: を変更しファイルを位置している我々 は、我々 我々 のクラスパスに追加し、(❸) に興味があるクラスを取得します。我々 は、適切なメソッドを探し、削除 (❹)。同じ名前 (❺) を使用してカスタム手法を加えます。全体の操作は、メモリで行われます。❻ に変更されたクラスのバイトコードを取得します。 残りの手順は、ファイルを再構築: 次の追加輸入が必要: 2 つの手順があります。❼、すべてのクラスは、新しいクラス以外にコピーされます。❽、ため変更されたバイトコードに追加します。 それだけです!完全な例は、GitHub 上で表示できます。 上記の例では、新しいメソッドは、任意の外部の依存関係を使用しません。また次のいずれかの同じクラスからメソッドを置換すると仮定しましょう: 前の例との大きな違いは、我々 はいくつかの他のクラスをインポートする必要があることです。 Android SDK のクラスは、外部の依存関係の一部ではないです。彼らは個別にインポートする必要があります。ファイルの完全なパスが: 我々 はクラスに新しいメソッドを追加する前にロードする必要があります: 私たちもインポートする必要があります、したがって、我々 はクラスパスに適切な必要があります。最も簡単な方法は、すべての外部依存関係を反復処理し、クラスパスに追加することです。
続きを読む…

Build-time dependency patching for Android

This post shows how to patch an external dependency for an Android project at build-time with Gradle. This leverages the Transform API and Javassist, a Java bytecode manipulation tool. Disclaimer: I am not a seasoned Android programmer, so take this with a grain of salt. This section adds some context to the example. Feel free to skip it. Dashkiosk is an application to manage dashboards on many displays. It provides an Android application you can install on one of those cheap Android sticks.
Read more…

facebooktwittergoogle_plusredditpinterestlinkedinmail

Comments are closed.