Android ソースコード内の @hide はどういう意味ですか? 質問する

Android ソースコード内の @hide はどういう意味ですか? 質問する

のためにActivityソースコード、3898行目(一番下近く):

/**
 * @hide
 */
public final boolean isResumed() {
    return mResumed;
}

どういう@hide意味?

public class ChildActivity extends Activity { ... }が使用できない/表示されないことがわかりましたActivity.isResumed()。これは正常ですか? どうすればアクセスできますか?

ベストアンサー1

Android には、SDK 経由でアクセスできない 2 種類の API があります。

最初のものはパッケージにありますcom.android.internal。2番目のAPIタイプは、@hide Javadoc 属性

Android 9(APIレベル28)以降、Googleは非SDKインターフェースの使用に関する新たな制限直接、リフレクション経由、または JNI 経由のいずれであっても、これらの制限は、アプリが非 SDK インターフェースを参照するか、リフレクションまたは JNI を使用してそのハンドルを取得しようとするたびに適用されます。

しかし、API レベル 28 より前では、隠しメソッドは Java リフレクションを介してアクセス可能でした。属性は@hideJavadoc (droiddoc も) の一部にすぎないため、@hideメソッド/クラス/フィールドが API ドキュメントから除外されていることを意味します。

たとえば、 のcheckUidPermission()メソッドでは以下ActivityManager.javaを使用します@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});

おすすめ記事