Yandex mobile ads sdk android

Содержание
  1. Как диагностировать проблемы интеграции SDK. Опыт команды разработки Yandex Mobile Ads SDK
  2. П одстановка новой реализации SDK в приложение
  3. Д изассемблирование DEX-файлов приложения в smali
  4. П реобразование новой версии SDK в smali
  5. П одмена реализации SDK
  6. А лгоритм подмены реализации SDK в приложении с одним DEX
  7. А лгоритм подмены реализации SDK в приложении с MultiDex
  8. П ересборка приложения c новой версией SDK
  9. Н едостатки
  10. И тоги
  11. yandexmobile / yandex-ads-sdk-android Go PK Goto Github PK
  12. yandex-ads-sdk-android’s Introduction
  13. Contributors
  14. Stargazers
  15. Watchers
  16. Forkers
  17. yandex-ads-sdk-android’s Issues
  18. «No ads available» for mediation demo banner blocks in example
  19. java.lang.NegativeArraySizeException at com.yandex.mobile.ads.network.core.f.a(SourceFile:320)
  20. ConcurrentModificationException at com.yandex.mobile.ads.nativeads.p$1.a(SourceFile:1091)
  21. SecurityException WifiService: Neither user 10113 nor current process has android.permission.ACCESS_WIFI_STATE.
  22. Banner AdSize question
  23. Adview в ViewHolder RecyclerView
  24. Можно ли использовать с нативной рекламой Яндекс Метрику версии 3.1.0?
  25. Не работает с Android 9
  26. Test blockId for an NativeImageAd
  27. Ошибки линта в логах
  28. Memory leak
  29. 400 error code
  30. спасибо, локализировали причину «android.database.sqlite.SQLiteException: table httpauth already exists», проблема будет исправлена в ближайшем обновлении SDK.
  31. Fatal Exception: java.lang.NullPointerException: name == null
  32. ios ad on android
  33. Доступна ли в MapKit кластеризация?
  34. Failed to allocate a 1395484020 byte
  35. Проблемы с навигацией по документации
  36. Memory leak
  37. ANR Executing service ru.mamba.client/com.yandex.metrica.ConfigurationService
  38. Не всегда срабатывают методы слушателя InterstitialEventListener
  39. NativeAdView inheritance
  40. isLoading for NativeAd
  41. Unexpected response code 400
  42. ANR Executing service my.package/com.yandex.metrica.MetricaService
  43. Черный экран вместо рекламы SDK 2.62 Android 4.1.2
  44. NullPointerException at com.yandex.mobile.ads.g.e.e (SourceFile:1082)
  45. Возможно ли вручную хендлить click по Native баннеру?
  46. OutOfMemoryError: java.util.HashMap$HashMapEntry[] of length 1073741824 would overflow at com.yandex.mobile.ads.network.core.f.d (SourceFile:556)
  47. WindowManager$BadTokenException
  48. Не получается подключить к xamarin проекту
  49. android.database.sqlite.SQLiteException
  50. If com.yandex.mobile.ads.AdActivity destroyed when onAdLeftApplication, onInterstitialDismissed is called. But when i press back i can see interstitial.
  51. Пакет для flutter
  52. NPE in NativeLoadListener
  53. Когда будет либа для windows 10 mobile?
  54. java.lang.NegativeArraySizeException
  55. How to disable separated process
  56. Пустой экран при возврате на полноэкранную рекламу
  57. Fatal Exception: java.lang.NullPointerException
  58. RuntimeException: Package manager has died at at com.yandex.mobile.ads.k.a.a(SourceFile:22)
  59. Некорректно определяется область объявления в нативном формате
  60. Не хватает метода unbindAd?
  61. NullPointerException в методе WebViewClassic.loadDataWithBaseURL SDK v. 2.61
  62. Proguard
  63. java.util.concurrent.RejectedExecutionException
  64. java.lang.NoClassDefFoundError: com/yandex/mobile/ads/r (wrong name: com/yandex/mobile/ads/R)
  65. Enabling a feedback button in NativeBannerView
  66. Ad Activity into the AndroidManifest.xml is integrated wrong
  67. Recommend Projects
  68. React
  69. Vue.js
  70. Typescript
  71. TensorFlow
  72. Django
  73. Laravel
  74. Recommend Topics
  75. javascript
  76. server
  77. Machine learning
  78. Visualization
  79. Recently View Projects
  80. yandex-ads-sdk-android
  81. bip39
  82. Awesome-Profile-README-templates
  83. buster95
  84. fragile

Как диагностировать проблемы интеграции SDK. Опыт команды разработки Yandex Mobile Ads SDK

Всем привет! Меня зовут Дмитрий Фисько, я разрабатываю Yandex Mobile Ads SDK. Наша библиотека предназначена для монетизации мобильных приложений на платформе Android и iOS. Сегодня я хочу рассказать вам о том, как мы упростили разбор сложных ошибок интеграции SDK в Android-приложения. Возможно, наш опыт пригодится и вам.

Наши пользователи — разработчики мобильных приложений — не всегда читают документацию, так что иногда придумывают заковыристые способы использования SDK. Неправильная интеграция может снизить эффективность размещения рекламных объявлений, а значит, уменьшить доход разработчика. Чтобы помочь разработчикам лучше монетизировать приложения, мы создали превентивную систему мониторингов, которая анализирует показатели мобильного приложения. Если по мониторингам мы узнаём о проблеме, то связываемся с разработчиками и помогаем им найти источник проблемы и решить её.

К сожалению, не все ошибки интеграции SDK можно определить по мониторингам. Если такая ситуация возникает, мы обращаемся к партнёру, чтобы уточнить детали интеграции. Затем мы стараемся определить причину проблем и помочь их решить. Если даже этой информации недостаточно, чтобы определить причину ошибок, мы запрашиваем у партнёра разрешение на реверс-инжиниринг приложения. После разрешения мы начинаем смотреть на работу рекламного SDK в приложении как на чёрный ящик. Просматриваем сетевую активность через proxy, проверяем отображение рекламных view через Layout Inspector и др.

Просматривать сетевую активность приложения начиная с Android 7.0 проблематично, так как система по умолчанию не доверяет сертификатам, установленным пользователем. Установка сертификата необходима для просмотра SSL-трафика приложения через proxy. Решит проблему либо запуск приложения на версии Android младше 7.0, либо добавление network_security_config в приложение, например через Apktool. Просмотреть отображение рекламных view можно через утилиту Layout Inspector, запустив приложение на эмуляторе или на устройстве. При этом необходимо модифицировать файл AndroidManifest.xml, добавив через Apktool атрибут debuggable=true.

Если метода чёрного ящика оказалось недостаточно и воспроизвести проблему не удалось, можно посмотреть на логику работы приложения. Для этого можно воспользоваться утилитами для декомпиляции APK, такими как JADX, Bytecode Viewer. Но зачастую такой подход требует слишком много времени и не всегда приводит к результату. Поэтому, чтобы быстрее понимать, как приложение использует SDK изнутри, мы сделали скрипт для подстановки новой реализации SDK в уже собранное приложение.

П одстановка новой реализации SDK в приложение

