以前は、Eclipse&ADTがAndroid用に開発する公式ツールであった場合、アプリの「project.properties」内で「manifestmerger.enabled = true "プロジェクト、およびライブラリのすべてのマニフェストを自動的にマージしました(そして、それについて投稿しました here )。
これは時々機能しました。それには多くの奇妙な問題があり、私は常にそれを使用するのを避け、必要なものをメインのマニフェストファイルに手動で配置することを常に好みました。
Googleは2014年のどこかで、Gradleと一緒に新しいAndroid-Studio(0.1と思う)を使用すると、ライブラリのコンポーネントのマージ方法を正確に選択できるようになると発表しました。
ただし、新しい指示(リンク here )は非常に複雑であり、実際に(本当に)使用方法を理解しようとしましたが、使用方法のサンプルも見つかりませんでしたそれらを使用します。
何も理解していなかったわけではありませんが、よく理解できたかどうかはわかりません。
明るい面では、マージが完全に自動的に行われることがわかったので、ライブラリのマニフェストに(そしてもちろんクラスとして)BroadcastReceiverがある場合、それを使用するアプリのプロジェクトに追加されます。
すべてを説明するように単純に求めることはできません。これらの質問をするだけで十分だと思います。
自動マージから無視するアプリコンポーネント(アクセス許可、アクティビティなど)を選択するにはどうすればよいですか?
(ライブラリの)アプリコンポーネント(アプリのプロジェクト)のオーバーライドを指定するにはどうすればよいですか?例えば、活動のテーマは?
マニフェストファイルの自動マージを完全に無効にする方法はありますか?
リポジトリ内にある依存関係のマニフェストはどうなりますか?それらもマージされますか?
この新しい(私にとっては新しい)機能に関するチュートリアル/サンプル/ビデオはありますか?
自動合併を使用する際に注意すべきことはありますか?
これらの質問が十分に代表的であり、十分な情報を提供していることを願っています。
アプリのマニフェストでアクセス許可と機能をいつでも明示的に無効にし、ライブラリ値をオーバーライドできます。そして、私は ライブラリから要素を無効化できる であることがわかりました。
例
上記のリンクの次のコードを検討してください。
<activity-alias
Android:name=”foo.bar.alias”>
<meta-data
Android:name=”Zoo”
tools:node=”remove”/>
</activity-alias>
マニフェスト内にこのコードを含めることにより、<activity-alias>
属性を持つAndroid:name="foo.bar.alias"
要素をマージが見つけ、<meta-data>
属性がある場合はAndroid:name="Zoo"
要素を削除するようにします。 「Zoo」メタデータのみを削除します。アクティビティのエイリアスではありません。メインマニフェストでこれを指定すると、これまでにマージされたもの(ライブラリの要素)に対して有効になります。
例#2
アクティビティの例をリクエストしたので、これが私が思いついたものです。
<activity Android:name="com.example.ui.MyActivity" tools:node="remove"/>
この行は、これまでにマージされたAndroid:name="com.example.ui.MyActivity"
属性を持つアクティビティを削除します。したがって、メインマニフェストでこれを指定すると、ライブラリからマージされたcom.example.ui.MyActivity
エントリが効果的に削除されます。
値がマージされる順序は here セクションのマニフェストファイルの順序で説明されています。基本的には次のようになります:ライブラリ、次にメインマニフェスト、次にフレーバーとビルドタイプマニフェストを使用します。 ライブラリの属性をオーバーライドする方法
ビルドタイプとは何ですか?
デフォルトは「デバッグ」と「リリース」です。独自に定義し、signingやproguardなどの設定をオーバーライドできます。あなたの目的のために、それは実行構成と同等であると言うことができます。
これは次のように動作します。デフォルト値と共有値をmain
マニフェスト内に配置します。次に、flavorマニフェストで、必要な値をオーバーライドします。詳細については、Googleの「gradle flavors」。
Android Gradle Build]のマニフェストマージを無効にする
Android.applicationVariants.all { variant ->
variant.processResources.manifestFile = file('src/main/AndroidManifest.xml')
variant.processManifest.enabled=false
}
これをどのファイルに入れますか?
モジュールの(ルートプロジェクトではない)build.gradle
の最後。
はい、それらはライブラリです。
マージをブロックする方法はありますか特定のライブラリマニフェスト
ごめんなさい。
何を達成しようとしているかによって異なります。これまでのところ、それはすぐに使用できました。
私はビデオについて知りません。
追加のアクセス許可などについて疑わしい場合は、生成されたマニフェストを確認できます。project/module/build/intermediates/manifests/full/[flavor]/build-type/AndroidManifest.xml
にあります。
ソース: http://tools.Android.com/tech-docs/new-build-system/user-guide/manifest-merger
このスレッドのリンクの一部は廃止されています。 Android AARsの場合、Gradleによるマニフェストの自動マージに関連して更新される主なものは次のとおりです。