Androidビルドで"Gradle Error:Colliding Attributes"と出てビルドできない問題
はじめに
先日、Oculus Questのファームウェアアップデートがあり、Oculus GOアプリへの対応準備がされた模様。
1/3: Go emulation is coming to Quest later this year, by way of a compatibility layer that makes Quest report as a Go and emulate the Go controller for old apps.
— John Carmack (@ID_AA_Carmack) July 23, 2019
しかしこれにより、既存のQuestのアプリで片手しか認識されないという不具合がしばしば確認された。
幸い、OVRManagerの設定をいじることで解決できるらしく、私もこれの対応をしていたのだが、ちょっと見慣れないエラーにぶち当たって数時間頭を悩ませたので、解決策をここで記述しておく。
動作環境
Windows10
Unity 2018.3.6f1
Oculus Integration 1.39
Android Studio 3.4.1
確認した問題
Questの新ファームウェアに対応するため、以下の操作を実施
OVR Manager
のTargetDevices
をQuestに変更- メニューバーの
Oculus > Tools > Remove AndroidManifest.xml
で既存のAndroidManifestを削除 - メニューバーの
Oculus > Tools > Create store-compatibleAndroidManifest.xml
で新しくAndoroidManifestを作成
本来であればこれで問題ないはずだったのだが、ビルド最終段階になってこんなエラーが出た。
...英語がいっぱいだ...
このGradle Error:Colliding Attribute
というのは、AndroidManifestの統合時のエラーらしい
正直これに関しての知識は今回調べた程度で詳しくないので、その手の方々から怒られないためにもあまり下手なことは書かないようにするが、
どうやら追加されたアセットなどでインポートされたライブラリファイル内のManifest
ファイルにandroid:allowBackup="true"
が記述されている状態で、
Assets>Plugins>Android>AndroidManifest.xml内のApplication
タグ内にあるandroid:allowBackup
がfalse
となっていると統合できないらしい。
そもそもAndroidManifest.xmlって?
Androidアプリの基本情報(パッケージ名やバージョン、APIレベルなど)が記述されている。
アプリ内には一つしか入れることができないため、ビルド前にアセットなどで複数のManifestファイルがある場合は、ビルド時に自動で一つに統合されるらしい。
今回はこの統合時にエラーが起きてしまったらしい。
解決策
メインとなるAndroidManifest
内に追記することでこの問題を回避できる。
Manifest
タグ内にxmlns:tools="http://schemas.android.com/tools"
を追記
Application
タグ内にtools:replace = "android:allowBackup"
を追記
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> //←ここと <application android:allowBackup="false" tools:replace = "android:allowBackup"> //←ここ </manifest>
とりあえずこれで私は解決した。