Ошибка Android случайно java.яз..NoClassDefFoundError: com.фейсбук.внутренний.Полезность



Я использую последнюю версию Facebook Android SDK и получаю эту ошибку от десятков пользователей в моем приложении remote crash control в моем последнем выпущенном apk. Я искал здесь такую ошибку, но большинство ответов слишком устарели для последнего FB SDK, и в этом случае есть два странных обстоятельства:



A) ошибка, по-видимому, происходит случайным образом. Я не смог воспроизвести его вообще ни на одном из моих устройств.



B) не было никаких изменений в логике FB вообще между этим релизом и предыдущий, и в предыдущем выпуске у меня никогда не было такой ошибки.



Поскольку я не мог найти никакого существенного различия в коде между такими версиями, я думал, что проблема была в чем-то неправильном, что могло произойти с инструментами Android при создании последнего apk, но учитывая тот факт, что тот же самый apk является тем, который я использую, и не смог воспроизвести проблему, и, несмотря на десятки или пользователей затронуты, сотни, использующие тот же apk, не являются, я отбросил также такие гипотеза.



Любые идеи о том, как решить или просто отладить эту вещь, приветствуются.

Дополнительная информация, которая может быть актуальной:





  • все аварии произошли в Android 4.0.3 или старше. самый высокий процент приходится на 2.3.6 с 48% всех аварий.


  • Этот класс фактически экспортируется в APK . Я проверил это, распаковав apk и используя dexdump, чтобы увидеть, что находится внутри классов.Декс. Я не мог ожидать другого, так как это работает. идеально во всех моих устройствах, и если бы класс не был там, его бы не было.



    $ ~ / android-sdks / build-tools/21.1.1 / классы dexdump.dex | grep ' com.фейсбук.внутренний.Полезность$1'
    Дескриптор класса: 'Lcom / facebook / internal / Utility$1;'
    #0: (в Lcom / facebook / internal / Utility$1;)
    #1: (в Lcom / facebook / internal / Utility$1;)
    #2: (в Lcom / facebook / internal / Utility$1;)
    #0: (в Lcom / facebook / internal / Utility$1;)
    #0 : (в Lcom / facebook / internal / Utility$1;)
    #1: (в Lcom / facebook / internal / Utility$1;)
    #2: (в Lcom / facebook / internal / Utility$1;)
    #3 : (в Lcom / facebook / internal / Utility$1;)




  • Похоже, что он не работает после вызова статического метода утилиты из loadAppSettingsAsync, который являетсястатическим методом в том же классе . Итак, если ком.фейсбук.внутренний.Служебный класс не существует или не может существовать загрузили, как это возможно, что ком.фейсбук.внутренний.Полезность.loadAppSettingsAsync выполняется в первую очередь? и если он существует, и он загружен, почему NoClassDefFoundError брошен на com.фейсбук.внутренний.Полезность? Я так чертовски заблудился...



Здесь стек от splunk mint (ранее известный как bugsense), я просто изменил название приложения. Я проследил его с помощью файла карты proguard, но, похоже, он все равно пропустил некоторые номера строк:



java.lang.NoClassDefFoundError: com.facebook.internal.Utility$1
at com.facebook.internal.Utility.void loadAppSettingsAsync(android.content.Context,java.lang.String)(Unknown Source)
at com.facebook.Settings.void sdkInitialize(android.content.Context)(Unknown Source)
at com.facebook.UiLifecycleHelper.<init>(Unknown Source)
at net.iberdroid.androidgames.framework.impl.AndroidGame.void onCreate(android.os.Bundle)(Unknown Source)
at com.marzoa.ruletafree.xmas2012.RuletaAfortunadaGame.void onCreate(android.os.Bundle)(Unknown Source)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1050)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1623)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1675)
at android.app.ActivityThread.access$1500(ActivityThread.java:121)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:943)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3770)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:670)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: com.facebook.internal.Utility$1 in loader dalvik.system.PathClassLoader[/data/app/com.marzoa.ruletafree.xmas2012-2.apk]
at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
... 18 more
738   2  

2 ответов:

Поскольку NoClassDefFoundError возникает в loadAppSettingsAsync при анонимной реализации AsyncTask, похоже, что это та же проблема, что и NoClassDefFoundError - Android 2.3.X

Это ошибка в сервисах google play. (https://code.google.com/p/android/issues/detail?id=81083 )

Попробуйте добавить в свой метод Application#onCreate() следующее, как описано в ответе на упомянутый вопрос.

try {
    Class.forName("android.os.AsyncTask");
}
catch(Throwable ignore) {
    // ignored
}

Во-первых, убедитесь, что вы проверяете правильный класс. Согласно сообщению об ошибке," отсутствующий " класс - com.facebook.internal.loadAppSettingsAsync$1. Обратите внимание на $1!! Это означает, что мы говорим об анонимном внутреннем классе, который объявлен в Utility.loadAppSettingsAsync.

Во-вторых, java.lang.NoClassDefFoundError может иметь ряд причин:

  • Класс может отсутствовать.

  • Класс может присутствовать, но по какой-то причине не загружается.

  • Класс может быть загружаемым, но предыдущая попытка инициализируйте его ... или какой-то зависимый класс ... потерпел неудачу.

Последний случай обычно происходит, если статическая инициализация или блок статического инициализатора создает непроверенное исключение при первом запуске. (Обычно для этого исключения создается сообщение журнала.) После того, как инициализация класса не удалась один раз, класс помечается как сломанный. Это останавливает инициализацию класса и любых других классов, зависящих от него.

Comments

    Ничего не найдено.