「Unity/GoogleMobileSDK/ライブラリ自動読み込み」の版間の差分
| (同じ利用者による、間の34版が非表示) | |||
| 行14: | 行14: | ||
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> | ||
| 行41: | 行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
