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. @hide
Böylece niteliği, Javadoc (ayrıca droiddoc) sadece bir parçasıdır @hide
sadece basit yöntemi / sınıf / alan API docs dışındadır demektir.
Örneğin, içindeki checkUidPermission()
yöntem şunları ActivityManager.java
kullanı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});