Я прочитал в документации по 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.
Мои вопросы:
- Это проблема эмулятора?
- Могу ли я использовать интерфейсы НЕ-SDK (см. Доступ к скрытым методам, светлый серый список, отражение), которые нарушат работу моего приложения в будущих версиях платформы?
- Как это исправить?
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