Подмена кода SDK позволяет через классы изменённой версии SDK внедрить в приложение произвольный код и, например, включить режим дополнительного логирования. Алгоритм работы следующий. Скрипт:

  1. дизассемблирует DEX-файлы приложения в smali;
  2. преобразует JAR-файл новой версии SDK в smali;
  3. подменяет реализацию smali-файлов SDK в smali-файлах приложения;
  4. пересобирает приложение c новой версией SDK.

Д изассемблирование DEX-файлов приложения в smali

Нужно декомпозировать приложение, разделить его на более мелкие единицы, чтобы появилась возможность изменять код классов SDK, не меняя при этом код приложения. Как подступиться к собранному приложению? Дизассемблируем DEX в smali-файлы.

В Android приложение хранит код в DEX-файлах. Извлечь их из приложения можно через утилиту unzip, так как APK — обычный архив с структурированным содержимым. У DEX-файлов бинарный формат для более плотной по сравнению с JAR упаковки кода. Из-за бинарности DEX нечеловекочитаем, поэтому изменять сам DEX нерационально. Первое, что приходит на ум, — декомпилировать DEX в Java. Такое преобразование возможно, но оно нетривиально и происходит с потерями работоспособности кода. Поэтому воспользуемся трансляцией в smali-код. Преобразование в smali позволяет точно передать инструкции из DEX в человекочитаемом виде с возможностью последующей конвертации в работоспособный код.

Вызов утилиты smali преобразует DEX в набор классов в smali-коде. При этом исходное расположении классов по подпакетам сохраняется.

П реобразование новой версии SDK в smali

Подготовим версию SDK на замену. Чтобы гарантировать воспроизводимость проблемы, версию SDK с включённым логированием создадим на основе той же версии, которая уже интегрирована в приложение. Один из простых способов узнать подключённую версию Yandex Mobile Ads SDK в приложении — просмотреть содержимое метода в классе MobileAds.getLibraryVersion() через Apk Analizer в Android Studio. Узнав используемую версию рекламного SDK, мы переключаемся на ветку данного релиза и собираем версию библиотеки с дополнительным логированием. В результате получаем AAR-файл. Он содержит ресурсы и код библиотеки. Нас в AAR-файле интересует лишь код в JAR-файле, так как в нашем SDK нет внешних ресурсов: все ресурсы заинлайнены непосредственно в код или приходят с бэкенда. Отсутствие файлов с ресурсами упрощает интеграцию SDK в IDE без поддержки современных систем сборки.

Чтобы сменить версию SDK в приложении на новую, приведём AAR к тому же состоянию, что и дизассемблированное приложение, т. е. из AAR получим набор smali-файлов. Преобразование происходит по цепочке: AAR → JAR → DEX → SMALI:

  1. из AAR с помощью утилиты unzip извлекаем JAR с кодом;
  2. JAR преобразуем в DEX через утилиту dxdump из Android SDK Tools;
  3. файлы в smali-коде получаем с помощью утилиты smali с DEX-файлом в качестве параметра.

П одмена реализации SDK

Получив smali-файлы приложения и SDK с логами, заменяем реализацию SDK новой. После чего пересобираем приложение. При трансляции в smali получаемые классы сохраняют расположение по подпакетам. Поэтому, если известен пакет, где лежат классы SDK, легко отличить класс библиотеки от классов приложения. Классы SDK могут быть распределены по нескольким DEX. Так что алгоритм, по которому подменяется реализация SDK, различается для приложения с одним DEX-файлом или несколькими.

А лгоритм подмены реализации SDK в приложении с одним DEX

В приложении с одним DEX мы просто скопируем новые smali-классы SDK поверх всех классов приложения и сгенерируем модифицированный DEX. Сгенерировать DEX-файл можно с помощью утилиты baksmali. На вход утилите подаётся директория с разбитыми по пакетам файлами классов в smali-коде. Пропустив через baksmali объединённые smali-файлы приложения и нового SDK, получаем модифицированный DEX-файл с изменённой логикой SDK.

А лгоритм подмены реализации SDK в приложении с MultiDex

Для приложения с MultiDex добавим отдельным DEX новый код SDK и удалим предыдущую версию SDK из остальных DEX-файлов приложения. Добавление новой версии SDK отдельным DEX позволит обойти ограничение количества методов в формате DEX. MultiDex автоматически догрузит добавленный DEX-файл с кодом SDK при его корректном наименовании. MultiDex ищет DEX-файлы по очереди, используя индекс в конце файла: сначала dex1, затем dex2 — и т. д. Если назвать файл c инкрементированным индексом, то MultiDex автоматически догрузит его в виртуальную машину. Таким образом через baksmali cгенерируем DEX-файлы на основе ранее полученных smali-файлов приложения, но с удалёнными классами старой версии SDK. А также соберём дополнительный DEX-файл с изменённой версией SDK, инкрементируя индекс в названии DEX-файла.

Читайте также:  Видеорегистратор с юсб кабелем для андроид с контролем движения

П ересборка приложения c новой версией SDK

Мы получили DEX-файлы приложения с изменённой версией SDK. Дело за малым: заменим DEX-файлы в первоначально распакованном APK-файле приложения модифицированными DEX-файлами. И вызовом команды zip получим финальную версию APK, которую осталось лишь подписать. Подпишем отладочным ключом через apksigner, чтобы приложение можно было установить на устройство. Приложение с изменённой логикой SDK готово.

Н едостатки

Алгоритм работает для большинства случаев, но иногда подменить реализацию SDK в приложении не получится. Причины этого:

  1. Обфускация ProGuard. Правила в consumer-файле библиотеки не дают ProGuard перемещать классы SDK. Но если разработчик отменит эти инструкции, то часть классов библиотеки может изменить свой пакет. В этом случае алгоритм не сработает, так как скрипт не найдёт расположение классов старого SDK.
  2. Ограничение формата DEX. Если весь код в приложении хранится в одном DEX-файле, который почти полностью исчерпал лимит используемых методов. При замене в приложении версии SDK версией с дополнительным логированием количество методов возрастёт. Лимит будет превышен. По формату DEX ограничение равно 2^16.
  3. Защита приложения от изменения. В приложение встроены механизмы борьбы с модификацией. Например, через валидацию подписи приложения. Изменяя APK, мы, соответственно, изменяем его подпись. При старте приложения оно сверяет подпись с эталонной и выбрасывает исключение. Особенно сложно убрать эту проверку, если она вынесена в нативную часть.

И тоги

Шаги, описанные в статье, мы автоматизировали простым bash-скриптом. У скрипта есть недостатки, однако он сильно ускоряет разбор сложных проблем при интеграции SDK в приложения партнёров. Хотя, мы редко применяем этот подход, так как зачастую находим решение на более ранних стадиях.

Из преобразования в smali можно извлечь дополнительную пользу: smali-файлы позволяют отлаживать приложение без исходников. Для запуска отладки нужно на основе smali-файлов приложения сгенерировать проект в Android Studio и приаттачить дебаггер к интересующему процессу. Подробнее написано в этой статье.

Источник

yandexmobile / yandex-ads-sdk-android Go PK Goto Github PK

yandex-ads-sdk-android’s Introduction

Yandex Advertising Network Mobile

This package contains Yandex Advertising Network Mobile SDK and source code of samples of SDK usage.

Documentation could be found at the [official website] DOCUMENTATION

EULA is available at [EULA website] LICENSE

Quick start in Android Studio

1. Running Android Studio 1.0 or higher

