web-dev-qa-db-ja.com

Android 9パイのクラッシュ(com.google.Android.gms ... ClassNotFoundException)

Unity3DゲームをAndroidで公開していますが、これまでのところうまくいきました。ただし、Android Vitals Dashboardは多くのクラッシュを報告しています。詳細は次のとおりです。

By Android version: Android 9   4500    100.0%

スタックトレース:

Java.lang.Error: FATAL EXCEPTION [Thread-360]
Unity version     : 2017.3.1p3
Device model      : Google Pixel
Device fingerprint: google/sailfish/sailfish:9/PQ2A.190305.002/5240760:user/release-keys
Caused by
  at lt.b (com.google.Android.gms.policy_ads_fdr_dynamite@[email protected]:2)
  at ls.a (com.google.Android.gms.policy_ads_fdr_dynamite@[email protected]:1)
  at lu.a (com.google.Android.gms.policy_ads_fdr_dynamite@[email protected]:18)
  at com.google.Android.gms.ads.internal.util.ar.a (com.google.Android.gms.policy_ads_fdr_dynamite@[email protected]:10)
  at kx.a (com.google.Android.gms.policy_ads_fdr_dynamite@[email protected]:7)
  at kx.run (com.google.Android.gms.policy_ads_fdr_dynamite@[email protected]:2)
Caused by: Java.lang.ClassNotFoundException: 
  at dalvik.system.BaseDexClassLoader.findClass (BaseDexClassLoader.Java:134)
  at Java.lang.ClassLoader.loadClass (ClassLoader.Java:379)
  at ac.loadClass (com.google.Android.gms.dynamite_dynamiteloader@[email protected] (100400-239467275):4)
  at Java.lang.ClassLoader.loadClass (ClassLoader.Java:312)

私のAndroidResolverDependencies.xmlファイル:

