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

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

ただいまの
回答率

91.36%

  • Unity3D

    782questions

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

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

解決済

回答 1

投稿 2017/11/26 22:07 ・編集 2017/11/26 23:07

  • 評価
  • クリップ 0
  • VIEW 86

Aya_program

score 18

既存のプロジェクトの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...

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

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 23:41

編集 2017/11/28 08:45

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/27 20: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が見つかりませんでした

    キャンセル

  • 2017/11/27 23:04

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

    キャンセル

  • 2017/11/28 08:57 編集

    ファイル名にはplay-servicesなどが入っていますが、クラス名は com.google.android.gms.*などです。
    Assets\Plugins\Androidなどにaarファイル等があります。

    また、PlayServicesResolverフォルダは、ファイル構成がかなり変更されたようです。編集箇所は無くなり、メニュー (Assets > Play Services Resolver) から操作するようになっています。(追記4あたり)
    ただ、実験してみた所、発生するエラーは Play Services Resolverで処理した後の状態と一致するようです。(追記8のあたり)

    キャンセル

  • 2017/11/28 09:21

    非常に丁寧に回答していただきありがとうございます
    画像付きでとてもわかりやすかったです

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

    本当にたすかりました
    ありがとうございます!

    キャンセル

  • 2017/11/28 21:30

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

    キャンセル

  • 2017/11/28 23:07

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

    キャンセル

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

ただいまの回答率

91.36%

関連した質問

同じタグがついた質問を見る

  • Unity3D

    782questions

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