2. Import one of example projects:

Mediation through AdMob

Mediation through MoPub

3. Build and run.

For the integration of YandexMobileAds SDK need:

1. compile YandexMobileAds SDK:

2. compile AppMetrica SDK:

Contributors

Stargazers

Watchers

Forkers

yandex-ads-sdk-android’s Issues

«No ads available» for mediation demo banner blocks in example

Lines 26 to 31 in fabbd27

private static final String ADFOX_BLOCK_ID = » adf-279013/966631 » ;
private static final String ADMOB_BLOCK_ID = » adf-279013/975926 » ;
private static final String FACEBOOK_BLOCK_ID = » adf-279013/975929 » ;
private static final String MOPUB_BLOCK_ID = » adf-279013/975927 » ;
private static final String MYTARGET_BLOCK_ID = » adf-279013/975928 » ;
private static final String STARTAPP_BLOCK_ID = » adf-279013/1004807 » ;

Only ADFOX_BLOCK_ID works properly, attempts to use any other always end with error Ad request completed successfully, but there are no ads available . Does it should work like this? I think demo blocks should always show us something so that we can test their rendering and behavior.

java.lang.NegativeArraySizeException at com.yandex.mobile.ads.network.core.f.a(SourceFile:320)

Произошло на андроиде 4.4.

Сборка с версией:

java.lang.NegativeArraySizeException: -1348009530
at com.yandex.mobile.ads.network.core.f.a(SourceFile:320)
at com.yandex.mobile.ads.network.core.f.c(SourceFile:538)
at com.yandex.mobile.ads.network.core.f.d(SourceFile:560)
at com.yandex.mobile.ads.network.core.f$a.a(SourceFile:401)
at com.yandex.mobile.ads.network.core.f.a(SourceFile:154)
at com.yandex.mobile.ads.network.core.d.run(SourceFile:84)

ConcurrentModificationException at com.yandex.mobile.ads.nativeads.p$1.a(SourceFile:1091)

Версии: mobileads:2.61
mobmetricalib:2.77

Стало часто падать приложение: #0. Crashed: main: 0 0 0x0000000000000000
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:787)
at java.util.HashMap$KeyIterator.next(HashMap.java:814)
at com.yandex.mobile.ads.nativeads.p$1.a(SourceFile:1091)
at com.yandex.mobile.ads.ac$1$1.a(SourceFile:95)
at com.yandex.mobile.ads.ac$1$1.a(SourceFile:88)
at com.yandex.mobile.ads.g.a.b.g$3.run(SourceFile:477)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:168)
at android.app.ActivityThread.main(ActivityThread.java:5885)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687)

Полные логи можно посмотреть в приложенном файле.
Версии ОС: от 4 до 7, устройства разных брендов.
crash_logs.txt

Как поступить с этой проблемой? Спасибо за помощь!

SecurityException WifiService: Neither user 10113 nor current process has android.permission.ACCESS_WIFI_STATE.

I had five crashes on HTC Desire 616 dual sim with Android 4.2.2. Logs from fabric.io:

Version of libraries:

Подскажите пожалуйста по работе с баннерами.

В аккаунте установлены разрешенные размеры для баннера: 320×100, 320×50.

Какой размер баннера нужно указать программно, чтобы показывались все разрешенные форматы: 320×100, 320×50?

Adview в ViewHolder RecyclerView

При использовании AdView в RecyclerView с разными BlockId и параметрами при переиспользовании вьюхи вылетает ошибка Block ID can’t be set twice. Как корректно переиспользовать AdView в recyclerview?

Можно ли использовать с нативной рекламой Яндекс Метрику версии 3.1.0?

Добрый день.
Мы используем библиотеку com.yandex.android:mobileads:2.72 для показа нативной рекламы.
У вас в документации приведен пример, что Яндекс Метрика должна быть com.yandex.android:mobmetricalib:2.73 или выше.

Можем ли мы использовать Яндекс Метрику com.yandex.android:mobmetricalib:3.1.0 и будут ли засчитаны показы рекламы, если мы будем использовать данную версию Яндекс Метрики?

Не работает с Android 9

implementation ‘com.yandex.android:mobmetricalib:3.2.2’
implementation ‘com.yandex.android:mobileads:2.72’

Помогает добавление в AndroidManifest.xml

Test blockId for an NativeImageAd

Hi, I’m implementing support of the nativeImageAd in my app. Now I’d like to test it’s appearance, but there are only two test blockId: one for a ContentAd and another for a AppInstallAd.
How can I check appearance of an nativeImageAd banner?
Thanks in advance!

Ошибки линта в логах

Постоянно вижу при сборке ошибки линта, это нормально? Как исправить?

Версии либ:
com.yandex.android:mobileads:2.100
com.yandex.ads.mediation:mobileads-mytarget:1.3.0
Версия AGP: 3.4.2
Версия Lint: com.android.tools.lint:lint:26.4.2

