facebook twitter hatena line email

「Unity/GoogleMobileSDK/ライブラリ自動読み込み」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
 
(同じ利用者による、間の21版が非表示)
行86: 行86:
 
  ls ~/.gradle/caches/modules-2/files-2.1/
 
  ls ~/.gradle/caches/modules-2/files-2.1/
 
  ls ~/.gradle/caches/transforms-1/files-1.1/
 
  ls ~/.gradle/caches/transforms-1/files-1.1/
 +
ls ~/.gradle/caches/modules-2/metadata-2.69/descriptors/
  
==build.gradleへの出力==
+
===build.gradleへの出力===
 
Assets/PlayService/Android Resolve/Force Resolveすると
 
Assets/PlayService/Android Resolve/Force Resolveすると
 
build-systemがgradleの場合 Assets/Plugins/Android/mainTemplate.gradleへ出力される
 
build-systemがgradleの場合 Assets/Plugins/Android/mainTemplate.gradleへ出力される
行95: 行96:
 
mainTemplate.gradleへ出力されずにPlugins/Androidの下にDLされるパターンもあった・・・。
 
mainTemplate.gradleへ出力されずにPlugins/Androidの下にDLされるパターンもあった・・・。
  
証拠として、Google.JarResolver_v1.2.111.0はPlugin内にsdkがDLされない。v1.2.64と最新のv1.2.130はDKされた。(後で調べる用)
+
証拠として、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の場合==
 
==iosの場合==
行116: 行169:
 
処理csは以下の通り、
 
処理csは以下の通り、
 
https://github.com/googlesamples/unity-jar-resolver/blob/master/source/IOSResolver/src/IOSResolver.cs
 
https://github.com/googlesamples/unity-jar-resolver/blob/master/source/IOSResolver/src/IOSResolver.cs
 
==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
 

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>

コメント付きは以下参照 https://github.com/googlesamples/unity-jar-resolver/blob/master/sample/Assets/PlayServicesResolver/Editor/SampleDependencies.xml

カスタムで自動読込したい場合

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