「Unity/GoogleMobileSDK/ライブラリ自動読み込み」の版間の差分
(→Gradle failed to fetch dependencies.エラーが出る場合) |
(→Gradle failed to fetch dependencies.エラーが出る場合) |
||
行146: | 行146: | ||
androidx.appcompat:appcompat:1.1.0 | androidx.appcompat:appcompat:1.1.0 | ||
− | PlayServicesResolverが1.2.64.0などと古いとcom.android.support系のライブラリが入っていてunityアプリでandroidxを使うとこのエラーが起こる。PlayServicesResolverを1.2.132. | + | PlayServicesResolverが1.2.64.0などと古いとcom.android.support系のライブラリが入っていてunityアプリでandroidxを使うとこのエラーが起こる。PlayServicesResolverを1.2.132.0などに上げるとcom.android.support系は除外されるようなので、上げればよい。 |
==iosの場合== | ==iosの場合== |
2019年12月3日 (火) 15:46時点における版
目次
準備
https://github.com/googlesamples/unity-jar-resolver
play-services-resolver-1.2.89.0.unitypackageをDL
play-services-resolver-1.2.89.0.unitypackageをAssets/ImortPackage/CustomPackageからインストールする
インストールに失敗する場合
unity/GoogleMobileAds/基本 [ショートカット]
play-services-resolverがこのライブラリに付属してるので、それをインストールする
自動読み込み
androidでのmavenやiosでのcocoapodsなどでライブラリを呼びたい場合などに使用。
公式:https://github.com/googlesamples/unity-jar-resolver#version-handler-usage
MyPlugin/Editor/MyPluginDependencies.xml に以下のようにandroidであればpackageurlを変更し、iosであればbundleやライブラリ名を変更すれば適用できる。
注意:ファイル名にDependencies.xmlが含まれていないと使えないっぽい。
PlayServicesResolver/Editorの下にxmlを作っても使えるが、公式はMyPluginなど別dirで記載されてるので、分けたほうが良いっぽい。
<dependencies> <androidPackages> <androidPackage spec="com.google.android.gms:play-services-games:9.8.0"> <androidSdkPackageIds> <androidSdkPackageId>extra-google-m2repository</androidSdkPackageId> </androidSdkPackageIds> <repositories> <repository>https://maven.google.com</repository> </repositories> </androidPackage> </androidPackages> <iosPods> <iosPod name="Google-Mobile-Ads-SDK" version="~> 7.0" bitcodeEnabled="true" minTargetSdk="6.0"> <sources> <source>https://github.com/CocoaPods/Specs</source> </sources> </iosPod> </iosPods> </dependencies>
カスタムで自動読込したい場合
okhttp3を入れる例 (できなかったので、未完成)
<dependencies> <!-- Android --> <androidPackages> <androidPackage spec="com.squareup.okhttp3:3.7.0"> <androidSdkPackageIds> <androidSdkPackageId>okhttp</androidSdkPackageId> </androidSdkPackageIds> <repositories> <repository>https://mvnrepository.com/artifact</repository> </repositories> </androidPackage> </androidPackages> <!-- iOS --> <iosPods> <iosPod name="Google-Mobile-Ads-SDK" version="~> 7.0" bitcodeEnabled="true" minTargetSdk="6.0"> <sources> <source>https://github.com/CocoaPods/Specs</source> </sources> </iosPod> </iosPods> </dependencies>
以下にあるjarがAssets/Plugins/Androidの下にされる https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp/3.7.0 https://mvnrepository.com/artifact/com.squareup.okio/okio/1.12.0
androidの場合
androidのgradleのライブラリ読み込み
unityバージョン2019からbuild-systemがgradleだけになった。 gradleの場合はAssets/Plugins/AndroidにDLされることはなく、以下ファイルあたりにDLされてるはず。
ls ~/.gradle/caches/modules-2/files-2.1/ ls ~/.gradle/caches/transforms-1/files-1.1/ ls ~/.gradle/caches/modules-2/metadata-2.69/descriptors/
build.gradleへの出力
Assets/PlayService/Android Resolve/Force Resolveすると build-systemがgradleの場合 Assets/Plugins/Android/mainTemplate.gradleへ出力される
↑
mainTemplate.gradleへ出力されずにPlugins/Androidの下にDLされるパターンもあった・・・。
証拠として、Google.JarResolver_v1.2.111.0はPlugin内にsdkがDLされない。v1.2.64と最新のv1.2.130はDKされた。(後で調べた結果↓)
Resolving Android Dependenciesのloadingが走らない場合
Android/BuildSettingのBuild/CustomGradleTemplateをoffにしてAssets/Plugins/Android/mainTemplate.gradleを一旦削除するとよいかも。
gradlewの実行
./Temp/PlayServicesResolverGradle/gradlew
Could not determine java version from '13.0.1'.エラーが出る場合
以下でもエラーが出てることを確認
$ ./Temp/PlayServicesResolverGradle/gradlew setupDecompWorkspace --stacktrace java.lang.IllegalArgumentException: Could not determine java version from '13.0.1'.
sdkmanager周りのエラーが出る
Unable to determine which Android packages are installed. Library/Android/sdk/tools/bin/sdkmanager --list --verbose
java9以上ではだめで、java8でないとならないようす。
参考:https://qiita.com/nemui-fujiu/items/47b6cae9e2763a96325c
"Stopped polling job due to exception: System.NullReferenceException: Object reference not set to an instance of an object"なエラーのとき
dependensyのresolveで実行時の続きエラー
at GooglePlayServices.UnityCompat.VersionFromAndroidSDKVersionsEnum (System.String enumName, System.String fallbackPrefKey,
AndoridのtargetがAPI29だった、28にして再度resolveを。
"java.lang.ClassNotFoundException: com.google.unity.ads.UnityAdListener"などgoogle系ライブラリが読み込めない場合
以下play-services系がCustom/Dependensies.xmlなどで入れようとしていたら、一旦削除し正常に動く状態にし、再度削除したものを追加してみる。
<androidPackage spec="com.google.android.gms:play-services-gcm:17.0.0"> <androidPackage spec="com.google.android.gms:play-services-location:17.0.0">
Assets/Plugins/Android/googlemobileads-unity.aar が含まれてなければ追加
multidex系を入れたい場合は
<androidPackage spec="androidx.multidex:multidex:2.0.1"> <androidSdkPackageIds> <androidSdkPackageId>extra-google-m2repository</androidSdkPackageId> </androidSdkPackageIds> <repositories> <repository>https://maven.google.com</repository> </repositories> </androidPackage>
Gradle failed to fetch dependencies.エラーが出る場合
ProjectSettings/AndroidResolverDependencies.xml を見てみて、以下のようにcom.android.supportとandroidxで同じライブラリが被ってる箇所があると起こる。
com.android.support:appcompat-v7:27.1.1 androidx.appcompat:appcompat:1.1.0
PlayServicesResolverが1.2.64.0などと古いとcom.android.support系のライブラリが入っていてunityアプリでandroidxを使うとこのエラーが起こる。PlayServicesResolverを1.2.132.0などに上げるとcom.android.support系は除外されるようなので、上げればよい。
iosの場合
iosPodの属性
<iosPod name="Google-Mobile-Ads-SDK" version="~> 7.0" bitcodeEnabled="true" minTargetSdk="6.0"> <sources> <source>https://github.com/CocoaPods/Specs</source> </sources> <iosPod>
iosプロジェクトのPodfileのファイルにフォーマットを変えて出力される
source 'https://github.com/CocoaPods/Specs.git' source 'https://github.com/CocoaPods/Specs' platform :ios, '9.0' target 'Unity-iPhone' do pod 'Google-Mobile-Ads-SDK', '~> 7.0' end
処理csは以下の通り、 https://github.com/googlesamples/unity-jar-resolver/blob/master/source/IOSResolver/src/IOSResolver.cs