web-dev-qa-db-ja.com

(Android Studio and Gradle)の新しいマニフェストマージの使用方法は?

バックグラウンド

以前は、Eclipse&ADTがAndroid用に開発する公式ツールであった場合、アプリの「project.properties」内で「manifestmerger.enabled = true "プロジェクト、およびライブラリのすべてのマニフェストを自動的にマージしました(そして、それについて投稿しました here )。

これは時々機能しました。それには多くの奇妙な問題があり、私は常にそれを使用するのを避け、必要なものをメインのマニフェストファイルに手動で配置することを常に好みました。

問題

Googleは2014年のどこかで、Gradleと一緒に新しいAndroid-Studio(0.1と思う)を使用すると、ライブラリのコンポーネントのマージ方法を正確に選択できるようになると発表しました。

ただし、新しい指示(リンク here )は非常に複雑であり、実際に(本当に)使用方法を理解しようとしましたが、使用方法のサンプルも見つかりませんでしたそれらを使用します。

何も理解していなかったわけではありませんが、よく理解できたかどうかはわかりません。

私が見つけたもの

明るい面では、マージが完全に自動的に行われることがわかったので、ライブラリのマニフェストに(そしてもちろんクラスとして)BroadcastReceiverがある場合、それを使用するアプリのプロジェクトに追加されます。

質問

すべてを説明するように単純に求めることはできません。これらの質問をするだけで十分だと思います。

  1. 自動マージから無視するアプリコンポーネント(アクセス許可、アクティビティなど)を選択するにはどうすればよいですか?

  2. (ライブラリの)アプリコンポーネント(アプリのプロジェクト)のオーバーライドを指定するにはどうすればよいですか?例えば、活動のテーマは?

  3. マニフェストファイルの自動マージを完全に無効にする方法はありますか?

  4. リポジトリ内にある依存関係のマニフェストはどうなりますか?それらもマージされますか?

  5. この新しい(私にとっては新しい)機能に関するチュートリアル/サンプル/ビデオはありますか?

  6. 自動合併を使用する際に注意すべきことはありますか?

これらの質問が十分に代表的であり、十分な情報を提供していることを願っています。

23

1.要素を無効にする

アプリのマニフェストでアクセス許可と機能をいつでも明示的に無効にし、ライブラリ値をオーバーライドできます。そして、私は ライブラリから要素を無効化できる であることがわかりました。

上記のリンクの次のコードを検討してください。

<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エントリが効果的に削除されます。

2.ライブラリの属性をオーバーライドする

値がマージされる順序は here セクションのマニフェストファイルの順序で説明されています。基本的には次のようになります:ライブラリ、次にメインマニフェスト、次にフレーバーとビルドタイプマニフェストを使用します。 ライブラリの属性をオーバーライドする方法

ビルドタイプとは何ですか?

デフォルトは「デバッグ」と「リリース」です。独自に定義し、signingproguardなどの設定をオーバーライドできます。あなたの目的のために、それは実行構成と同等であると言うことができます。

これは次のように動作します。デフォルト値と共有値をmainマニフェスト内に配置します。次に、flavorマニフェストで、必要な値をオーバーライドします。詳細については、Googleの「gradle flavors」。

3.マニフェストの統合を完全に無効にする

Android Gradle Build]のマニフェストマージを無効にする

Android.applicationVariants.all { variant ->
    variant.processResources.manifestFile = file('src/main/AndroidManifest.xml')
    variant.processManifest.enabled=false
}

これをどのファイルに入れますか?

モジュールの(ルートプロジェクトではない)build.gradleの最後。

4.依存関係からのマニフェストはマージされますか?

はい、それらはライブラリです。

マージをブロックする方法はありますか特定のライブラリマニフェスト

ごめんなさい。

5.チュートリアルはありますか?

何を達成しようとしているかによって異なります。これまでのところ、それはすぐに使用できました。

私はビデオについて知りません。

6.知っておくべきことは何ですか?

追加のアクセス許可などについて疑わしい場合は、生成されたマニフェストを確認できます。project/module/build/intermediates/manifests/full/[flavor]/build-type/AndroidManifest.xmlにあります。

ソース: http://tools.Android.com/tech-docs/new-build-system/user-guide/manifest-merger

39
Eugen Pechanec

このスレッドのリンクの一部は廃止されています。 Android AARsの場合、Gradleによるマニフェストの自動マージに関連して更新される主なものは次のとおりです。

https://developer.Android.com/studio/build/manifest-merge

0
nazmul idris