前置き
Unity+Androidで、Google Play Servicesのライブラリを使いたい場合、
google-play-services_libを丸ごと入れてしまうと、メソッド数が多すぎて
65K超えエラーになることが良くあります。
こんな感じのエラーですね。
http://developer.android.com/intl/ja/tools/building/multidex.html
trouble writing output:
Too many field references: 131000; max is 65536.
You may try using --multi-dex option.
AndroidStudioでビルドする場合は、Google Play Servicesのライブラリの中から、
必要なAPIのみをbuild.gradleで指定して追加することができます。
https://developers.google.com/android/guides/setup#split
しかし、Unityのビルドではbuild.gradleを使用することはできないため、
Unityで同じことをするにはどうすれば良いのかという話です。
本題
GooglePlayServicesの中から、必要なAPIのみを追加するためのUnityライブラリを
Googleが公開してくれています。
PlayServicesResolver (unity-jar-resolver)
https://github.com/googlesamples/unity-jar-resolver
これはGoogle公式の以下のUnityプラグインに含まれているため、
これらの機能をUnityで使用したい場合は、公式プラグインをそのまま使えば良いです。
PlayServicesResolverの使い方
上記のリポジトリを持ってきて、play-services-resolver-x.x.x.unitypackageをインポートします。
SampleDependencies.csというサンプルが用意されているので、
実装方法はこれを見ればだいたいわかるかと思います。
試しにGoogle Adsのライブラリを追加するソースを追加してみます。
using Google.JarResolver;
using UnityEditor;
[InitializeOnLoad]
public static class AdsDependencies {
static AdsDependencies() {
PlayServicesSupport svcSupport = PlayServicesSupport.CreateInstance(
"AdsSample", EditorPrefs.GetString("AndroidSdkRoot"), "ProjectSettings");
svcSupport.DependOn("com.google.android.gms", "play-services-ads", "8+");
}
}
こんな感じで、PlayServicesSupport#DependOn を必要なだけ呼び出せばOKです。
3つの引数は、見ての通りbuild.gradleで指定する際のコロン区切りの値です。
(ここに書いてあるやつです。)
パッケージをインポートした時に、Assets -> Google Play Services というメニューが追加されています。
(Build SettingsでAndroidにSwitchしていないと表示されません)
Resolve Client Jars を実行すると、指定したライブラリが依存関係を含めて追加されます。
なお、上記メニューの Settings -> Enable Background resolution がONになっていると、
Resolve Client Jars を実行しなくても勝手に追加してくれます。(デフォルトON)
さて、実行結果ですが、以下のようにaarとjarファイルが、Assets/Plugins/Android 配下に追加されました。
以上。