LoginSignup
0
0

More than 1 year has passed since last update.

Unity IAPとGooglePlayBillingのclassが競合してAndroidがビルドできない問題の対策

Posted at

こんにちは。もぐめっとです。

IMG_9766.JPG
実はタキシードを着たことがあります。
だから何?という感じですね。すみません。調子乗りました。

今回は久々にUnityビルドの沼にハマったので解決策を掲示しておきます。

答えを知りたい場合は対策まで飛んじゃってください。

エラー内容

アプリ内課金(In App Purchase)を導入したく、下記のドキュメントを見て導入をすすめてました。

しかし、Unity IAPとplay-unity-pluginsを導入した状態でAndroid用にビルドすると、ひたすらにduplicateなエラーが出力されます。

Execution failed for task ':launcher:checkReleaseDuplicateClasses'.
> 1 exception was raised by workers:
  java.lang.RuntimeException: Duplicate class com.android.billingclient.BuildConfig found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.AccountIdentifiers found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.AcknowledgePurchaseParams found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.AcknowledgePurchaseParams$Builder found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.AcknowledgePurchaseResponseListener found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.BillingClient found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.BillingClient$BillingResponseCode found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.BillingClient$Builder found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.BillingClient$FeatureType found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.BillingClient$SkuType found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.BillingClientImpl found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.BillingClientStateListener found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.BillingFlowParams found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.BillingFlowParams$Builder found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.BillingFlowParams$ProrationMode found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.BillingResult found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.BillingResult$Builder found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.ConsumeParams found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.ConsumeParams$Builder found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.ConsumeResponseListener found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.PriceChangeConfirmationListener found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.PriceChangeFlowParams found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.PriceChangeFlowParams$Builder found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.ProxyBillingActivity found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.Purchase found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.Purchase$PurchaseState found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.Purchase$PurchasesResult found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.PurchaseHistoryRecord found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.PurchaseHistoryResponseListener found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.PurchasesUpdatedListener found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.SkuDetails found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.SkuDetailsParams found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.SkuDetailsParams$Builder found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.SkuDetailsResponseListener found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zza found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzaa found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzab found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzac found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzad found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzae found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzaf found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzag found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzah found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzai found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzaj found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzak found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzal found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzam found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzan found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzao found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzap found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzaq found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzar found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzas found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzat found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzb found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzc found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzd found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zze found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzf found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzg found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzh found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzi found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzj found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzk found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzl found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzm found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzn found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzo found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzp found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzq found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzr found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzs found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzt found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzu found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzv found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzw found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzx found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzy found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.android.billingclient.api.zzz found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.google.android.gms.internal.play_billing.zza found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.google.android.gms.internal.play_billing.zzb found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.google.android.gms.internal.play_billing.zzc found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.google.android.gms.internal.play_billing.zzd found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.google.android.gms.internal.play_billing.zze found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.google.android.gms.internal.play_billing.zzf found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)
  Duplicate class com.google.android.gms.internal.play_billing.zzg found in modules jetified-GooglePlayBilling-runtime.jar (:GooglePlayBilling:) and jetified-billing-3.0.3-runtime.jar (:billing-3.0.3:)

こいつのおかげでandroidがビルドできません。

原因

googleのドキュメントはUnity IAPを手動でいれた前提で進めているのですが、最近はUnityPackageManagerを導入していれる手順になっております。
UnityPackageManagerでいれると ./Library/PackageCacheのファイルを参照してビルドするのですが、この中にあるbilling-3.0.3.aarを抹消してもビルド時にしつこく復活してしまい、結果競合が起こってました。

ビルド後のファイルの様子

$ find . | grep billing-3
./Temp/StagingArea/aar/billing-3.0.3.aar
./Temp/gradleOut/unityLibrary/libs/billing-3.0.3.aar
./Library/PackageCache/com.unity.purchasing@3.1.0/Plugins/UnityPurchasing/Android/billing-3.0.3.aar.meta
./Library/PackageCache/com.unity.purchasing@3.1.0/Plugins/UnityPurchasing/Android/billing-3.0.3.aar

対策

ちなみにissueにも上がっておりますが、Googleの言うことはきくな!GooglePlayBillingは消せ!と言ってる人がいました。

しかし見ず知らずの意見を聞くのも微妙なので、頑張りました。
結果、Library/PackageCacheの中身をPackagesにコピーしてくることで解決しました!

手順は下記を実施するだけです!

$ cp -r ./Library/PackageCache/com.unity.purchasing@* ./Packages
$ rm com.unity.purchasing@3.1.0/Plugins/UnityPurchasing/Android/billing-*

この状態でビルドすると、PackageManagerがレポジトリからではなくローカルの方を参照するようになります。

Packages/packages-lock.json
...
    "com.unity.purchasing": {
-     "version": "3.1.0",
+     "version": "file:com.unity.purchasing@3.1.0", 
      "depth": 0,
-     "source": "registry",
+     "source": "embedded",
      "dependencies": {
        "com.unity.ugui": "1.0.0",
        "com.unity.modules.unityanalytics": "1.0.0",
        "com.unity.modules.unitywebrequest": "1.0.0",
        "com.unity.modules.jsonserialize": "1.0.0",
        "com.unity.modules.androidjni": "1.0.0"
+      }
-      },
-      "url": "https://packages.unity.com"
...

これでduplicateな悩みからはさよならバイバイ!

※ただし、更新とかは手動でやらないといけなくなるので要注意です。

まとめ

Library/PackageCache/com.unity.purchasing@*を./Packagesにコピってくれば解決!

UnityIAP側がGooglePlayBillingをフォローしてくれれば一番いいんですけどね。。悔やまれます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0