unity-jar-resolverを使用した依存ライブラリの解決方法

unity-jar-resolverのインポート

unity-jar-resolverからリポジトリを取得して、
play-services-resolver-x.x.x.x.unitypackage(x.x.x.xはバージョン番号)をインポートします。

メニューから Assets -> Import Package -> Custom Package...を選択し、
UnityPackgeをインポートしてください。

※下記ライブラリを使用している場合は、ライブラリにunity-jar-resolverが内包されているため、
本手順はスキップしてください。

  • play-games-plugin-for-unity
  • googleads-mobile-unity

AssetPostprocessorの作成

必要な依存ライブラリの設定を定義していきます。
Assets/PlayServicesResolver/Editorに任意の名前でC# Scriptを作成し、
サンプルのように実装してください。

使用するバージョンは各プロジェクトで使用するバージョンを指定してください。
但し、組み合わせによっては実行時エラーが出る可能性があります。
詳しくは下記をご覧ください。
Androidビルドに必要なライブラリ

依存ライブラリの設定のサンプル

using System;
using System.Collections.Generic;
using UnityEditor;

[InitializeOnLoad]
public class GrowthbeatSampleDependencies : AssetPostprocessor {

  #if UNITY_ANDROID
  public static object svcSupport;
  #endif

  static GrowthbeatSampleDependencies() {
    RegisterDependencies();
  }

  public static void RegisterDependencies() {
    #if UNITY_ANDROID
    RegisterAndroidDependencies();
    #elif UNITY_IOS
    RegisterIOSDependencies();
    #endif
  }
    
  public static void RegisterAndroidDependencies() {
    #if UNITY_ANDROID
    Type playServicesSupport = Google.VersionHandler.FindClass(
      "Google.JarResolver", "Google.JarResolver.PlayServicesSupport");
    if (playServicesSupport == null) {
      return;
    }
    
    svcSupport = svcSupport ?? Google.VersionHandler.InvokeStaticMethod(
      playServicesSupport, "CreateInstance",
      new object[] {
        "GrowthbeatSampleDependencies",
        EditorPrefs.GetString("AndroidSdkRoot"),
        "ProjectSettings"
      });

    // play-services-gcmの依存解決
    // object[]の3番目は使用したいバージョンを指定してください
    Google.VersionHandler.InvokeInstanceMethod(
      svcSupport, "DependOn",
      new object[] {
        "com.google.android.gms",
        "play-services-gcm",
        "8.3.+" },
      namedArgs: new Dictionary<string, object>() {
        {"packageIds", new string[] { "extra-google-m2repository" } }
      });

    // play-services-adsの依存解決
    // object[]の3番目は使用したいバージョンを指定してください
    Google.VersionHandler.InvokeInstanceMethod(
      svcSupport, "DependOn",
      new object[] {
        "com.google.android.gms",
        "play-services-ads",
        "8.3.+" },
      namedArgs: new Dictionary<string, object>() {
        {"packageIds", new string[] { "extra-google-m2repository" } }
      });

    // supportライブラリの依存解決
    // object[]の3番目は使用したいバージョンを指定してください
    Google.VersionHandler.InvokeInstanceMethod(
      svcSupport, "DependOn",
      new object[] { "com.android.support", "support-v4", "23.0.+" },
      namedArgs: new Dictionary<string, object>() {
        {"packageIds", new string[] { "extra-android-m2repository" } }
      });
    #endif
  }

  public static void RegisterIOSDependencies() {
    #if UNITY_IOS
    Type iosResolver = Google.VersionHandler.FindClass(
      "Google.IOSResolver", "Google.IOSResolver");
    if (iosResolver == null) {
      return;
    }

    // 今回はiOSの依存解決は使用しない

    #endif
  }
    
  // Handle delayed loading of the dependency resolvers.
  private static void OnPostprocessAllAssets(
    string[] importedAssets, string[] deletedAssets,
    string[] movedAssets, string[] movedFromPath) {
    foreach (string asset in importedAssets) {
      if (asset.Contains("IOSResolver") ||
        asset.Contains("JarResolver")) {
        RegisterDependencies();
        break;
      }
    }
  }

}

依存ライブラリの解決

unity-jar-resolverをimportすると、
メニューの AssetsPlay Services Resolverという項目が追加されているので、
Assets -> Play Services Resolver -> Android Resolver -> Resolver Client Jarを選択します。

成功すると、 Assets/Plugins/Android/配下にC# Scriptで定義した依存ライブラリのaarと、
必要なライブラリが展開されます。