facebook twitter hatena line google mixi email

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

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
("java.lang.ClassNotFoundException: com.google.unity.ads.UnityAdListener"などgoogle系ライブラリが読み込めない場合)
(Resolving Android Dependenciesのloadingが走らない場合)
行99: 行99:
  
 
===Resolving Android Dependenciesのloadingが走らない場合===
 
===Resolving Android Dependenciesのloadingが走らない場合===
Android/BuildSettingのBuild/CustomGradleTemplateをoffにしてAssets/Plugins/Android/mainTemplate.gradleを削除するとよいかも。
+
Android/BuildSettingのBuild/CustomGradleTemplateをoffにしてAssets/Plugins/Android/mainTemplate.gradleを一旦削除するとよいかも。
  
 
===gradlewの実行===
 
===gradlewの実行===

2019年12月3日 (火) 14:16時点における版

準備

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

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>

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