「Unity/GoogleMobileSDK/ライブラリ自動読み込み」の版間の差分
(ページの作成:「androidでのmavenやiosでのcocoapodsなどでライブラリを呼びたい場合などに使用。 以下のようにandroidであればpackageurlを変更し、ios...」) |
|||
(同じ利用者による、間の42版が非表示) | |||
行1: | 行1: | ||
+ | ==準備== | ||
+ | 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などでライブラリを呼びたい場合などに使用。 | 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> | <dependencies> | ||
行28: | 行47: | ||
コメント付きは以下参照 | コメント付きは以下参照 | ||
https://github.com/googlesamples/unity-jar-resolver/blob/master/sample/Assets/PlayServicesResolver/Editor/SampleDependencies.xml | https://github.com/googlesamples/unity-jar-resolver/blob/master/sample/Assets/PlayServicesResolver/Editor/SampleDependencies.xml | ||
+ | |||
+ | ==カスタムで自動読込したい場合== | ||
+ | okhttp3を入れる例 | ||
+ | (できなかったので、未完成) | ||
+ | <pre> | ||
+ | <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> | ||
+ | </pre> | ||
+ | |||
+ | 以下にある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, | ||
+ | Androidの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系は除外されるようなので、上げればよい。 | ||
+ | |||
+ | 処理が止まる場合はTempディレクトリなどを一旦消して再起動など。 | ||
+ | |||
+ | ==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 |
2020年1月27日 (月) 11:19時点における最新版
目次
準備
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,
Androidの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系は除外されるようなので、上げればよい。
処理が止まる場合はTempディレクトリなどを一旦消して再起動など。
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