Could not load custom lint check jar file /gradle/caches/transforms-2/files-2.1/ec0890a7c6a3950f89d2d7c53b60969f/jars/lint.jar
java.lang.ClassNotFoundException: com.yandex.mobileads.lint.mobileads.MobileAdsIssueRegistryTest
at com.intellij.util.lang.UrlClassLoader.findClass(UrlClassLoader.java:241)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at com.android.tools.lint.client.api.JarFileIssueRegistry$Factory.loadIssueRegistry(JarFileIssueRegistry.kt:194)
at com.android.tools.lint.client.api.JarFileIssueRegistry$Factory.get(JarFileIssueRegistry.kt:152)
at com.android.tools.lint.client.api.JarFileIssueRegistry$Factory.get(JarFileIssueRegistry.kt:116)
at com.android.tools.lint.client.api.LintDriver.registerCustomDetectors(LintDriver.kt:464)
at com.android.tools.lint.client.api.LintDriver.analyze(LintDriver.kt:384)
at com.android.tools.lint.LintCliClient.run(LintCliClient.java:237)
at com.android.tools.lint.gradle.LintGradleClient.run(LintGradleClient.java:243)
at com.android.tools.lint.gradle.LintGradleExecution.runLint(LintGradleExecution.java:301)
at com.android.tools.lint.gradle.LintGradleExecution.lintSingleVariant(LintGradleExecution.java:385)
at com.android.tools.lint.gradle.LintGradleExecution.analyze(LintGradleExecution.java:91)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.android.tools.lint.gradle.api.ReflectiveLintRunner.runLint(ReflectiveLintRunner.kt:38)
at com.android.build.gradle.tasks.LintBaseTask.runLint(LintBaseTask.java:95)
at com.android.build.gradle.tasks.LintPerVariantTask.lint(LintPerVariantTask.java:57)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:103)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:48)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:41)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:28)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:702)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:669)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$5.run(ExecuteActionsTaskExecuter.java:401)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:390)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:373)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$200(ExecuteActionsTaskExecuter.java:79)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.execute(ExecuteActionsTaskExecuter.java:210)
at org.gradle.internal.execution.steps.ExecuteStep.lambda$execute$1(ExecuteStep.java:33)
at java.util.Optional.orElseGet(Optional.java:267)
at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:33)
at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:26)
at org.gradle.internal.execution.steps.CleanupOutputsStep.execute(CleanupOutputsStep.java:58)
at org.gradle.internal.execution.steps.CleanupOutputsStep.execute(CleanupOutputsStep.java:35)
at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:48)
at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:33)
at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:39)
at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:73)
at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:54)
at org.gradle.internal.execution.steps.CatchExceptionStep.execute(CatchExceptionStep.java:35)
at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:51)
at org.gradle.internal.execution.steps.SnapshotOutputsStep.execute(SnapshotOutputsStep.java:45)
at org.gradle.internal.execution.steps.SnapshotOutputsStep.execute(SnapshotOutputsStep.java:31)
at org.gradle.internal.execution.steps.CacheStep.executeWithoutCache(CacheStep.java:201)
at org.gradle.internal.execution.steps.CacheStep.execute(CacheStep.java:70)
at org.gradle.internal.execution.steps.CacheStep.execute(CacheStep.java:45)
at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:49)
at org.gradle.internal.execution.steps.StoreSnapshotsStep.execute(StoreSnapshotsStep.java:43)
at org.gradle.internal.execution.steps.StoreSnapshotsStep.execute(StoreSnapshotsStep.java:32)
at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:38)
at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:24)
at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:96)
at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$0(SkipUpToDateStep.java:89)
at java.util.Optional.map(Optional.java:215)
at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:54)
at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:38)
at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:77)
at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:37)
at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:36)
at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:26)
at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:90)
at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:48)
at org.gradle.internal.execution.impl.DefaultWorkExecutor.execute(DefaultWorkExecutor.java:33)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:117)
at org.gradle.api.internal.tasks.execution.ResolveBeforeExecutionStateTaskExecuter.execute(ResolveBeforeExecutionStateTaskExecuter.java:75)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:62)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:108)
at org.gradle.api.internal.tasks.execution.ResolveBeforeExecutionOutputsTaskExecuter.execute(ResolveBeforeExecutionOutputsTaskExecuter.java:67)
at org.gradle.api.internal.tasks.execution.StartSnapshotTaskInputsBuildOperationTaskExecuter.execute(StartSnapshotTaskInputsBuildOperationTaskExecuter.java:62)
at org.gradle.api.internal.tasks.execution.ResolveAfterPreviousExecutionStateTaskExecuter.execute(ResolveAfterPreviousExecutionStateTaskExecuter.java:46)
at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:94)
at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:95)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:73)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:49)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:49)
at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:43)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:355)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:343)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:336)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:322)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:134)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:129)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:202)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:193)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:129)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
at java.lang.Thread.run(Thread.java:748)

Memory leak

В библиотеке версии 2.50 (и предыдущих версиях) присутствует утечка Activity — объект NativeContentAd имеет ссылку на NativeContentAdView , а View , в свою очередь, на Activity .

Дамп утечки полученный с помощью LeakCanary:

400 error code

После создания и добавления блоков прошло около 30 минут. Тестовая реклама показывается, действительная — нет. Используется баннер и полноэкранная.

Android sdk 29
implementation ‘com.yandex.android:mobmetricalib:3.8.0’
implementation ‘com.yandex.android:mobileads:2.110’

