Доступ к предупреждениям и ограничениям скрытого метода logcat для интерфейсов, не относящихся к SDK

Я прочитал в документации по Android «Ограничения для интерфейсов, не относящихся к SDK»:

Эти ограничения применяются всякий раз, когда приложение ссылается на интерфейс, не относящийся к SDK, или пытается получить его дескриптор с помощью отражения или JNI ... Обработка интерфейсов, не относящихся к SDK, - это деталь реализации, которую API абстрагирует; он может быть изменен без предварительного уведомления ... Интерфейсы без SDK, занесенные в серый список, включают методы и поля, которые продолжают работать в Android 9, но к которым мы не гарантируем доступ в будущих версиях платформы ... Вы можете использовать adb logcat для доступа к этим сообщениям журнала, которые появляются под PID запущенного приложения ...

Вот соответствующие части моего кода, работающего на эмуляторе API 28:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); 

           ................       

    MobileAds.initialize(this,  "ca-app-pub-3940256099942544~3347511713");

           ................

    adView = new AdView(this);

    adView.setAdUnitId("ca-app-pub-3940256099942544/6300978111");
    adView.setAdSize(AdSize.BANNER);
    adView.setBackgroundColor(Color.TRANSPARENT);
    adView.setVisibility(View.GONE);            
    adView.loadAd(adBuilder());

           ................

    interstitial = new InterstitialAd(GLGame.this);            
    interstitial.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
    interstitial.loadAd(adBuilder());        

    mRewardedVideoAd = MobileAds.getRewardedVideoAdInstance(this);
    mRewardedVideoAd.setRewardedVideoAdListener(this);        
    loadRewardedVideoAd();        
}

AdRequest adBuilder() {
    return new AdRequest.Builder().build();
}
public void loadRewardedVideoAd() {        
    mRewardedVideoAd.loadAd("ca-app-pub-3940256099942544/5224354917", new AdRequest.Builder().build());        
}

Я обнаружил это с

MobileAds.initialize(this,  "ca-app-pub-3940256099942544~3347511713");
adView.loadAd(adBuilder());
interstitial.loadAd(adBuilder());

мой вывод Logcat:

W: Accessing hidden method Landroid/view/textclassifier/logging/SmartSelectionEventTracker;-><init>(Landroid/content/Context;I)V (light greylist, reflection)
W: Accessing hidden method Landroid/view/textclassifier/logging/SmartSelectionEventTracker;->logEvent(Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;)V (light greylist, reflection)
W: Accessing hidden method Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;->selectionStarted(I)Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent; (light greylist, reflection)
W: Accessing hidden method Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;->selectionModified(II)Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent; (light greylist, reflection)
W: Accessing hidden method Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;->selectionModified(IILandroid/view/textclassifier/TextClassification;)Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent; (light greylist, reflection)
W: Accessing hidden method Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;->selectionModified(IILandroid/view/textclassifier/TextSelection;)Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent; (light greylist, reflection)
W: Accessing hidden method Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;->selectionAction(III)Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent; (light greylist, reflection)
W: Accessing hidden method Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;->selectionAction(IIILandroid/view/textclassifier/TextClassification;)Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent; (light greylist, reflection)

если я отключу, комментируя

//MobileAds.initialize(this,  "ca-app-pub-3940256099942544~3347511713");
//adView.loadAd(adBuilder());
//interstitial.loadAd(adBuilder());

Доступ к скрытому логическому каталогу исчезнет.

Как и раньше, я получил вывод Logcat:

W: Accessing hidden method Landroid/media/AudioTrack;->getLatency()I (light greylist, reflection)

если я отключу, комментируя

//loadRewardedVideoAd();

Доступ к скрытому логическому каталогу исчезнет.

Как видите код:

MobileAds.initialize(this,  "ca-app-pub-3940256099942544~3347511713");
adView.loadAd(adBuilder());
interstitial.loadAd(adBuilder());
loadRewardedVideoAd();

