39

ここで同様の質問を読みましたが、いくつかの点がまだ明確ではありません。ライブラリ プロジェクトを使用すると、プロジェクト全体で 2 つのマニフェスト (ライブラリ用と "メイン" アプリ プロジェクト用) が作成されることになります。

「ライト」バージョンと「有料」バージョンのアプリ ウィジェットを開発しているので、ほぼすべてのコードがライブラリ プロジェクトに含まれます。ウィジェットであるため、ライブラリには少なくともレシーバー、サービス、構成アクティビティ、およびその他のいくつかのアクティビティが含まれます。では、これらのコンポーネントの完全な宣言 (インテント、フィルターなどを含む) はどこで宣言する必要があるのでしょうか? ライブラリのマニフェストに入れますか、それともアプリケーション パッケージ自体のマニフェストに入れ、ライブラリ内のクラスを参照しますか (例: android:name="com.foo.mylibrary.MyService")?

私が見たいくつかの例では、両方のマニフェストでそれらを宣言しているように見えますが、これらをどちらか一方に配置することはノーオペレーションであると思われます。

4

3 に答える 3

43

ライブラリ プロジェクトを使用すると、プロジェクト全体で 2 つのマニフェスト (ライブラリ用と "メイン" アプリ プロジェクト用) が作成されることになります。

ライブラリ プロジェクト マニフェストは現在使用されていません。

Android 用の Gradle、つまり Android Studio は、ライブラリ プロジェクトとマニフェストを発行する AAR をサポートしています。これには、アクティビティの宣言、必要なアクセス許可または機能、サポートされる最小の Android SDK レベルなどが含まれます。

ライブラリ マニフェストをアプリ自体のマニフェストとマージする方法の規則は、特にビルド タイプと製品のフレーバーを考慮すると、少し複雑です。

では、これらのコンポーネントの完全な宣言 (インテント、フィルターなどを含む) はどこで宣言する必要があるのでしょうか?

ホスト プロジェクト内。

ライブラリはこれらのコンポーネントを公開でき、Android Studio ホスト プロジェクトは必要に応じてそれらを削除できます。

ライブラリのマニフェストに入れますか、それともアプリケーション パッケージ自体のマニフェストに入れ、ライブラリ内のクラスを参照しますか (例: android:name="com.foo.mylibrary.MyService")?

後者。

どちらでも (Gradle for Android および Android Studio を使用)。理論的には、ライブラリがコンポーネントを公開する方が簡単なので、アプリの作成者はそうする必要はありません。個人的には、あまり多くの開発者が不必要なマニフェスト エントリを配布することになるため、これはあまり好きではありません。

于 2012-04-16T18:04:35.003 に答える
5

アクティビティ、レシーバー、サービスなど、参照されるすべての Android 要素は、アプリケーション マニフェストに入れる必要があります。そうしないと、OS によって認識されません。ご想像のとおり、ライブラリ マニフェスト ファイルはほとんど空の実装です。

アップデート

上で CommonsWare が指摘しているように、Android ビルド ツールは、ユーザーに代わってさまざまなマニフェストをマージしようとします。元の答えを後世に残す

于 2012-04-16T18:05:16.907 に答える