質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Q&A

解決済

1回答

11568閲覧

Unityエラー 調べてもよくわかりません ビルドが通らないです

Aya_program

総合スコア30

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

1グッド

1クリップ

投稿2017/11/26 13:07

編集2017/11/26 14:07

既存のプロジェクトのAdmobを導入しました
https://github.com/googleads/googleads-mobile-unity/releases

その後ビルドするとエラーメッセージが出ます
エラーメッセージは長いので最後に載せておきます

既存シーンでなく新規シーンでAdmobを導入したところ平気でした
また、既存シーンには[NCMB]というオンラインランキングを実装させるためのパッケージを導入していました
これが怪しいと思い新規シーンにてAdmobとNCMB両方を入れてビルドしてみると同様のエラーが出ました

NCMB
https://github.com/NIFTYCloud-mbaas/ncmb_unity/releases
NCMBQuickRanking
https://github.com/NCMBMania/UnityQuickRanking/releases

これら二つの競合>のようなものが原因だとわかったのですがエラーを調べたり見てみても具体的にどういった対処をすればいいのかわからないです

よろしくお願いします

追記
https://qiita.com/Takaaki_Ichijo/items/d9a7639f2dc4d1060616
にて同様のエラーと改善方法が書いてある

パターン1マニフェストファイルの編集はすでに解決済み
パターン2そもそもsupport-v4等の重複ファイルが存在しない

また、新規シーンにて上記のパッケージを導入後
マニフェストファイル編集後、重複するaarファイルを削除したが同様のエラーが出た

エラー
CommandInvokationFailure: Unable to convert classes into dex format.
C:\Program Files\Java\jdk1.8.0_111\bin\java.exe -Xmx2048M -Dcom.android.sdkmanager.toolsdir="C:/Users/Aya1/AppData/Local/Android/sdk\tools" -Dfile.encoding=UTF8 -jar "C:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer/Tools\sdktools.jar" -

