Android, SDK aracılığıyla erişilemeyen iki tür API'ye sahiptir.
İlki pakette bulunur com.android.internal. İkinci API türü, @hide Javadoc özniteliğiyle işaretlenmiş sınıflar ve yöntemler koleksiyonudur .
Google, Android 9'dan (API seviyesi 28) başlayarak, SDK olmayan arayüzlerin kullanımına yönelik olarak doğrudan, yansıtma yoluyla veya JNI aracılığıyla yeni kısıtlamalar getirmektedir . Bu kısıtlamalar, bir uygulama SDK olmayan bir arayüze başvurduğunda veya yansıma veya JNI kullanarak işleyicisini elde etmeye çalıştığında uygulanır.
Ancak API seviyesi 28'den önce, gizli yöntemlere Java yansıması yoluyla hala erişilebilir. @hideBöylece niteliği, Javadoc (ayrıca droiddoc) sadece bir parçasıdır @hidesadece basit yöntemi / sınıf / alan API docs dışındadır demektir.
Örneğin, içindeki checkUidPermission()yöntem şunları ActivityManager.javakullanır @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;
}
Ancak buna yansıma yoluyla diyebiliriz:
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});