2019-11-03 16:32:04.147 6541-6630/com.sunraylabs.socialtags W/Gralloc3: mapper 3.x is not supported 2019-11-03 16:32:04.146 6541-6541/com.sunraylabs.socialtags W/RenderThread: type=1400 audit(0.0:9105): avc: denied < read >for name=»u:object_r:vendor_default_prop:s0″ dev=»tmpfs» ino=17561 scontext=u:r:untrusted_app:s0:c103,c258,c512,c768 tcontext=u:object_r:vendor_default_prop:s0 tclass=file permissive=0 2019-11-03 16:32:04.150 6541-6630/com.sunraylabs.socialtags E/libc: Access denied finding property «vendor.gralloc.disable_ahardware_buffer» 2019-11-03 16:32:04.170 6541-6541/com.sunraylabs.socialtags D/SocialHashTags: YANDEX testForceAttempts: 10 2019-11-03 16:32:04.189 6541-6735/com.sunraylabs.socialtags I/AppMetrica: Initializing of Metrica, Release type, Version 3.8.0, API Level 85, Dated 08.10.2019. 2019-11-03 16:32:04.194 6541-6541/com.sunraylabs.socialtags D/SocialHashTags: YANDEX testForceAttempts: 10 2019-11-03 16:32:04.206 6541-6735/com.sunraylabs.socialtags I/AppMetrica: Activate reporter with APIKey 334a75fn-xxxx-xxxx-xxxx-xxxxxxxx1d86 2019-11-03 16:32:04.239 6541-6541/com.sunraylabs.socialtags E/initMoPub: onInitializationFinished() 2019-11-03 16:32:04.295 6541-6768/com.sunraylabs.socialtags D/Volley: [13213] qw.a: Changing log tag to Yandex Mobile Ads 2019-11-03 16:32:04.412 6541-6541/com.sunraylabs.socialtags W/labs.socialtag: Accessing hidden method Lsun/misc/Unsafe;->compareAndSwapObject(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z (greylist, linking, allowed) 2019-11-03 16:32:04.511 6541-6779/com.sunraylabs.socialtags E/Yandex Mobile Ads: [13217] rf.a: Unexpected response code 400 for https://mobile.yandexadexchange.net/v4/ad 2019-11-03 16:32:04.513 6541-6541/com.sunraylabs.socialtags D/SocialHashTags AdsError: AdsError 2019-11-03 16:32:04.515 6541-6541/com.sunraylabs.socialtags D/SocialHashTags: YANDEX testForceAttempts: 9 2019-11-03 16:32:04.590 6541-6541/com.sunraylabs.socialtags W/labs.socialtag: Accessing hidden method Lsun/misc/Unsafe;->compareAndSwapObject(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z (greylist, linking, allowed) 2019-11-03 16:32:04.594 6541-6779/com.sunraylabs.socialtags E/Yandex Mobile Ads: [13217] rf.a: Unexpected response code 400 for https://mobile.yandexadexchange.net/v4/ad 2019-11-03 16:32:04.596 6541-6541/com.sunraylabs.socialtags D/SocialHashTags: YANDEX testForceAttempts: 9 2019-11-03 16:32:04.657 6541-6779/com.sunraylabs.socialtags E/Yandex Mobile Ads: [13217] rf.a: Unexpected response code 400 for https://mobile.yandexadexchange.net/v4/ad 2019-11-03 16:32:04.658 6541-6541/com.sunraylabs.socialtags D/SocialHashTags AdsError: AdsError 2019-11-03 16:32:04.659 6541-6541/com.sunraylabs.socialtags D/SocialHashTags: YANDEX testForceAttempts: 8 2019-11-03 16:32:04.731 6541-6779/com.sunraylabs.socialtags E/Yandex Mobile Ads: [13217] rf.a: Unexpected response code 400 for https://mobile.yandexadexchange.net/v4/ad 2019-11-03 16:32:04.807 6541-6779/com.sunraylabs.socialtags E/Yandex Mobile Ads: [13217] rf.a: Unexpected response code 400 for https://mobile.yandexadexchange.net/v4/ad 2019-11-03 16:32:04.808 6541-6541/com.sunraylabs.socialtags D/SocialHashTags AdsError: AdsError 2019-11-03 16:32:04.809 6541-6541/com.sunraylabs.socialtags D/SocialHashTags: YANDEX testForceAttempts: 7 2019-11-03 16:32:04.969 6541-6779/com.sunraylabs.socialtags E/Yandex Mobile Ads: [13217] rf.a: Unexpected response code 400 for https://mobile.yandexadexchange.net/v4/ad 2019-11-03 16:32:04.969 6541-6541/com.sunraylabs.socialtags D/SocialHashTags AdsError: AdsError 2019-11-03 16:32:04.970 6541-6541/com.sunraylabs.socialtags D/SocialHashTags: YANDEX testForceAttempts: 6 2019-11-03 16:32:05.061 6541-6779/com.sunraylabs.socialtags E/Yandex Mobile Ads: [13217] rf.a: Unexpected response code 400 for https://mobile.yandexadexchange.net/v4/ad 2019-11-03 16:32:05.062 6541-6541/com.sunraylabs.socialtags D/SocialHashTags AdsError: AdsError 2019-11-03 16:32:05.064 6541-6541/com.sunraylabs.socialtags D/SocialHashTags: YANDEX testForceAttempts: 5 2019-11-03 16:32:05.140 6541-6779/com.sunraylabs.socialtags E/Yandex Mobile Ads: [13217] rf.a: Unexpected response code 400 for https://mobile.yandexadexchange.net/v4/ad 2019-11-03 16:32:05.142 6541-6541/com.sunraylabs.socialtags D/SocialHashTags AdsError: AdsError 2019-11-03 16:32:05.143 6541-6541/com.sunraylabs.socialtags D/SocialHashTags: YANDEX testForceAttempts: 4 2019-11-03 16:32:05.255 6541-6779/com.sunraylabs.socialtags E/Yandex Mobile Ads: [13217] rf.a: Unexpected response code 400 for https://mobile.yandexadexchange.net/v4/ad 2019-11-03 16:32:05.256 6541-6541/com.sunraylabs.socialtags D/SocialHashTags AdsError: AdsError 2019-11-03 16:32:05.258 6541-6541/com.sunraylabs.socialtags D/SocialHashTags: YANDEX testForceAttempts: 3 2019-11-03 16:32:05.354 6541-6779/com.sunraylabs.socialtags E/Yandex Mobile Ads: [13217] rf.a: Unexpected response code 400 for https://mobile.yandexadexchange.net/v4/ad 2019-11-03 16:32:05.355 6541-6541/com.sunraylabs.socialtags D/SocialHashTags AdsError: AdsError 2019-11-03 16:32:05.357 6541-6541/com.sunraylabs.socialtags D/SocialHashTags: YANDEX testForceAttempts: 2 2019-11-03 16:32:05.455 6541-6779/com.sunraylabs.socialtags E/Yandex Mobile Ads: [13217] rf.a: Unexpected response code 400 for https://mobile.yandexadexchange.net/v4/ad 2019-11-03 16:32:05.456 6541-6541/com.sunraylabs.socialtags D/SocialHashTags AdsError: AdsError 2019-11-03 16:32:05.457 6541-6541/com.sunraylabs.socialtags D/SocialHashTags: YANDEX testForceAttempts: 1

Читайте также:  Контроллер геймпада для android контроллер геймпада для android

спасибо, локализировали причину «android.database.sqlite.SQLiteException: table httpauth already exists», проблема будет исправлена в ближайшем обновлении SDK.

Здравствуйте, @dmitryfisko , прошу помощи. Получаю такую же ошибку у примерно 2% пользователей. сдк 2.91. Интер не использую, только банер.

Текст ошибки из файрбейс вот такой:
Fatal Exception: android.database.sqlite.SQLiteException
table httpauth already exists (code 1)
android.database.sqlite.SQLiteConnection.nativeExecuteForChangedRowCount (SQLiteConnection.java)
android.database.sqlite.SQLiteConnection.executeForChangedRowCount (SQLiteConnection.java:744)
android.database.sqlite.SQLiteSession.executeForChangedRowCount (SQLiteSession.java:754)
android.database.sqlite.SQLiteStatement.executeUpdateDelete (SQLiteStatement.java:64)
android.database.sqlite.SQLiteDatabase.executeSql (SQLiteDatabase.java:1676)
android.database.sqlite.SQLiteDatabase.execSQL (SQLiteDatabase.java:1605)
org.chromium.android_webview.HttpAuthDatabase$1.run (HttpAuthDatabase.java:1132)

Fatal Exception: java.lang.NullPointerException: name == null

Краш словлен на:
Девайс: MI 8 Explorer Edition
Android: 8.1.0
Версии либ:
com.yandex.ads.mediation:mobileads-mytarget:1.3.0
com.yandex.android:mobileads:2.100
com.yandex.android:mobmetricalib:3.6.4

Fatal Exception: java.lang.NullPointerException: name == null
at java.lang.Thread.setName + 1128(Thread.java:1128)
at java.lang.Thread.init + 411(Thread.java:411)
at java.lang.Thread.(Thread.java:566)
at com.yandex.mobile.ads.impl.dg.newThread + 31(dg.java:31)
at java.util.concurrent.ThreadPoolExecutor$Worker.(ThreadPoolExecutor.java:631)
at java.util.concurrent.ThreadPoolExecutor.addWorker + 945(ThreadPoolExecutor.java:945)
at java.util.concurrent.ThreadPoolExecutor.execute + 1377(ThreadPoolExecutor.java:1377)
at java.util.concurrent.Executors$DelegatedExecutorService.execute + 620(Executors.java:620)
at com.yandex.mobile.ads.impl.km.a + 69(km.java:69)
at com.yandex.mobile.ads.nativeads.t.a + 90(t.java:90)
at com.yandex.mobile.ads.mediation.nativeads.s.a + 54(s.java:54)
at com.yandex.mobile.ads.nativeads.t.a + 83(t.java:83)
at com.yandex.mobile.ads.nativeads.t.a + 38(t.java:38)
at com.yandex.mobile.ads.impl.qa.b + 38(qa.java:38)
at com.yandex.mobile.ads.impl.ot$a.run + 105(ot.java:105)
at android.os.Handler.handleCallback + 2(Handler.java:2)
at android.os.Handler.dispatchMessage + 4(Handler.java:4)
at android.os.Looper.loop + 139(Looper.java:139)
at android.app.ActivityThread.main + 65(ActivityThread.java:65)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run + 11(RuntimeInit.java:11)
at com.android.internal.os.ZygoteInit.main + 335(ZygoteInit.java:335)

ios ad on android

Почему на Android устройстве показывается реклама для iOS?

Доступна ли в MapKit кластеризация?

Failed to allocate a 1395484020 byte

Достаточно редко происходит. Количество разрядов запрошенной памяти слишком большое, столько на устройстве не получить.

Fatal Exception: java.lang.OutOfMemoryError: Failed to allocate a 1395484020 byte allocation with 4194304 free bytes and 234MB until OOM
at com.yandex.mobile.ads.network.core.f.a(SourceFile:320)
at com.yandex.mobile.ads.network.core.f.c(SourceFile:538)
at com.yandex.mobile.ads.network.core.f.d(SourceFile:561)
at com.yandex.mobile.ads.network.core.f$a.a(SourceFile:401)
at com.yandex.mobile.ads.network.core.f.a(SourceFile:154)
at com.yandex.mobile.ads.network.core.d.run(SourceFile:84)

java.lang.OutOfMemoryError: Failed to allocate a 856174776 byte allocation with 4194304 free bytes and 241MB until OOM
at com.yandex.mobile.ads.network.core.f.a(SourceFile:320)
at com.yandex.mobile.ads.network.core.f.c(SourceFile:538)
at com.yandex.mobile.ads.network.core.f.d(SourceFile:560)
at com.yandex.mobile.ads.network.core.f$a.a(SourceFile:401)
at com.yandex.mobile.ads.network.core.f.a(SourceFile:154)
at com.yandex.mobile.ads.network.core.d.run(SourceFile:84)

Проблемы с навигацией по документации

Здравствуйте! Вопрос не по теме, но не нашел, куда можно написать еще.
Пытался посмотреть документацию на сайте, но при переключении вкладок через навигационное меню появляется пустой экран.
https://tech.yandex.ru/mobile-ads/doc/dg/android/quick-start/native-docpage/

Memory leak

В версии 2.100 Activity всё еще утекает. В глубине NativeContentAd всё еще содержит ссылку на NativeContentAdView. Таким образом NativeContentAdView утекает через WeakHashMap в static объекте в глубине библиотеки, т.к. NativeContentAd является «значением» в ней, что блокирует gc для «ключа» NativeContentAdView.

ANR Executing service ru.mamba.client/com.yandex.metrica.ConfigurationService

Используем версии библиотек для отображения нативной рекламы:

compile ‘com.yandex.android:mobmetricalib:2.78’
compile ‘com.yandex.android:mobileads:2.62’

Наблюдаем рост ANR отчётов нашего приложения:

Судя по всему затронуты устройства на Андроид 4.*:

Отключение инициализации Метрики и отображения нативной рекламы от Яндекса проблему не решает. Наличие зависимостей (компиляция ConfigurationService в Манифест) ведёт к ANR-происшествиям.

Не всегда срабатывают методы слушателя InterstitialEventListener

Делаю все как написано в справке по подключению Yandex Ads Mobile
Мне важно получить событие когда полноэкранная реклама закрывается, но это событие onInterstitialDismissed срабатывает далеко не всегда. А события onInterstitialLoaded, onAdClosed и onAdOpened вообще никогда не вызываются. И еще, довольно часто реклама просто не показывается. Думаю какой-то тайм-аут должен быть и должно выходить событие onInterstitialFailedToLoad, но его нет. Ждал больше минуты. Как быть в обоих случаях?

NativeAdView inheritance

Хотел бы иметь возможность наследоваться от NativeAdView и реализовать inflate дочерних view внутри него.

Это нужно чтобы показывать пользователю NativeAdView бесшовно, устанавливая предварительно стандартную иконку, заголовок и др. до загрузки самой рекламы. По факту я это делаю извне NativeAdView, что не удобно. К примеру у AdMob есть класс UnifiedNativeAdView с методами доступа к дочерним view, им можно программно назначить начальное значение.

isLoading for NativeAd

Использую нативную рекламу в RecyclerView, делаю свою реализацию View без использования templates.

Я не могу найти метода, который бы позволил определить что нативная реклама сейчас в процессе загрузки/кэширования данных.
Я хочу избежать сценарий, когда пользователь очень быстро прокручивает список, как результат будет много запросов но мало показов.
Например у AdMob есть метод adLoader.isLoading() . Если он true, я жду и не делаю новый запрос.

Или мне нужно отменять предыдущий запрос перед показом новой рекламы?
nativeAdLoader.cancelLoading(); nativeAdLoader.loadAd(adRequest);

Unexpected response code 400

В приложении добавлен банер. С тестовым id успешно показывает рекламу для iphone (надеюсь в реальной будет показываться для Android?).

Когда добавляю реальную id для своего приложения реклама не показывается.
есть ошибка:

ANR Executing service my.package/com.yandex.metrica.MetricaService

Добрый день. Получил достаточное количество ANR из GooglePlay.
Метрика не используется, идет как обязательная библиотека к нативной рекламе.
build.gradle:


Эта проблема присутствует только на Андроид 5.0 и 5.1

Лог потоков

Черный экран вместо рекламы SDK 2.62 Android 4.1.2

Устройство Motorola Droid Bionik.
В разные периоды времени с разной частотой (порой более 50% показов) наблюдается непрогруженная реклама. Выглядит это так:

То же самое и на последней версии SDK 2.72

NullPointerException at com.yandex.mobile.ads.g.e.e (SourceFile:1082)

Добрый день.
Получил крешлог. Эти падения единичные, рута на устройствах не обнаружено.
Пока происходит только на устройствах с андроидом 4.4.2

В проекте используется :
com.yandex.android:mobmetricalib:2.73
com.yandex.android:mobileads:2.60

Fatal Exception: java.lang.NullPointerException
at android.os.Parcel.readException(Parcel.java:1478)
at android.os.Parcel.readException(Parcel.java:1426)
at android.os.storage.IMountService$Stub$Proxy.mkdirs(IMountService.java:769)
at android.app.ContextImpl.ensureDirsExistOrFilter(ContextImpl.java:2628)
at android.app.ContextImpl.getExternalCacheDirs(ContextImpl.java:1258)
at android.app.ContextImpl.getExternalCacheDir(ContextImpl.java:1247)
at android.content.ContextWrapper.getExternalCacheDir(ContextWrapper.java:247)
at com.yandex.mobile.ads.g.e.e(SourceFile:1082)
at com.yandex.mobile.ads.g.e.a(SourceFile:59)
at com.yandex.mobile.ads.ao.a(SourceFile:37)
at com.yandex.mobile.ads.ap.a(SourceFile:1054)
at com.yandex.mobile.ads.t.a(SourceFile:7122)
at com.yandex.mobile.ads.t$1.run(SourceFile:115)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)