stderr[
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/common/api/zzf;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/common/internal/zze;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/common/internal/zzg;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/common/internal/zzh;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/common/internal/zzi;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/common/internal/zzl;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/common/internal/zzm;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/common/internal/zzd;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/common/internal/zzy;

UNEXPECTED TOP-LEVEL EXCEPTION:
java.lang.RuntimeException: Translation has been interrupted
at com.android.dx.command.dexer.Main.processAllFiles(Main.java:608)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:311)
at com.android.dx.command.dexer.Main.run(Main.java:277)
at com.android.dx.command.dexer.Main.main(Main.java:245)
at com.android.dx.command.Main.main(Main.java:106)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at SDKMain.main(SDKMain.java:130)
Caused by: java.lang.InterruptedException: Too many errors
at com.android.dx.command.dexer.Main.processAllFiles(Main.java:600)
... 9 more
]
stdout[
processing archive bin\classes.jar...
processing com/unity3d/player/a$a.class...
processing com/unity3d/player/a.class...
processing com/unity3d/player/b$1.class...
processing com/unity3d/player/b$2.class...
processing com/unity3d/player/b$3.class...
processing com/unity3d/player/b$4.class...
processing com/unity3d/player/b.class...
processing com/unity3d/player/c.class...
processing com/unity3d/player/d.class...
processing com/unity3d/player/e.class...
processing com/unity3d/player/f$1.class...
processing com/unity3d/player/f.class...
processing com/unity3d/player/NativeLoader.class...
processing com/unity3d/player/g.class...
processing com/unity3d/player/ReflectionHelper$1.class...
processing com/unity3d/player/ReflectionHelper$a.class...
processing com/unity3d/player/ReflectionHelper.class...
processing com/unity3d/player/h$1.class...
processing com/unity3d/player/h$2.class...
processing com/unity3d/player/h$3.class...
processing com/unity3d/player/h.class...
processing com/unity3d/player/i$1.class...
processing com/unity3d/player/i$a.class...
processing com/unity3d/player/i.class...
processing com/unity3d/player/j.class...
processing com/unity3d/player/UnityPlayer$1$1.class...
processing com/unity3d/player/UnityPlayer$1.class...
processing com/unity3d/player/UnityPlayer$2.class...
processing com/unity3d/player/UnityPlayer$4.class...
processing com/unity3d/player/UnityPlayer$5.class...
processing com/unity3d/player/UnityPlayer$6.class...
processing com/unity3d/player/UnityPlayer$7.class...
processing com/unity3d/player/UnityPlayer$8.class...
processing com/unity3d/player/UnityPlayer$9.class...
processing com/unity3d/player/UnityPlayer$10.class...
processing com/unity3d/player/UnityPlayer$11.class...
processing com/unity3d/player/UnityPlayer$12$1.class...
processing com/unity3d/player/UnityPlayer$12.class...
processing com/unity3d/player/UnityPlayer$13.class...
processing com/unity3d/player/UnityPlayer$14.class...
processing com/unity3d/player/UnityPlayer$15.class...
processing com/unity3d/player/UnityPlayer$3.class...
processing com/unity3d/player/UnityPlayer$16.class...
processing com/unity3d/player/UnityPlayer$17.class...
processing com/unity3d/player/UnityPlayer$18.class...
processing com/unity3d/player/UnityPlayer$19.class...
processing com/unity3d/player/UnityPlayer$20.class...
processing com/unity3d/player/UnityPlayer$21.class...
processing com/unity3d/player/UnityPlayer$a.class...
processing com/unity3d/player/UnityPlayer$b.class...
processing com/unity3d/player/UnityPlayer$c$1.class...
processing com/unity3d/player/UnityPlayer$c.class...
processing com/unity3d/player/UnityPlayer$d.class...
processing com/unity3d/player/UnityPlayer.class...
processing com/unity3d/player/UnityPlayerActivity.class...
processing com/unity3d/player/UnityPlayerNativeActivity.class...
processing com/unity3d/player/UnityPlayerProxyActivity.class...

--以下同様のエラーが続く

BinaryNumber👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

原因:
エラーで、already added となっているものが重複しているため。
com/google/android/gms/* なので、Google Play Services関連のクラス。

対処法:
NCMBのインポート時に play-services-*.aarsupport-*.aarなどのチェックを外す。
※PlayServicesResolverでは競合を解消しきれませんでした。

旧:
重複しているファイルを削る など。
実際は、追記で揚げている、Qiita - NCMB Unity SDKがAdMob等のAndroidプラグインと競合する場合の解決 の、「参考にしたウェブサイト」のリンク先AdMob と Nifty Cloud のプッシュ通知を共存させる [Unity] または、似たような内容の「パターン2:Android用のライブラリがダブる」辺りに書いてある内容を試すことになると思います。


以降、再現実験。長いので時間がある時に。

追記1: build.gradleを見ると、双方が同じものに依存していますが、バージョンが異なります。
※ソースとunitypackageに入っているものでバージョンが異なるようなので、参考程度に

Google Mobile Ads Unity Plugin v3.9.0 のソースにある、
source\android-library\app\build.gradle (抜粋)

dependencies { api fileTree(dir: 'libs', include: ['*.jar']) api 'com.android.support:appcompat-v7:26.1.0' api 'com.google.android.gms:play-services-ads:11.6.0' }

NCMB.3.1.0 のソースにある、
NcmbGcmPlugin\ncmbgcmplugin\build.gradle (抜粋)

dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:26.0.2' compile 'com.google.android.gms:play-services:8.3.0' }

追記2: 
NCMB.3.1.0 のzipファイル(に入っているNCMB.unitypackage)から読み取れる、Android関連のファイル名など

Assets/Plugins/Android
Assets/Plugins/Android/res
Assets/Plugins/Android/res/values
Assets/Plugins/Android/res/values/version.xml
Assets/Plugins/Android/support-compat-26.0.2.aar
Assets/Plugins/Android/support-v4-26.0.2.aar
Assets/Plugins/Android/play-services-basement-11.0.0.aar
Assets/Plugins/Android/play-services-tasks-11.0.0.aar
Assets/Plugins/Android/play-services-gcm-11.0.0.aar
Assets/Plugins/Android/play-services-base-11.0.0.aar
Assets/Plugins/Android/play-services-iid-11.0.0.aar
Assets/Plugins/Android/support-core-utils-26.0.2.aar
Assets/Plugins/Android/NcmbGcmPlugin.aar
Assets/Plugins/Android/AndroidManifest.xml


追記3:
Unityへのインポート時の画面

Google Mobile Ads Unity Plugin v3.9.0
admob

NCMB.3.1.0
ncmb-1
ncmb-2


追記4:
Android用にBuildした時の画面
※今回はエラー再現用に、Resolve Conflictダイアログで「No」を選択しています。
ここで「Yes」を選択すれば、今回の問題は解決しそうですが・・
※Resolve ConflictダイアログでYesを選択した場合は、(メッセージ通りに動作するなら)競合しているファイルは取り除かれるかと思います。
※このダイアログは、Google Mobile Ads Unity Pluginに入っている、PlayServicesResolverによる表示かと思います。(パスは、Assets\PlayServicesResolver\Editor*.dll)
関連する設定は、Assets > Play Services Resolverにあります。

※実験時は、iOS関連のファイルをインポートしていませんが、using UnityEditor.iOS.Xcode;で今回の現象と関係のないエラーが発生するため、 Assets\Editor\UpdateXcodeProject.cs を全行コメントアウトしています。

play-services-basement-11.6.0.aar と
play-services-basement-11.0.0.aar が競合している、などのメッセージが表示されます。
※まっさらな状態のUnityで実験したので、JDKのバージョン(1.7になっている)などのエラーも出ていますが、今回の現象とは関係ありません。

この競合は、Google Mobile Ads Unity Plugin v3.9.0 のソースにあるbuild.gradleで指定している

api 'com.google.android.gms:play-services-ads:11.6.0'

と、NCMB.unitypackageに入っている

Assets/Plugins/Android/play-services-basement-11.0.0.aar

などと一致します。

従って、競合については、NCMBのインポート時に、バージョンが競合するaarファイルをインポートしたのが原因です。
※バージョンは、NCMBの方が古いものと新しいものが混在しているので、インポート時にチェックを外すよりも、Resolve ConflictダイアログでYesを選択する方がよいかと思います。
エラーメッセージに表示される、競合しているファイル:
play-services-basement (11.6.0.aar, 11.0.0.aar)
support-compat (25.2.0.aar, 26.0.2.aar)
support-core-utils (25.2.0.aar, 26.0.2.aar)
support-v4 (25.2.0.aar, 26.0.2.aar)

build-1
build-2
build-3


追記5:
※Resolve Conflictダイアログで、一旦 No を選択してしまうと、以降のBuildで、ダイアログが表示されなくなります。その場合は、Assets > Play Services Resolver > Android Resolver > Force Resolveを選択すると、再度ダイアログが表示されるようになります。

再度ダイアログを表示する方法


追記6:
JDKが古い(1.7など)場合は、次のようなエラーが表示されます。
Unsupported major.minor version 52.0も、JDKのバージョンが原因
参考: Qiita - Unsupported major.minor version 51.0 = Java7 以上使え

対処法は、エラーメッセージに表示されているとおり、Edit > Preferences... > ExternalTools > Android の、JDK 欄で、JDK1.8以降のフォルダを選択で。

Unable to merge android manifests

CommandInvokationFailure: Unable to merge android manifests. See the Console for more details. ・・・ Exception in thread "main" java.lang.UnsupportedClassVersionError: com/android/manifmerger/Merger : Unsupported major.minor version 52.0

error log-jdk1.7

The configured JDK 1.7 is too old to build Android applications with recent libraries. Please install JDK version 1.8 or newer and configure Unity to use the new JDK installation in the 'Unity Preferences > External Tools' menu.

追記7:
Assets\Plugins\Android\AndroidManifest.xml の、YOUR_PACKAGE_NAMEを適切なパッケージ名に変更していない場合に発生。

YOUR_PACKAGE_NAMEの変更忘れ

UnityException: Bundle Identifier has not been set up correctly Please set the Bundle Identifier in the Player Settings. The value must follow the convention 'com.YourCompanyName.YourProductName' and can contain alphanumeric characters and underscore. Each segment must not start with a numeric character or underscore.

追記8:
ここで、質問のエラーが再現します。

この時点で質問のエラーが再現

CommandInvokationFailure: Unable to convert classes into dex format. ・・・ stderr[ Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/common/internal/zzaa; Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/common/internal/zzbf; ・・・
stdout[ processing archive H:\Projects\Unity\TestProject2\Temp\StagingArea\android-libraries\GoogleMobileAdsPlugin\libs.\unity-plugin-library.jar... processing com/google/unity/BuildConfig.class... ・・・ processing archive H:\Projects\Unity\TestProject2\Temp\StagingArea\android-libraries\NcmbGcmPlugin\libs.\classes.jar... ・・・ processing archive H:\Projects\Unity\TestProject2\Temp\StagingArea\android-libraries\play-services-ads-11.6.0\libs.\classes.jar... ・・・

追記9:
一旦仕切り直しで、テスト用にプロジェクトを再作成、インポートからやりなおしてみます。
今回は、インポート時に、Goolge Play Services関連のファイルなどをインポートしないでビルドが通るか実験してみます。
※エラーログ(processing archive ...)に出力されていたので、念のためunity-plugin-library.jarもインポート対象から外してあります。

AdMob
admob

この時点でAndroid用にBuildすると、YOUR_PACKAGE_NAMEを書き換えていない時のダイアログが表示されます。(変更対象のAssets\Plugins\Android\AndroidManifest.xmlは、NCMBに含まれているので、この時点では存在しません。)

YOUR_PACKAGE_NAME 書き換え忘れ

NCMB
NCMB-1
NCMB-2

このままBuildすると、またYOUR_PACKAGE_NAMEのダイアログが表示されるので、Assets\Plugins\Android\AndroidManifest.xmlのYOUR_PACKAGE_NAMEを、適切なパッケージ名に変更しておきます。

この状態で、Android用のBuildをすると、ビルドが成功し、apkファイルが生成されました。
(minSdkVersionが低いというワーニングが出ていますが、ビルドは通ります)

やはり、インポート時にバージョンが競合するファイルをインポートしているのが原因のようです。

ビルド後のログ


追記10:
Google Mobile Ads Unity Plugin の、unity-plugin-library.jarをインポートしてみます。

unity-plugin-library

エラーは発生しませんでした。
イメージ説明


追記11:
確認のために、競合しそうなファイルもインポートしてみると、予想通りエラーが発生しました。

インポート前の状態:
インポート前

NCMB の、support-*.aar、res\values\version.xmlを追加
NCMB

Build後のログ:
イメージ説明

CommandInvokationFailure: Unable to convert classes into dex format. ・・・ stderr[ Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/compat/BuildConfig; Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat; Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/app/ActivityCompat; Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/app/ActivityCompat$1; Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/app/ActivityCompat$OnRequestPermissionsResultCallback; Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/app/ActivityCompat$SharedElementCallback21Impl; Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/app/ActivityCompat$SharedElementCallback23Impl; Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/app/ActivityCompat$SharedElementCallback23Impl$1; Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/app/ActivityManagerCompat; UNEXPECTED TOP-LEVEL EXCEPTION: java.lang.RuntimeException: Translation has been interrupted ・・・

追記12:
NCMBに入っているAssets\Plugins\Android\res\values\version.xml は、古いファイルがメンテナンスされずに残っているようです。
(ライブラリでの Assets/Plugins/Android/res を使ったリソース提供は廃止されています)

<integer name="google_play_services_version">8298000</integer>

※これは、play-services-basement-8.3.0に入っている値と同じです。
パス:
(AndroidSDK)\extras\google\m2repository\com\google\android\gms\play-services-basement\8.3.0\play-services-basement-8.3.0.aar

resのインポートはOBSOLETE

OBSOLETE - Providing Android resources in Assets/Plugins/Android/res is deprecated, please move your resources to an AAR or an Android Library. See "AAR plug-ins and Android Libraries" section of the Manual for more details. UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)

投稿2017/11/26 14:41

編集2017/11/27 23:45
toris-birds

総合スコア122

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Aya_program

2017/11/27 11:06

返信ありがとうございますQiita - NCMB Unity SDKがAdMob等のAndroidプラグインと競合する場合の解決 のパターン2はそもそも重複するファイルがAsset>plugins>Android内に見つからないです Google Play Services関連のクラスも検索ワード"play-services"で探したのですが重複されるものは見つかりませんでした AdMob と Nifty Cloud のプッシュ通知を共存させる [Unity] を試してみようともしたのですが 次に ・Assets/PlayServicesResolver/Editor/AdMobDependencies.cs のAdMobDependencies関数内に下記のコードを追加します。 のところでAssets/PlayServicesResolver/Editor/AdMobDependencies.csが見つかりませんでした
Aya_program

2017/11/27 14:04

追記 バージョンが書いてなかったので書いておきます NCMB.3.1.0 Google Mobile Ads Unity Plugin v3.9.0
toris-birds

2017/11/27 23:57 編集

ファイル名にはplay-servicesなどが入っていますが、クラス名は com.google.android.gms.*などです。 Assets\Plugins\Androidなどにaarファイル等があります。 また、PlayServicesResolverフォルダは、ファイル構成がかなり変更されたようです。編集箇所は無くなり、メニュー (Assets > Play Services Resolver) から操作するようになっています。(追記4あたり) ただ、実験してみた所、発生するエラーは Play Services Resolverで処理した後の状態と一致するようです。(追記8のあたり)
Aya_program

2017/11/28 00:21

非常に丁寧に回答していただきありがとうございます 画像付きでとてもわかりやすかったです 新規プロジェクト後に 追記4にてあるとおりResolve ConflictダイアログでYESを試してみようとおもったのですが今までダイアログが出ていなかったので 追記5にある方法でダイアログを表示させようと試みたところ ”Resolution Failed! Your application will not run , see the log for details”と表示されました その後実行してみるとダイアログは表示されなかったのですが無事にビルドを通すことができました 本当にたすかりました ありがとうございます!
toris-birds

2017/11/28 12:30

解決したみたいで、よかったです。 今回は回答欄の字数制限で載せられませんでしたが、 Google Mobile Ads Unity Pluginの依存関係の設定ファイルは、Assets\GoogleMobileAds\Editor\GoogleMobileAdsDependencies.xml にあります。 https://developers.google.com/admob/unity/start#include_the_mobile_ads_sdk 今回の方法でバージョン解決がうまく行かなくなった場合は確認してみるとよいかもしれません。
Aya_program

2017/11/28 14:07

今後参考にさせていただきます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問