Android Studio への引っ越しトラブル ~ Manifest Merger編 ~

  • 2015年1月21日
  • by 
Android Studio への引っ越しトラブル ~ Manifest Merger編 ~

ソフトバンク・au・ドコモの方は、公式のオンラインショップを利用すれば頭金不要で通常のショップよりお得に購入できます。

Android Studio がメジャーバージョンアップで焦って Eclipse+ADT から引っ越しした際の困った話です。

Manifest Merger編

今回の引っ越し対象となった Eclipse+ADT プロジェクト内容は、基本機能は同じで複数のアプリの開発していたプロジェクトです。

プロジェクト構成

  • メイン機能のライブラリプロジェクト
  • 各アプリケーションプロジェクト

Android Studio へ Eclipse+ADT プロジェクトの import を行いビルドした時に

Error:Execution failed for task ‘:MyApplication:processDebugManifest’. > Manifest merger failed with multiple errors, see logs

マニフェストの合併でエラーが発生。。。

Messages Gradle Build のすぐ上に解決策が記述されておりました。

Suggestion: add ‘tools:replace=”android:icon”‘ to element at AndroidManifest.xml:37:2 to override
Suggestion: add ‘tools:replace=”android:value”‘ to element at AndroidManifest.xml:62:3 to override

AndroidManifest.xml を上書きするには、

tools:replace=”android:icon” を <application> タグに加える。。。

Android StudioはGradleを採用しているのでAndroidManifest.xml が複数あった場合マージされるとの事。。。
これによっては競合が発生して今回のエラーみたいなものが起きます。

Eclipse+ADT の時はライブラリプロジェクトのAndroidManifest.xmlは無視されていたので先入観にやられました。

マージのみで競合が発生しないケース

<activity
android:name="hoge.piyo.xxx.MyActivity"
android:theme="@android:style/Theme.Black.NoTitleBar"/>

<activity
android:name="hoge.piyo.xxx.MyActivity"
android:screenOrientation="landscape/>

異なる値と同じ属性を持っていない場合、問題なくマージされます。

<activity
android:name="hoge.piyo.xxx.MyActivity"
android:theme="@android:style/Theme.Black.NoTitleBar"
android:screenOrientation="landscape"/>

競合するケース

<activity
android:name="hoge.piyo.xxx.MyActivity"
android:theme="@android:style/Theme.Black.NoTitleBar" />

<activity
android:name="hoge.piyo.xxx.MyActivity"
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" />

異なる値と同じ属性を持っている場合、競合が発生します。
android:theme=”@android:style/Theme.Black.NoTitleBar”
android:theme=”@android:style/Theme.Black.NoTitleBar.Fullscreen”

AndroidManifest.xml の競合を解決するものもしっかりございまして。

Android Tools Project Site ~Manifest Merger~
http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger

に詳しく書いてありました。。。

本題の対応方法です。
(1) <manifest> タグに xmlns:tools=”http://schemas.android.com/tools” を追加する。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="hoge.piyo.xxx"
xmlns:tools="http://schemas.android.com/tools">

(2) Messages Gradle Build の所に出ていた対応方法を追加する。
・アプケーションプロジェクトのAndroidManifest.xml

Suggestion: add ‘tools:replace=”android:icon”‘ to element at AndroidManifest.xml:37:2 to override
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@android:style/Theme.Black.NoTitleBar"
tools:replace="android:icon"
>
Suggestion: add ‘tools:replace=”android:value”‘ to element at AndroidManifest.xml:62:3 to override
<meta-data
android:name="xxx.color"
android:value="#FFFFFFFF"
tools:replace="android:value"
/>

基本的な対応はこれで良いかと。
これからはこの辺りもしっかり考えていけないなと思ったこの頃です。

ちゃんと最新のものは追いかけないといけませんね。。。

Android Tools Project Site を見ていただければ詳しい対応方法などは記載されているのでお暇なときにでも見てみてください。

ソフトバンク・au・ドコモの方は、公式のオンラインショップを利用すれば頭金不要で通常のショップよりお得に購入できます。

【週刊bitWave】(メルマガ)始めました!

登録はこちらからメールアドレスを入力してお申込みください。

ご登録いただいたメールアドレスは 【週刊bitWave】の更新情報の配信にのみ使用します。

個人情報の取扱いに関しては、「プライバシーポリシー」をご確認ください。解除はいつでもこちらから行うことが可能です。

あなたにおすすめ