Возможно ли вручную хендлить click по Native баннеру?

OutOfMemoryError: java.util.HashMap$HashMapEntry[] of length 1073741824 would overflow at com.yandex.mobile.ads.network.core.f.d (SourceFile:556)

В версиях библиотек:

Fatal Exception: java.lang.OutOfMemoryError: java.util.HashMap$HashMapEntry[] of length 1073741824 would overflow
at java.util.HashMap.makeTable(HashMap.java:550)
at java.util.HashMap.(HashMap.java:158)
at com.yandex.mobile.ads.network.core.f.d(SourceFile:556)
at com.yandex.mobile.ads.network.core.f$a.a(SourceFile:401)
at com.yandex.mobile.ads.network.core.f.a(SourceFile:154)
at com.yandex.mobile.ads.network.core.d.run(SourceFile:84)

WindowManager$BadTokenException

Обновился до версии Yandex Ads SDK 2.60.
И получил следующее падение:

Как воспроизвести не знаю, падает на устройствах пользователей.

Падает на Android 4.4.2 и 4.4.4

Падает не очень часто. Так что возможно не обязательно разбираться, что это и почему. Как минимум хотелось бы поставить try/catch в нужном месте чтобы SDK не роняло моё приложение в такой ситуации.

До этого пользовался версию Yandex Ads SDK 2.41, в нём такого падения не было. Так что наверное пока откачусь обратно на неё.

Не получается подключить к xamarin проекту