<dependencies>
  <packages>
    <package>com.Android.support:customtabs:[26.0.0, 27.2.0[</package>
    <package>com.Android.support:support-v4:[26.0.0, 27.2.0[</package>
    <package>com.google.Android.gms:play-services-ads:17.2.0</package>
    <package>com.google.Android.gms:play-services-analytics:11.8.0</package>
    <package>com.google.Android.gms:play-services-base:[10.2.1, 12.1.0[</package>
    <package>com.google.Android.gms:play-services-location:[10.2.1, 12.1.0[</package>
    <package>com.google.firebase:firebase-messaging:[10.2.1, 12.1.0[</package>
  </packages>
  <files>
    <file>Assets/Plugins/Android/android.Arch.core.common-1.1.0.jar</file>
    <file>Assets/Plugins/Android/android.Arch.core.runtime-1.1.0.aar</file>
    <file>Assets/Plugins/Android/android.Arch.lifecycle.common-1.1.0.jar</file>
    <file>Assets/Plugins/Android/android.Arch.lifecycle.livedata-core-1.1.0.aar</file>
    <file>Assets/Plugins/Android/android.Arch.lifecycle.runtime-1.1.0.aar</file>
    <file>Assets/Plugins/Android/android.Arch.lifecycle.viewmodel-1.1.0.aar</file>
    <file>Assets/Plugins/Android/com.Android.support.customtabs-27.1.1.aar</file>
    <file>Assets/Plugins/Android/com.Android.support.support-annotations-27.1.1.jar</file>
    <file>Assets/Plugins/Android/com.Android.support.support-compat-27.1.1.aar</file>
    <file>Assets/Plugins/Android/com.Android.support.support-core-ui-27.1.1.aar</file>
    <file>Assets/Plugins/Android/com.Android.support.support-core-utils-27.1.1.aar</file>
    <file>Assets/Plugins/Android/com.Android.support.support-fragment-27.1.1.aar</file>
    <file>Assets/Plugins/Android/com.Android.support.support-media-compat-27.1.1.aar</file>
    <file>Assets/Plugins/Android/com.Android.support.support-v4-27.1.1.aar</file>
    <file>Assets/Plugins/Android/com.google.Android.gms.play-services-ads-17.2.0.aar</file>
    <file>Assets/Plugins/Android/com.google.Android.gms.play-services-ads-base-17.2.0.aar</file>
    <file>Assets/Plugins/Android/com.google.Android.gms.play-services-ads-identifier-16.0.0.aar</file>
    <file>Assets/Plugins/Android/com.google.Android.gms.play-services-ads-lite-17.2.0.aar</file>
    <file>Assets/Plugins/Android/com.google.Android.gms.play-services-analytics-16.0.8.aar</file>
    <file>Assets/Plugins/Android/com.google.Android.gms.play-services-analytics-impl-16.0.8.aar</file>
    <file>Assets/Plugins/Android/com.google.Android.gms.play-services-base-16.1.0.aar</file>
    <file>Assets/Plugins/Android/com.google.Android.gms.play-services-basement-16.2.0.aar</file>
    <file>Assets/Plugins/Android/com.google.Android.gms.play-services-gass-17.2.0.aar</file>
    <file>Assets/Plugins/Android/com.google.Android.gms.play-services-location-16.0.0.aar</file>
    <file>Assets/Plugins/Android/com.google.Android.gms.play-services-measurement-base-16.3.0.aar</file>
    <file>Assets/Plugins/Android/com.google.Android.gms.play-services-measurement-sdk-api-16.3.0.aar</file>
    <file>Assets/Plugins/Android/com.google.Android.gms.play-services-places-placereport-16.0.0.aar</file>
    <file>Assets/Plugins/Android/com.google.Android.gms.play-services-stats-16.0.1.aar</file>
    <file>Assets/Plugins/Android/com.google.Android.gms.play-services-tagmanager-v4-impl-16.0.8.aar</file>
    <file>Assets/Plugins/Android/com.google.Android.gms.play-services-tasks-16.0.1.aar</file>
    <file>Assets/Plugins/Android/com.google.auto.value.auto-value-annotations-1.6.jar</file>
    <file>Assets/Plugins/Android/com.google.firebase.firebase-common-16.1.0.aar</file>
    <file>Assets/Plugins/Android/com.google.firebase.firebase-iid-17.1.2.aar</file>
    <file>Assets/Plugins/Android/com.google.firebase.firebase-iid-interop-16.0.1.aar</file>
    <file>Assets/Plugins/Android/com.google.firebase.firebase-measurement-connector-17.0.1.aar</file>
    <file>Assets/Plugins/Android/com.google.firebase.firebase-messaging-17.6.0.aar</file>
  </files>
</dependencies>
Target API level: 28
Minimum API level: 16

Google AdMobのディスカッショングループ で同様のスレッドを見て、以下をAndroidManifest.xmlファイルに追加するよう提案しました。

<uses-library Android:name="org.Apache.http.legacy" Android:required="false" />

しかしながら:

  1. 問題の原因がApache関連のAPIであるかどうかはわかりません。
  2. uses-library宣言により、Google Playのより少数のユーザーが利用できるため、アプリのインストール数が制限されると思います。
14
Eduardo Coelho

のとおり動作の変更:APIレベル28 +をターゲットとするアプリ

Apache HTTPクライアントの廃止

Android 6.0では、Apache HTTPクライアントのサポートを削除しました。Android 9以降、そのライブラリはbootclasspathから削除され、デフォルトです。ApacheHTTPクライアントを引き続き使用するには、Android 9以上をターゲットとするアプリで、AndroidManifest.xml

<uses-library Android:name="org.Apache.http.legacy" Android:required="false"/>

注:Android:required = "false"属性は、最低SDKが23以下のアプリに必要です。 24を超えると、org.Apache.http.legacyライブラリは使用できません。 (これらのデバイスでは、Apache HTTPクラスがbootclasspathで利用可能です。)

ランタイムApacheライブラリを使用する代わりに、アプリはorg.Apache.httpライブラリの独自のバージョンをAPKにバンドルできます。これを行う場合、ランタイムで提供されるクラスとのクラス互換性の問題を回避するために、Jar Jarなどのユーティリティを使用してライブラリを再パッケージする必要があります。

14
Saad Anees