冬乃Tech Blog

主にUnityでのC#コーディングで得た知見をまとめていく

Androidビルドで"Gradle Error:Colliding Attributes"と出てビルドできない問題

はじめに

先日、Oculus Questのファームウェアアップデートがあり、Oculus GOアプリへの対応準備がされた模様。

しかしこれにより、既存のQuestのアプリで片手しか認識されないという不具合がしばしば確認された。
幸い、OVRManagerの設定をいじることで解決できるらしく、私もこれの対応をしていたのだが、ちょっと見慣れないエラーにぶち当たって数時間頭を悩ませたので、解決策をここで記述しておく。

動作環境

Windows10
Unity 2018.3.6f1
Oculus Integration 1.39
Android Studio 3.4.1

確認した問題

Questの新ファームウェアに対応するため、以下の操作を実施

  • OVR ManagerTargetDevicesをQuestに変更
  • メニューバーのOculus > Tools > Remove AndroidManifest.xml で既存のAndroidManifestを削除
  • メニューバーのOculus > Tools > Create store-compatibleAndroidManifest.xml で新しくAndoroidManifestを作成
    本来であればこれで問題ないはずだったのだが、ビルド最終段階になってこんなエラーが出た。

f:id:fuyunomikan1223:20190810151115p:plain:left


...英語がいっぱいだ...

このGradle Error:Colliding Attributeというのは、AndroidManifestの統合時のエラーらしい

docs.unity3d.com

正直これに関しての知識は今回調べた程度で詳しくないので、その手の方々から怒られないためにもあまり下手なことは書かないようにするが、
どうやら追加されたアセットなどでインポートされたライブラリファイル内のManifestファイルにandroid:allowBackup="true"が記述されている状態で、
Assets>Plugins>Android>AndroidManifest.xml内のApplicationタグ内にあるandroid:allowBackupfalseとなっていると統合できないらしい。

そもそもAndroidManifest.xmlって?

Androidアプリの基本情報(パッケージ名やバージョン、APIレベルなど)が記述されている。
アプリ内には一つしか入れることができないため、ビルド前にアセットなどで複数のManifestファイルがある場合は、ビルド時に自動で一つに統合されるらしい。

developer.android.com

今回はこの統合時にエラーが起きてしまったらしい。

解決策

メインとなる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>

とりあえずこれで私は解決した。