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

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

ただいまの
回答率

90.34%

  • C#

    8230questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Unity

    4886questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • Android Studio

    4107questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

  • Unity2D

    1074questions

  • Google API

    607questions

    Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

【Unity】PlayServicesResolverで多重定義エラー

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 2,238

navesanta

score 108

Unityで作成したAndroidアプリにi-mobileを実装しようと試みているのですがコンパイル時にエラーが出てうまくいきません。教えて下さい。手順は下記の通りです。

1)Unityでゲームアプリを作成してBuildSettingでAndroidを選択してBundleIdentifierも変更して実機でのテストBuild and Runまで問題なくできました。

2)i-mobileの管理画面でアプリ登録→広告スポットの作成→スポットの取得も完了しました。

3)iMobileSdkAdsUnityPlugin_2.x.x.unitypackageを(全項目で)インポートしてAssetsフォルダ以下にPluginsフォルダができました。

4)AndroidSDKであるimobileSdkAds.jarをAssets/Plugins/Androidフォルダ以下に設置しました。

5)次にGoogle Play Servicesをインポートして設置するところですがGoogle Play Servicesにすると全指定になり65K問題でアプリが落ちる可能性があります。しかしUnityにはAndroid Studioの様にGradleで個別指定する様な機能がないので代わりにPlayServicesResolverを使います。PlayServicesResolverをインポートします。play-services-resolver-x.x.x.unitypackageをインポートしてAssetsフォルダ以下にPlayServicesResolverフォルダができました。

6)次にMainシーンで起動時に起ち上げるFirstスクリプトのAwake内にi-mobileの実装を記述します。

First.cs

//i-mobile設定
    const string IMOBILE_ICON_PID = "5XXXX";
    const string IMOBILE_ICON_MID = "3XXXXX";
    const string IMOBILE_ICON_SID = "1XXXXXX”;

//i-mobile実装
        //スポット情報を設定する
        IMobileSdkAdsUnityPlugin.registerInline(IMOBILE_ICON_PID,IMOBILE_ICON_MID,IMOBILE_ICON_SID);
        //広告の取得を開始
        IMobileSdkAdsUnityPlugin.start (IMOBILE_ICON_SID);
        //アイコン表示パラメータを作成
        var iconParams = new IMobileIconParams();
        iconParams.iconNumber = 4;

        //広告の表示位置を指定
        IMobileSdkAdsUnityPlugin.show (IMOBILE_ICON_SID,
            IMobileSdkAdsUnityPlugin.AdType.ICON,
            IMobileSdkAdsUnityPlugin.AdAlignPosition.CENTER,
            IMobileSdkAdsUnityPlugin.AdValignPosition.BOTTOM,
            iconParams);


7)次にGoogle Adsのライブラリを追加するImobileDependenciesスクリプトを追加します。
ImobileDependencies.cs

using Google.JarResolver;
using UnityEditor;

[InitializeOnLoad]
public static class ImobileDependencies {

    static ImobileDependencies() {

        PlayServicesSupport svcSupport = PlayServicesSupport.CreateInstance(
            "ImobileSample", EditorPrefs.GetString("AndroidSdkRoot"), "ProjectSettings");

        svcSupport.DependOn("com.google.android.gms", "play-services-ads", "8+");
    }
}


これでBuild and Runをすると下記エラーが出ます。

CommandInvokationFailure: Unable to convert classes into dex format. See the Console for details.
/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/java -Xmx2048M -Dcom.android.sdkmanager.toolsdir="/Users/watanabesyuuichi/Library/Android/sdk/tools" -Dfile.encoding=UTF8 -jar "/Applications/Unity/PlaybackEngines/AndroidPlayer/Tools/sdktools.jar" -

stderr[
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/internal/zzdr;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/internal/zzds;


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:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at SDKMain.main(SDKMain.java:129)
Caused by: java.lang.InterruptedException: Too many errors
    at com.android.dx.command.dexer.Main.processAllFiles(Main.java:600)


Error building Player: CommandInvokationFailure: Unable to convert classes into dex format. See the Console for details.
/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/java -Xmx2048M -Dcom.android.sdkmanager.toolsdir="/Users/watanabesyuuichi/Library/Android/sdk/tools" -Dfile.encoding=UTF8 -jar "/Applications/Unity/PlaybackEngines/AndroidPlayer/Tools/sdktools.jar" -

stderr[
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/internal/zzdr;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/internal/zzds;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/internal/zzdt;


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:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at SDKMain.main(SDKMain.java:129)
Caused by: java.lang.InterruptedException: Too many errors
    at com.android.dx.command.dexer.Main.processAllFiles(Main.java:600)
    ... 9 more
]


エラーはネットでググってみると「同じクラスファイルが存在しているため多重定義になっている」とのことですがどの部分が該当するのか分かりません。
どの部分が多重定義になっているのでしょうか?

ちなみに現状のAssetsの階層は下記の通りです。

Assetsフォルダ
-- PlaySevicesResolverフォルダ---Editorフォルダ
DefaultResolver.cs
ImobileDependencies.cs
IResolver.cs
jarResolverLib.dll
PlayServicesResolver.cs
ResolverVer1_1.cs
ResolverVer1_2.cs
SettingsDialog.cs

--Pluginsフォルダ
ImobileIconParams.cs
ImobileNativeAdObject.cs
ImobileNativeAdParams.cs
ImobileNativeAdReceiver.cs
ImobileSdkAdsUnityPlugin.cs
ImobileSdkAdsUnityPluginUtility.cs

Pluginsフォルダ---Androidフォルダ
AndroidManifest.xml
imobileSdkAds.jar
imobileSdkAdsAndroidUnityPlugin.jar
play-services-ads-9.2.0.aar
play-services-ads-lite-9.4.0.aar
play-services-base-9.4.0.aar
play-services-basement-9.4.0.aar
play-services-clearcut-9.4.0.aar
play-services-gass-9.4.0.aar
play-services-tasks-9.4.0.aar
support-annotations-23.0.0.jar
support-v4-23.0.0.aar

Pluginsフォルダ---iosフォルダ
IMobileSdkAdsIosUnityPluginimpl.mm
IMobileSdkAdsIosUnityPluginimpl.h

UnityでGoogle Play Servicesを使うのは結構多くの方行っていると
思いますがネットで見てもうまく見つけることができませんでした。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

0

play-services-ads-9.2.0.aar 
1つだけ9.2.0になっているのが気になります。

play-services-ads

play-services-adsは9.4.0が最新です。

Android SDK Managerを利用して一通りアップデートして頂いたのち、
Unityエディタのヘッダメニューから Assets -> Google Play Services -> Resolve Client Jars
を選択して更新してみてください。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/09/12 05:43

    >play-services-adsは9.4.0が最新です。
    なかなか9.4.0にするのに苦心しましたがフォルダを探して直接9.4.0にドラッグ&ドロップして変更したらエラーが消えました。ありがとうございました。

    キャンセル

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

  • ただいまの回答率 90.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

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

  • C#

    8230questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Unity

    4886questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • Android Studio

    4107questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

  • Unity2D

    1074questions

  • Google API

    607questions

    Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。