Activity
ソースコード の場合、3898行目(一番下に近い):
/**
* @hide
*/
public final boolean isResumed() {
return mResumed;
}
@hide
はどういう意味ですか?
public class ChildActivity extends Activity { ... }
がActivity.isResumed()
を使用/表示できないことがわかりました。これは正常ですか?どうすればアクセスできますか?
Androidには、SDKを介してアクセスできない2種類のAPIがあります。
最初のものはパッケージcom.Android.internal
にあります。 2番目のAPIタイプは、 @ hide Javadoc属性 でマークされたクラスとメソッドのコレクションです。
Android 9(APIレベル28)以降、Googleは SDK以外のインターフェースの使用に関する新しい制限 を導入します。直接、リフレクション、またはJNIを介して。これらの制限は、アプリが非SDKインターフェイスを参照するか、リフレクションまたはJNIを使用してハンドルを取得しようとするたびに適用されます。
ただし、APIレベル28以前では、Javaリフレクションを介して隠しメソッドにアクセスできました。 @hide
属性はJavadoc(droiddocも)の一部であるため、@hide
は単にメソッド/クラス/フィールドがAPIドキュメントから除外されることを意味します。
たとえば、ActivityManager.Java
のcheckUidPermission()
メソッドは@hide
を使用します。
/** @hide */
public static int checkUidPermission(String permission, int uid) {
try {
return AppGlobals.getPackageManager()
.checkUidPermission(permission, uid);
} catch (RemoteException e) {
// Should never happen, but if it does... deny!
Slog.e(TAG, "PackageManager is dead?!?", e);
}
return PackageManager.PERMISSION_DENIED;
}
ただし、リフレクションで呼び出すことができます。
Class c;
c = Class.forName("Android.app.ActivityManager");
Method m = c.getMethod("checkUidPermission", new Class[] {String.class, int.class});
Object o = m.invoke(null, new Object[]{"Android.permission.READ_CONTACTS", 10010});
@hide
は、さまざまな理由で表示する必要があるが、公開されたAPIの一部であるnotに使用されます。ソースからAPIを自動的に抽出する場合、ドキュメントに含まれません。
あなたは正しい、あなたはそれをオーバーライドすることはできません。 final
としてマークされているため、これは仕様です。 seできるはずです。ただし、@hide
でマークされているため、エディターは使用するインテリセンスの選択肢の1つとして表示しない場合があります。以下のポイント3。
not APIの一部ではなく、開発者はいつでも削除できるため、まったく使用しないでください。彼らはサディスティックに傾いた場合、それを実行したデバイスをブロックする機能に置き換えるために、彼らの権利の範囲内にさえいるでしょう(ただし、厳密な法的意味ではないかもしれません)。
@hide
注釈は、このインターフェイスがパブリックAPIの一部ではないことを意味し、コードで使用しないでください。メソッドは、AOSPの内部使用専用です。
Googleは実際に 非SDKインターフェイスの使用を制限する を開始しました。これには、@hide
でマークされたインターフェイスが含まれます
メソッドは4つのリストに分類されます。
- ホワイトリスト:SDK
- light-greylist:まだアクセス可能な非SDKメソッド/フィールド。
- ダークグレーリスト:
- ターゲットSDKがAPIレベル28未満のアプリの場合:ダークグレーリストインターフェイスの使用はそれぞれ許可されます。
- ターゲットSDKがAPIレベル28以上のアプリの場合:ブラックリストと同じ動作
- ブラックリスト:ターゲットSDKに関係なく制限されています。プラットフォームは、インターフェイスが存在しないかのように動作します。たとえば、アプリが使用しようとするたびにNoSuchMethodError/NoSuchFieldExceptionをスローし、アプリが特定のクラスのフィールド/メソッドのリストを知りたい場合はNoSuchMethodError/NoSuchFieldExceptionをスローしません。
リストはここにあります: https://Android.googlesource.com/platform/prebuilts/runtime/+/master/appcompat