вызвал много Доступа к скрытому logcat.

Мои вопросы:

  1. Это проблема эмулятора?
  2. Могу ли я использовать интерфейсы НЕ-SDK (см. Доступ к скрытым методам, светлый серый список, отражение), которые нарушат работу моего приложения в будущих версиях платформы?
  3. Как это исправить?

person Kostas Trakos    schedule 07.10.2018    source источник
comment
Похоже, что это делает любая библиотека мобильной рекламы, которую вы используете. Это риск, это означает, что вам нужно постоянно обновлять эту библиотеку, если новая версия Android нарушит это.   -  person Gabe Sechan    schedule 07.10.2018
comment
Глядя на то, что он на самом деле делает - похоже, что они пытаются использовать функции Android9, которые могли существовать до этого, через отражение. Что довольно безопасно. Что они делают, это пытаются манипулировать подсистемой классификации текста, чтобы изменить то, что отображается на контекстной панели действий (такие вещи, как копирование, вставка и т. Д.).   -  person Gabe Sechan    schedule 07.10.2018
comment
Привет @Gabe, я использую: implementation 'com.google.android.gms:play-services-ads:9.8.0' и некоторые другие сервисы google-play. Если я обновлюсь до текущей версии 16.0.0, я могу собрать и запустить без проблем, за исключением того, что я получаю 71 предупреждение об использовании устаревшего API. Но доступ к скрытому logcat остается таким же с google-play-services: 9.8.0 Не могли бы вы сказать мне, если я обновляюсь до google-play-services: 16.0.0 и заменяю использование устаревшего API 71 Предупреждения: эта проблема будет устранена?   -  person Kostas Trakos    schedule 07.10.2018
comment
Я бы не стал беспокоиться о предупреждениях. Как я уже сказал, похоже, что эта функция существовала до Android 9, была обнародована в Android 9, но они пытаются использовать ее в некоторых более старых версиях, где она существует. Это безопасное использование. Когда выйдет Android 9.1 или 10, вам следует дважды проверить, что на них ничего не ломается, но я думаю, что это маловероятно.   -  person Gabe Sechan    schedule 07.10.2018
comment
Когда выйдет Android 9.1 или 10, если что-то сломается, какие шаги можно будет исправить?   -  person Kostas Trakos    schedule 07.10.2018
comment
Он находится в библиотеке, поэтому обновите библиотеку и надейтесь, что они ее исправят.   -  person Gabe Sechan    schedule 07.10.2018
comment
Есть ли способ узнать, в какой библиотеке? Я предполагаю, что сервисы Google Play   -  person Kostas Trakos    schedule 07.10.2018
comment
да. Это в google-play-services-ads   -  person Gabe Sechan    schedule 07.10.2018
comment
Если я обновлюсь до последней версии google-play-services-ads: 16.0.0, я все равно получу тот же доступ к скрытому logcat   -  person Kostas Trakos    schedule 08.10.2018
comment
Верно. Они не починили его, потому что на самом деле он не сломан. Если в будущем он сломается, я ожидаю, что они его исправят, а затем вам нужно будет обновить.   -  person Gabe Sechan    schedule 08.10.2018
comment
Это означает, что мне нужно подождать, чтобы увидеть, станет ли он темно-серым, а затем обновить?   -  person Kostas Trakos    schedule 08.10.2018


Ответы (1)


Интерфейсы без SDK, занесенные в серый список, означают методы и поля, которые продолжают работать в Android 9, но к которым Google не гарантирует доступ в будущих версиях платформы. Если есть причина, по которой вы не можете реализовать альтернативную стратегию API из серого списка, вы можете сообщить об ошибке, чтобы запросить пересмотр ограничения.

https://issuetracker.google.com/issues/new?component=328403&template=1027267

person Ramesh Yankati    schedule 07.10.2018