NoSuchMethodException на Android P на Facebook Скрыть библиотеку

NoSuchMethodException возникает при использовании библиотеки Facebook Conceal на устройстве Android P.

Исключение выдается при вызове метода init класса SoLoader:

SoLoader.init(this, false);

Трассировка стека ошибок:

java.lang.NoSuchMethodException: nativeLoad [class java.lang.String, class java.lang.ClassLoader, class java.lang.String]
at java.lang.Class.getMethod(Class.java:2068)
at java.lang.Class.getDeclaredMethod(Class.java:2047)
at com.facebook.soloader.SoLoader.getNativeLoadRuntimeMethod(SoLoader.java:297)
at com.facebook.soloader.SoLoader.initSoLoader(SoLoader.java:249)
at com.facebook.soloader.SoLoader.initImpl(SoLoader.java:156)
at com.facebook.soloader.SoLoader.init(SoLoader.java:131)
at com.facebook.soloader.SoLoader.init(SoLoader.java:115)
at com.facebook.soloader.SoLoader.init(SoLoader.java:142)

В репозитории библиотеки есть открытый вопрос: https://github.com/facebookarchive/conceal/issues/197

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
88
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема связана с зависимостью Soloader, которая является частью библиотеки Conceal. Чтобы решить проблему, вам необходимо удалить зависимость Soloader из библиотеки Conceal, применить это исправление к версии Soloader 0.4.1, собрать из него aar и добавить его как отдельную независимую зависимость. Вы не можете использовать более высокие версии Soloader, поскольку они несовместимы с библиотекой Conceal.

  • Обновленный aar-файл Conceal доступен по этой ссылке.
  • Обновленный aar-файл Soloader доступен по этой ссылке.

Вам необходимо сохранить файл aar в папке /libs проекта Android, а файл build.gradle должен содержать следующее:

implementation(name: 'com.facebook.conceal-2.0.2-edited', ext: 'aar')
implementation(name: 'com.facebook.soloader-0.4.1.1', ext: 'aar')

Действия по удалению зависимости Soloader от Conceal:

  1. Загрузите AAR-файл библиотеки Conceal из Maven Central.

  2. Извлеките содержимое файла AAR. Для этого вы можете использовать любой инструмент для извлечения ZIP:

    разархивировать скрыть-2.0.2.aar -d скрыть_извлеченный

  3. Удалите все файлы Soloader:

    zip -d скрыть_extracted/classes.jar "com/facebook/soloader/"*

  4. Переупакуйте измененный файл AAR:

    jar cvf com.facebook.conceal-2.0.2-edited.aar -C скрыть_извлеченный .

Вместо того, чтобы вручную изменять файл aar, просто разветвляя репозиторий Github, альтернативой должно быть исправление зависимости и последующее использование его через Jitpack.io. И другие, у которых возникнет такая же проблема, также смогут использовать ваш репозиторий.

Robert 06.06.2024 21:46

@ Роберт, это была моя первая попытка, но мне это не удалось. Поэтому разместил только этот ручной процесс.

Ayaz Alifov 06.06.2024 21:50

Другие вопросы по теме