3

私はかなり大きなAndroidプロジェクトを持っており、SDKがリソースの解析/デキシングなどを行うのにかなりの時間がかかります。これを何らかの方法で改善したいと思います。

Androidライブラリプロジェクトにもリソースを含めることができることを読みました。そのため、アクティビティやフラグメントなどを含めることもできます。

これは、大きなプロジェクトの一部をメインプロジェクトから参照するライブラリプロジェクトにエクスポートする場合、メインプロジェクトを再構築するときに、すでに構築されている(変更されていない)ライブラリを再構築する必要がないことを意味しますか?したがって、変更されたライブラリと、場合によってはメインプロジェクトに対して、リソースの解析/デキシングなどを実行するだけで済み、ほとんどの場合、全体的なビルド時間が短縮されます。

4

3 に答える 3

2

これは、大きなプロジェクトの一部をメインプロジェクトから参照するライブラリプロジェクトにエクスポートする場合、メインプロジェクトを再構築するときに、すでに構築されている(変更されていない)ライブラリを再構築する必要がないことを意味しますか?

部分的にはありません。Androidライブラリプロジェクトは直接ビルドされません。常に依存するメインプロジェクトと一緒にビルドされます。SDKがメインプロジェクトをコンパイル/ビルドすると、SDKツールはライブラリプロジェクトを一時的なJARファイルにコンパイルし、メインプロジェクトで使用します。メインプロジェクトを再構築するたびに、参照されているライブラリプロジェクトは、ライブラリプロジェクトで何も変更されていなくても、メインプロジェクトのビルドライフサイクルの一部として再構築されます。app-lib / binフォルダーの下に生成された一時JARのタイムスタンプを確認してください。これは、メインプロジェクトをビルドするたびに常に変更されます。

公式開発ガイドからの引用:

ただし、ライブラリプロジェクトは、独自の.apkに直接コンパイルして、Androidデバイスで実行できないという点で、標準のAndroidアプリケーションプロジェクトとは異なります。同様に、実際のライブラリの場合のように、ライブラリプロジェクトを自己完結型のJARファイルにエクスポートすることはできません。代わりに、依存アプリケーションでライブラリを参照し、そのアプリケーションをビルドすることにより、ライブラリを間接的にコンパイルする必要があります。

ライブラリプロジェクトに依存するアプリケーションをビルドする場合、SDKツールはライブラリを一時的なJARファイルにコンパイルし、メインプロジェクトで使用してから、その結果を使用して.apkを生成します。アプリケーションとライブラリの両方でリソースIDが定義されている場合、ツールは、アプリケーションで宣言されたリソースが優先され、ライブラリプロジェクトのリソースがアプリケーション.apkにコンパイルされないようにします。これにより、アプリケーションは、任意のライブラリで定義されているリソースの動作または値を使用または再定義する柔軟性が得られます。

Androidライブラリプロジェクトは、通常のJavaライブラリプロジェクトとは異なります。ここで、すべてをコンパイルしてjarライブラリに一度ビルドし、メインプロジェクトの参照jar依存関係からクラスのインポート/使用を開始できます。現在、Android Library Projectは、このAndroidブログで言及されているように、コンパイル済みコードベースのライブラリメカニズムではなく、ソースベースのメカニズムで設計されていますが、将来のリリースでは自己完結型のjar配布が約束されています(残念ながら、r15、r16、r17、r18のいずれでもありません)。まだ)。

于 2012-04-16T04:10:01.483 に答える
1

はい...クリーンをビルドしない限り、ビルドシステムはビルドする必要があるものを再構築します。

于 2012-04-14T12:05:15.393 に答える
1

ここで大幅な時間の節約は期待できません。

私の経験では、コンパイルの最も遅いステップは実際にdexは出力ファイルのingであり、これは段階的に実行することはできないため、コードをライブラリに移動しても処理速度は向上しません。同様に、インクリメンタルコンパイル(動作する場合-Androidツールチェーンでは動作しないことが多い)は、単一のプロジェクト内の変更されていないファイルと同様に、多数のプロジェクトに分散された変更されていないファイルでも同様に機能します。

もちろん、実際のユースケースの答えを見つける最良の方法は、実際のコードベースで実験することです。また、プロジェクトを独立したモジュールに分割することで、コードの保守性が向上する場合もあります。

于 2012-04-16T04:21:19.600 に答える