Dalvik libcore メソッド (例: libcore/luni/src/main/java/org/apache/harmony/luni/platform/OSFileSystem.java のファイル オープン メソッド) にインターセプト ルーチンを追加しています。これは、基本的な共有ライブラリのみを変更すると思います。 . しかし驚いたことに、変更後にmakeを実行すると、電卓アプリケーション、W3C DOM パーサーなど、ほぼすべてのフレームワークが再構築されます。わずかな変更でフレームワークを構築するには、非常に時間がかかります。dalvik libcore を変更した後、再構築されたコンポーネントの数を減らすことができるかどうか疑問に思っていますか? ありがとう。
1 に答える
実際、core.jar を変更すると多くのものが再構築されることは、それほど驚くべきことではありません。core.jar には、Object、String などのコア Java クラスの多く/すべてが含まれています。したがって、構築される他のすべての jar/apk は、実際には core.jar に依存します。
makefile の観点からは、core.jar で何を変更したか、および core.jar に依存するこれらの他のすべてのものを再構築しないことが安全かどうかについての手がかりがありません。core.jar の最終変更時刻が、それに依存する他のすべての jar/apk よりも新しいことを確認するだけなので、それらをすべて再構築します。
ただし、コツは、make にすべてをビルドするように指示するのではなく、ビルドしたいものを具体的に伝えることです。
以前に完全なビルドを既に行っていると仮定すると、簡単に実行できます
make core snod
core ターゲットは、core.jar に依存するものを再構築することなく、変更を加えて新しい core.jar を構築します。
そして、snod ターゲット (systemimage-nodeps の略) により、out/target/product//system から新しい system.img にすべてが再パッケージ化されます。これは、build/core/Makefile で宣言されている「特別な」ターゲットです。
一般に、特定の jar/apk のターゲットは、単にその jar/apk の名前であり、拡張子はありません。または、そのモジュールの Android.mk ファイルを見て、モジュール名を見つけることができます。これは通常、モジュールの種類に応じてLOCAL_PACKAGE_NAME
またはのようなものです。LOCAL_MODULE
core.jar (少なくともジンジャーブレッド) の場合、モジュール名は libcore/JavaLibrary.mk (実際には libcore/Android.mk に含まれています) にあります。このファイルには多数の異なるモジュールの定義が含まれていますが、最初のモジュールは、LOCAL_MODULE := core
core.jar の構築を担当するものです。残りは主にテスト関連のモジュールのようです。