現在のプロジェクトの巨大なアプリケーションをAndroid StudioとGradleに移行中です。現在、次の問題に悩まされています。
Error:(87, 9) Execution failed for task ':App:processDebugManifest'.
> Manifest merger failed : Attribute application@label value=(@string/app_label) from AndroidManifest.xml:87:9
is also present at Android_APPLICATION:Library:unspecified:9:18 value=(@string/app_name)
Suggestion: add 'tools:replace="Android:label"' to <application> element at AndroidManifest.xml:82:5 to override
メインAndroidManifest.xml
ファイルに次の属性を追加しようとしました。
tools:replace="Android:label, *App Name*"
tools:replace="Android:label, @string/app_label"
tools:replace="Android:label"
これらの属性定義はいずれも機能しません。私は何を間違えていますか?
これを試してみてください:
これを<manifest/>
に追加します
xmlns:tools="http://schemas.Android.com/tools"
これを<application/>
に追加します
tools:node="replace"
this に基づいて、すべての要素をオーバーライドする必要があります。 「優先度の低い宣言を注釈付きの宣言に置き換えます。」
マニフェストファイルがマージされるとき、label
属性と競合があります。
一般的に、 つのタイプがあります 単一の結果アプリマニフェストにマージする必要があるマニフェストファイルです。ここでは優先順位を示します。
競合は、次の2つの方法のいずれかで解決できます。
ライブラリ(または下位レベル)マニフェストファイルから競合する属性を削除します。
この場合、Android_APPLICATION:Library:unspecified:9:18 value=(@string/app_name)
には、メインアプリケーションとは異なる@string/app_name
値が定義されています。必要ない場合は削除します。ライブラリファイルのAndroid:label="@string/app_name"
ファイルからAndroidManifest.xml
を削除するだけです。
いくつかの特別な属性マーカー (ツールの名前空間内)があり、競合の解決方法に関する特定の決定を表すために使用できます。
この場合、メインアプリのAndroid:label
で他の(たとえば、ライブラリファイル)アプリケーションラベルを明示的にオーバーライドするには、xmlns:tools="http://schemas.Android.com/tools"
定義を<manifest>
ノードに追加し、tools:replace="label"
<application>
ノードに。
次に例を示します-メインアプリケーションのAndroidManifest.xml
ファイルでこれを使用します。
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.mycompany.myapp"
xmlns:tools="http://schemas.Android.com/tools">
<application
Android:label="@string/app_name"
tools:replace="label"/>
</manifest>
このアプローチは、他の競合する属性でも機能します。たとえば、icon
属性も競合している場合、tools:replace="label, icon"
に変更できます。
あなたが幸運だったなら、私と同じように、ハッキングの回避策で問題を手動で修正できます。
AARファイルは、拡張子が.aarの単なる.Zipファイルです。私の場合、.aarを解凍し、問題のあるAndroid:label
をライブラリのAndroidManifest.xml
から削除し、残りのファイルを.aar拡張子で再アーカイブしました。すべてが新しい.aarで完全に機能するようです。
参考までに、 これはAndroid gradleプラグインの既知のバグのようです 。
同じ問題を修正しました。私のためのソリューション:
xmlns:tools="http://schemas.Android.com/tools"
行をマニフェストタグに追加しますtools:replace=..
を追加しますAndroid:label=...
を移動します私も同じ問題に直面していました、そして多くの研究の後に魂が見つかりました
- 最小SDKバージョンは、使用しているモジュールのバージョンと同じである必要があります。たとえば、モジュールの最小SDKバージョンは14で、アプリの最小SDKバージョンは9です。同じである必要があります。
- アプリとモジュールのビルドバージョンが異なる場合。繰り返しますが、同じはずです
要するに、アプリのbuild.gradleファイルとマニフェストには同じ構成が必要です
- マニフェストファイルに2回追加された同じアクセス許可のような重複はありません。同じアクティビティに2回言及されています
- プロジェクトからアクティビティを削除した場合は、マニフェストファイルからも削除します
- マニフェストファイルのラベル、アイコンなどのタグの理由a)マニフェストタグにxmlns:tools行を追加b)アプリケーションタグにtools:replace =またはtools:ignore =を追加
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.slinfy.ikharelimiteduk"
xmlns:tools="http://schemas.Android.com/tools"
Android:versionCode="1"
Android:versionName="1.0" >
<application
tools:replace="icon, label"
Android:label="myApp"
Android:name="com.example.MyApplication"
Android:allowBackup="true"
Android:hardwareAccelerated="false"
Android:icon="@drawable/ic_launcher"
Android:theme="@style/Theme.AppCompat" >
</application>
</manifest>
これらの点を考慮することで、このマニフェストのマージに失敗した問題を取り除くことができます。私の投稿を確認してください。あなたは私の投稿を確認できます https://wordpress.com/post/dhingrakimmi.wordpress.com/2
私はちょうど削除しました
Android:label="@string/app_name
manifest file
から、それはうまくいきました!