NoClassDefFoundError после миграции на Android API 28 - PullRequest
1 голос
/ 27 мая 2019

Я знаю, подобные вопросы задавались, но я думаю, у меня другая ситуация. Пожалуйста, не удаляйте.

Я начал получать ошибку NoClassDefFoundError после перехода на API 28, как и многие другие. Я видел, что другие сталкивались с этой проблемой, потому что Google устарел в классах org.apache, которые требовали изменения манифеста, но я не использую классы apache в своем проекте.

Что делает исследование трудным, так это то, что в трассировке стека нет пользовательских классов, и даже не ясно, какой класс не был найден. Хуже всего то, что я не могу воспроизвести ошибку в эмуляторе или на реальном устройстве, и могу видеть ее только в отчетах Google Play Store, которые показывают, что все сбои произошли на устройствах Android 9.

У меня есть два вопроса по этому поводу:

  • Означает ли тот факт, что в трассировке стека нет пользовательских классов, это внутренняя проблема Google, и я не могу ее исправить?
  • Как я могу изменить свой проект, чтобы получить больше информации, например, чтобы увидеть, какой класс не был найден?

Я думаю, что на несвязанной ноте обслуживание новых версий Android становится очень трудным, а их поддержка просто не существует, поэтому stackoverflow - моя последняя надежда.

java.lang.NoClassDefFoundError: 
  at com.google.android.a.a.m.d (m.java:266)
  at com.google.android.a.a.m.a (m.java:113)
  at com.google.android.a.a.g.a (g.java:206)
  at com.google.android.a.a.g.a (g.java:166)
  at com.google.android.a.a.e$a$2.run (e.java:242)
  at android.os.Handler.handleCallback (Handler.java:873)
  at android.os.Handler.dispatchMessage (Handler.java:99)
  at android.os.Looper.loop (Looper.java:214)
  at android.os.HandlerThread.run (HandlerThread.java:65)
Caused by: java.lang.ClassNotFoundException: 
  at dalvik.system.BaseDexClassLoader.findClass (BaseDexClassLoader.java:134)
  at java.lang.ClassLoader.loadClass (ClassLoader.java:379)
  at java.lang.ClassLoader.loadClass (ClassLoader.java:312)
  at com.google.android.a.a.m.d (m.java:266)
  at com.google.android.a.a.m.a (m.java:113)
  at com.google.android.a.a.g.a (g.java:206)
  at com.google.android.a.a.g.a (g.java:166)
  at com.google.android.a.a.e$a$2.run (e.java:242)
  at android.os.Handler.handleCallback (Handler.java:873)
  at android.os.Handler.dispatchMessage (Handler.java:99)
  at android.os.Looper.loop (Looper.java:214)
  at android.os.HandlerThread.run (HandlerThread.java:65)

Ниже приведены также все зависимости, которые я использую в этом проекте:

dependencies {
    implementation fileTree(include: ['*.aar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support:support-v4:28.0.0'
    implementation 'com.android.support:customtabs:28.0.0'
    implementation 'com.android.support:animated-vector-drawable:28.0.0'
    implementation 'com.android.support:mediarouter-v7:28.0.0'
    implementation 'com.android.support:recyclerview-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.0'
    implementation 'com.android.support:design:28.0.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation 'com.google.android.gms:play-services-vision:15.0.1'
    implementation 'com.android.support:multidex:1.0.3'
    implementation 'com.google.android.gms:play-services-ads:15.0.1'
    implementation 'com.google.android.gms:play-services-drive:15.0.1'
    implementation 'com.google.android.gms:play-services-auth:15.0.1'
    implementation 'com.android.support:cardview-v7:28.0.0'
    implementation 'com.google.code.gson:gson:2.8.0'
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.google.android.gms:play-services-wearable:15.0.1'
    implementation 'com.google.android.gms:play-services-tasks:15.0.1'
    implementation files('libs/accessory-v2.5.3.jar')
    implementation files('libs/sdk-v1.0.0.jar')
    implementation files('libs/lvl.aar')

}

Это проект Kotlin, и версия Kotlin 1.3.10

Обновление: Перекомпилировал тот же код с API 27, снова разместил приложение в Play Store и с тех пор не видел сбоев, так что он определенно специфичен для API 28.

1 Ответ

0 голосов
/ 07 июня 2019

Тайна разгадана.В конце концов, это было связано с классами org.apache, и я уверен, что это создаст скрытую проблему для многих людей, переходящих на API 28.

Хотя мой проект не имеет никакой зависимости от классов Apache,Собственный API Google (библиотека лицензирования в моем случае) действительно имеет такую ​​зависимость.

Так что, даже если вы не используете Apache в своем проекте напрямую, вы никогда не узнаете, что находится в зависимостях, и поэтому у вас всегда должно бытьстрока ниже в теге приложения вашего манифеста при работе с API 28:

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

Наконец, так как Google Play Store проделал паршивую работу по созданию значимой трассировки стека, мне пришлось добавить ACRA код бета-кода приложения и попросить пользователей отправить мне отчет о сбое.К счастью, у меня был один пользователь, который согласился помочь с этим.Вот что я получил по электронной почте.

Мое мнение о качестве платформы Android ухудшается с каждой новой версией, которую они выпускают.

java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/client/utils/URLEncodedUtils;
at com.google.android.vending.licensing.ServerManagedPolicy.decodeExtras(ServerManagedPolicy.java:3)
at com.google.android.vending.licensing.ServerManagedPolicy.processServerResponse(ServerManagedPolicy.java:3)
at com.google.android.vending.licensing.LicenseValidator.handleResponse(LicenseValidator.java:1)
at com.google.android.vending.licensing.LicenseValidator.verify(LicenseValidator.java:37)
at com.google.android.vending.licensing.LicenseChecker$ResultListener$2.run(LicenseChecker.java:4)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:214)
at android.os.HandlerThread.run(HandlerThread.java:65)
Caused by: java.lang.ClassNotFoundException: Didn't find class "org.apache.http.client.utils.URLEncodedUtils" on path: DexPathList[[zip file "/data/app/info.gryb.gacw-buYW6A5hesJP-wfcU6nnVg==/base.apk"],nativeLibraryDirectories=[/data/app/info.gryb.gacw-buYW6A5hesJP-wfcU6nnVg==/lib/arm64, /system/lib64, /system/vendor/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
... 9 more
java.lang.ClassNotFoundException: Didn't find class "org.apache.http.client.utils.URLEncodedUtils" on path: DexPathList[[zip file "/data/app/info.gryb.gacw-buYW6A5hesJP-wfcU6nnVg==/base.apk"],nativeLibraryDirectories=[/data/app/info.gryb.gacw-buYW6A5hesJP-wfcU6nnVg==/lib/arm64, /system/lib64, /system/vendor/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at com.google.android.vending.licensing.ServerManagedPolicy.decodeExtras(ServerManagedPolicy.java:3)
at com.google.android.vending.licensing.ServerManagedPolicy.processServerResponse(ServerManagedPolicy.java:3)
at com.google.android.vending.licensing.LicenseValidator.handleResponse(LicenseValidator.java:1)
at com.google.android.vending.licensing.LicenseValidator.verify(LicenseValidator.java:37)
at com.google.android.vending.licensing.LicenseChecker$ResultListener$2.run(LicenseChecker.java:4)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:214)
at android.os.HandlerThread.run(HandlerThread.java:65)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...