そこで、DEXとPRE-DEXを行なっているdx.jarの高速版のfastdx.jarを作成した。全体のビルド時間は、私の環境では50%くらい高速化された。
fastdx.jarのダウンロードはこちら
オリジナルのdx.jarが遅い原因は、大きく2つある。
- 無駄に.classから.dexの作成を行なっている(キャッシュしていない)
- 複数のdexのマージの処理に無駄がある
無駄に.classから.dexの作成を行なっている(キャッシュしていない)
オリジナルのdx.jarでは、.jarに含まれていた.classが一つでも変更された場合、.jarに含まれていた全.classファイルを再度.dexにコンバートし直している。
例えば、.jarの中身が以下の3つの.classを含んでいたとする。
a.class b.class c.class
a.classが変更された場合、dx.jarはa.dexのみならず、b.dex, c.dexも再度生成する。このコンバートに結構時間がかかる。
fastdx.jarでは、コンバート済みの.dexをキャッシュすることで、無駄に.dexへのコンバートが発生しないようにした。
複数のdexのマージの処理に無駄がある
複数のdexをマージする際、例えばa.dexからd.dexまでをマージする際、オリジナルのdx.jarは以下のようにdexをひとつずつマージする。
a.dex + b.dex = ab.dex ab.dex + c.dex = abc.dex abc.dex + d.dex = abdc.dexdexファイルをいちいち生成、再読み込み、を行うため、非常に時間がかかる。
fastdx.jarでは、マージを一気に行う。
a.dex + b.dex + c.dex + d.dex = abcd.dex
このため無駄なdexの生成と読み込みが無くなり、高速化されている。
0 件のコメント:
コメントを投稿