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 へのアクセスがなくなります。
以前と同じように、Logcat 出力を取得しました:
W: Accessing hidden method Landroid/media/AudioTrack;->getLatency()I (light greylist, reflection)
コメントで無効にした場合
//loadRewardedVideoAd();
非表示の logcat へのアクセスがなくなります。
ご覧のとおり、コードは次のようになります。
MobileAds.initialize(this, "ca-app-pub-3940256099942544~3347511713");
adView.loadAd(adBuilder());
interstitial.loadAd(adBuilder());
loadRewardedVideoAd();
隠し logcat へのアクセスが多数発生しました。
私の質問は次のとおりです:
- これらはエミュレータの問題ですか?
- プラットフォームの将来のバージョンでアプリが動作しなくなるような非 SDK インターフェース (非表示メソッド、ライト グレーリスト、リフレクションへのアクセスを参照) を使用する可能性はありますか?
- これをどうすれば修正できますか?
ベストアンサー1
グレーリストに登録された非 SDK インターフェースとは、Android 9 では引き続き機能しますが、Google がプラットフォームの将来のバージョンでのアクセスを保証していないメソッドとフィールドを指します。グレーリストに登録された API に代わる戦略を実装できない理由がある場合は、バグを報告して制限の再検討をリクエストできます。
https://issuetracker.google.com/issues/new?component=328403&template=1027267