Пытался подключить в android xamarin проект но безуспешно.
Получается инициализировать библиотеку
YandexMetrica.activate(getApplicationContext(), API_KEY);

Получается создать реквест
AdRequest.builder().withParameters(parameters).build()

Но не получается добавить банер
NativeBannerView

потому как он не импортируется из jar
Не импортируется по причине обфускации.
Класс наследуется от z класса и из за этого проблема.

Есть ли у вас желание настроить обфускацию таким образом чтобы вашу библиотеку можно было бы подключать к xamarin проектам?

android.database.sqlite.SQLiteException

Доброго времени суток.
У 30% пользователей падает приложение. Ниже стек из «ANR и сбои»:

android.database.sqlite.SQLiteException:
at android.database.sqlite.SQLiteConnection.nativeExecuteForChangedRowCount (Native Method)
at android.database.sqlite.SQLiteConnection.executeForChangedRowCount (SQLiteConnection.java:732)
at android.database.sqlite.SQLiteSession.executeForChangedRowCount (SQLiteSession.java:754)
at android.database.sqlite.SQLiteStatement.executeUpdateDelete (SQLiteStatement.java:64)
at android.database.sqlite.SQLiteDatabase.executeSql (SQLiteDatabase.java:1676)
at android.database.sqlite.SQLiteDatabase.execSQL (SQLiteDatabase.java:1605)
at org.chromium.android_webview.HttpAuthDatabase$1.run (HttpAuthDatabase.java:19)

Инструмент разработчика установлен корректно, по справке. Яндекс метрика в классе приложения не инициализируется, а работает только как вспомогательная библиотека.
Приложение поддерживает Андроид от 4.1 до 8.1

If com.yandex.mobile.ads.AdActivity destroyed when onAdLeftApplication, onInterstitialDismissed is called. But when i press back i can see interstitial.

It can be reproduced by setting Don’t keep activities in dev settings and not destroying interstitial in onDestroy callback in activity.

Читайте также:  Пароль который подходит ко всем телефонам андроид

Пакет для flutter

Планируется ли реализовать обёртку для flutter?
И если да, то когда её ожидать?

NPE in NativeLoadListener

Это происходит, если обнулить listener после отмены загрузки

Когда будет либа для windows 10 mobile?

Сорян если не по адресу, просто блин что за несправедливость? UWP приложения тоже хотят вашей монетезации!

java.lang.NegativeArraySizeException

How to disable separated process

Замечено, что в приложении появляется отдельный процесс после добавления implementation ‘com.yandex.android:mobmetricalib:3.6.4’

Можно ли убрать отдельный процесс и зачем он нужен? В приложении уже могут быть другие процессы, а тут от SDK появляется. Каждый процесс — это дополнительная нагрузка на память. Хочется легковесной SDK.

Пустой экран при возврате на полноэкранную рекламу

Добрый день.
Обнаружена проблема с полноэкранной рекламой — при возвращении из браузера в приложение, отображается активити полноэкранной рекламы с пустым контентом.
Воспроизводится иногда, гарантированного(100%) воспроизведения добиться не удалось.
Воспроизводилось на устройствах:

  • Sony F5121 Android 7.1.1
  • HTC Desire 530 Android 6.0.1
  • Samsung Galaxy s6 edge SM-G925F Android 6.0.1
  • Samsung Galaxy A5 (2016) SM-A510F Android 7.0

Шаги для воспроизведения:

  • Отобразить полноэкранный баннер;
  • Кликнуть на него(происходит переход в браузер устройства);
  • Вернуться обратно из браузера в приложение хардварной кнопкой назад.

Скриншот:

Fatal Exception: java.lang.NullPointerException

Добрый день. Ребята, вылезла одна ошибка. Первый раз, видимо, редкая.

RuntimeException: Package manager has died at at com.yandex.mobile.ads.k.a.a(SourceFile:22)

Добрый день.
Получил крешлог. Падения единичные.
Происходит в основном на рутированных устройствах.

В проекте используется :
com.yandex.android:mobmetricalib:2.73
com.yandex.android:mobileads:2.60

Некорректно определяется область объявления в нативном формате

Последняя версия SDK 2.140.

Проблема наблюдается с объявлениями, в которых отсутствуют данные для Subview warning .

  1. Большая часть объявления скрыта, все ок.
  2. Вид полного объявления, рамка зеленая.
  3. Скрыта незначительная часть объявления — рамка красная.

Так же хотелось бы описать, почему нативный формат мобильной рекламы Yandex имеет наихудшую кастомизацию относительно AdMob и MyTarget:

  • Изображения разнообразных соотношений сторон. При нативном виде на всю ширину экрана — объявление может занимать весь экран. Обрезать изображения более 20% запрещено требованиями. В то же самое время такие изображения в web объявлениях обрезаются.
  • В 99% случаев для контентных объявлений отсутствует callToAction . Свой дефолтный, например «Перейти», либо просто кнопку со стрелкой поставить нельзя.
  • Нельзя кастомизировать внешний вид причин закрытия для feedback .
  • Жестко привязаны все View к определенным классам. К примеру нельзя использовать ImageButton для feedback , т.к. он требует Button .
  • Тестовые блоки имеют только один вид объявления, в результате чего на них проверить все варианты нельзя. Отображение реальных объявлений (без засчитывания) было бы куда лучше.
  • Нельзя загружать сразу несколько объявлений одним запросом.
  • Для контентных объявлений нет иконок.

Не хватает метода unbindAd?

Добрый день.
При использовании NativeAppInstallAd и NativeContentAd в RecyclerView столкнулись с такой проблемой.
Поскольку RecyclerView переиспользует View при прокрутке; в случае, если прокрутка списка происходит быстрее, чем загрузка изображений, на карточке рекламы может на какое-то время появляться нерелевантное изображение (из предыдущей рекламы).
Есть ли какой-то способ прерывать загрузку изображений?

NullPointerException в методе WebViewClassic.loadDataWithBaseURL SDK v. 2.61

В Firebase консоли приходят ошибки с следующим стектрейсом:

Exception java.lang.NullPointerException:
android.webkit.WebViewClassic.loadDataWithBaseURL (WebViewClassic.java:3702)
android.webkit.WebView.loadDataWithBaseURL (WebView.java:864)
com.yandex.mobile.ads.t.b (SourceFile:121)
com.yandex.mobile.ads.y.b (SourceFile:43)
com.yandex.mobile.ads.d.b.a.a (SourceFile:31)
com.yandex.mobile.ads.d.b.c$1.a (SourceFile:77)
com.yandex.mobile.ads.d.b.e$1.a (SourceFile:1048)
com.yandex.mobile.ads.g.a.b.k.b (SourceFile:1060)
com.yandex.mobile.ads.g.a.d$a.run (SourceFile:105)
android.os.Handler.handleCallback (Handler.java:615)
android.os.Handler.dispatchMessage (Handler.java:92)
android.os.Looper.loop (Looper.java:174)
android.app.ActivityThread.main (ActivityThread.java:4952)
java.lang.reflect.Method.invokeNative (Method.java)
java.lang.reflect.Method.invoke (Method.java:511)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1027)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:794)
dalvik.system.NativeStart.main (NativeStart.java)

Код который вызывает ошибку:

public void b(String paramString) <
String str = paramString; paramString = this; paramString = str + paramString.b() + «»;
loadDataWithBaseURL(«https://yandex.ru», paramString, «text/html», «UTF-8», null);
>

API level: 16, 17 18

Список устройств:
GT-I8552 6
GT-S7262 3
Lenovo S580 3
HTC Desire 500 dual sim 3
GT-S6312 3
K00Z 3
GT-I8262 3
MediaPad T1 8.0 2
ETL-S4521 2

Proguard

Очень хочется, чтобы в библиотеке появился разумный proguard конфиг.

Что мне нужно: чтобы proguard удалял из моего apk все классы, которые мне не нужны. Например в библиотеке есть полноэкранная реклама, native реклама. Я ими не пользуюсь соответственно хочу, чтобы они не занимали зря место в моём apk. Кроме них уверен что proguard найдёт ещё много чего интересного, что можно легко вырезать.

Что есть сейчас: вы в конфиге указали, чтобы proguard вашей библиотеки вообще не касался. То есть все классы, которые для работы моего приложения не нужны, будут всё-равно в него запакованы. Возможно вы просто перестраховались и необходимости в этом нет совсем.

Что я предлагаю сделать: удалить строку keep class com.yandex.mobile.ads.** . Собрать и протестировать что получится. Возможно обнаружатся какие-то классы, которые нам нужны, но proguard их ошибочно вырезал. Вот только их и указать в конфиге. Хотя таких классов может и нет совсем.

Что мне не нужно: обфускация. Я обфускацией не пользуюсь так что меня не волнует, если вы в конфиге запретите обфускацию имён классов. Возможно кому-то другому это и нужно, но лично для меня это не актуально сейчас. Всё что я пишу касается только фазы shrink, то есть вырезания из apk неиспользуемых классов https://stuff.mit.edu/afs/sipb/project/android/sdk/android-sdk-linux/tools/proguard/docs/index.html#manual/introduction.html.

Почему для меня это важно: Я стараюсь, чтобы моё приложение было более компактным. И гугл нам постоянно напоминает обращать на это внимание. Меня расстраивает, когда каждая из используемых библиотек с каждым обновлением становится всё больше и больше. Изменения размера конечно обычно не большие, но они постоянно накапливаются. Хотя бы proguard помогает с этим как-то справлять. Но не в вашем случае к сожалению. Очень надеюсь на исправление.

java.util.concurrent.RejectedExecutionException

Здравствуйте.
В версии 2.61 появилась ошибка, которой в 2.41 не было. До 2.61 версии не пробовал, возможно, ошибка появилась ранее. Используется совместно с метрикой 2.73.

java.util.concurrent.RejectedExecutionException: at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2011)
at java.util.concurrent.ThreadPoolExecutor.reject (ThreadPoolExecutor.java:793)
at java.util.concurrent.ThreadPoolExecutor.execute (ThreadPoolExecutor.java:1339)
at java.util.concurrent.Executors$DelegatedExecutorService.execute (Executors.java:583)
at com.yandex.mobile.ads.s.a (s.java)
at com.yandex.mobile.ads.s.b (s.java)
at com.yandex.mobile.ads.s.a (s.java)
at com.yandex.mobile.ads.ad.loadAd (ad.java)
at com.yandex.mobile.ads.AdView.loadAd (AdView.java)

Android 5.1 | 16 | 36,4 %
Android 6.0 | 10 | 22,7 %
Android 5.0 | 6 | 13,6 %
Android 4.2 | 5 | 11,4 %
Android 7.1 | 3 | 6,8 %
Android 7.0 | 2 | 4,5 %
Android 4.4 | 2 | 4,5 %

java.lang.NoClassDefFoundError: com/yandex/mobile/ads/r (wrong name: com/yandex/mobile/ads/R)

Добрый день.
Проблема: андроид студио не может «нарисовать» и скомпилировать яндекс AdView.

compile ‘com.yandex.android:mobileads:2.60’
compile ‘com.yandex.android:mobmetricalib:2.62’

import com.yandex.mobile.ads.*;
.
adViewInfoYandex = (com.yandex.mobile.ads.AdView)view.findViewById(R.id.adViewInfoYandex);
adViewInfoYandex.setBlockId(«R-M-225492-2»);
adViewInfoYandex.setAdSize(AdSize.BANNER_320x50);
final com.yandex.mobile.ads.AdRequest adRequest = new com.yandex.mobile.ads.AdRequest.Builder().build();
adViewInfoYandex.setAdEventListener(new AdEventListener.SimpleAdEventListener() <
@OverRide
public void onAdLoaded() <
Log.d(«YandexAds», «Loaded..»);
//.
>
>);
adViewInfoYandex.loadAd(adRequest);

Проблема проявляется уже в Layout Designer — выдает ошибку:

The following classes could not be instantiated:
— com.yandex.mobile.ads.AdView (Open Class, Show Exception, Clear Cache)
Tip: Use View.isInEditMode() in your custom views to skip code or show sample data when shown in the IDE. If this is an unexpected error you can also try to build the project, then manually refresh the layout.

Exception Details:
java.lang.ClassNotFoundException: org.json.JSONException at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at com.yandex.mobile.ads.j.b. . (SourceFile:43) at com.yandex.mobile.ads.ap.(SourceFile:37) at com.yandex.mobile.ads.t.(SourceFile:93) at com.yandex.mobile.ads.y.(SourceFile:27) at com.yandex.mobile.ads.aq.(SourceFile:37) at com.yandex.mobile.ads.am.(SourceFile:25) at com.yandex.mobile.ads.q.(SourceFile:35) at com.yandex.mobile.ads.af.a(SourceFile:221) at com.yandex.mobile.ads.af.(SourceFile:37) at com.yandex.mobile.ads.AdView.(SourceFile:40) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727) at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:858) at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:70) at android.view.LayoutInflater.rInflate(LayoutInflater.java:834) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821) at android.view.LayoutInflater.inflate(LayoutInflater.java:518) at android.view.LayoutInflater.inflate(LayoutInflater.java:397) Copy stack to clipboard

Проект чистил, ребилдил, андроид студио перезапускал, компьютер перезагружал.

В чем может быть проблема?

Enabling a feedback button in NativeBannerView

Hi! I’d like to know if it’s possible to enable a feedbackButton in a standard NativeBannerView? Thanks in advance!

Ad Activity into the AndroidManifest.xml is integrated wrong

Вынес ошибку отдельно.

Вылетает на строке в методе OnCreate() главной активности:

периодически вылетает java.lang.NullPointerException:

Recommend Projects

React

A declarative, efficient, and flexible JavaScript library for building user interfaces.

Vue.js

🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

Typescript

TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

TensorFlow

An Open Source Machine Learning Framework for Everyone

Django

The Web framework for perfectionists with deadlines.

Laravel

A PHP framework for web artisans

Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

javascript

JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

Some thing interesting about web. New door for the world.

server

A server is a program made to process requests and deliver data to clients.

Machine learning

Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

Visualization

Some thing interesting about visualization, use data art

Some thing interesting about game, make everyone happy.

Recently View Projects

yandex-ads-sdk-android

bip39

JavaScript implementation of Bitcoin BIP39: Mnemonic code for generating deterministic keys

Awesome-Profile-README-templates

A collection of awesome readme templates to display on your profile

buster95

fragile

Framework for building algorithms based on FractalAI theory

Источник

Оцените статью