অ্যান্ড্রয়েডে দুটি ধরণের এপিআই রয়েছে যা এসডিকে মাধ্যমে অ্যাক্সেসযোগ্য নয়।
প্রথমটি প্যাকেজে অবস্থিত com.android.internal
। দ্বিতীয় এপিআই টাইপটি ক্লাস এবং পদ্ধতিগুলির সংকলন যা @ হাইড জাভাদোক অ্যাট্রিবিউট দিয়ে চিহ্নিত করা হয় ।
অ্যান্ড্রয়েড 9 (এপিআই স্তর 28) থেকে শুরু করে, গুগল নন-এসডিকে ইন্টারফেসগুলি ব্যবহারের ক্ষেত্রে নতুন প্রতিবন্ধকতা প্রবর্তন করে , সরাসরি, প্রতিচ্ছবি বা জেএনআইয়ের মাধ্যমে। যখনই কোনও অ্যাপ্লিকেশন কোনও নন-এসডিকে ইন্টারফেসের উল্লেখ করে বা প্রতিবিম্ব বা জেএনআই ব্যবহার করে এর হ্যান্ডেলটি পাওয়ার চেষ্টা করে তখনই এই বিধিনিষেধগুলি প্রয়োগ করা হয়।
তবে এপিআই স্তরের ২৮ এর আগে গোপন পদ্ধতিগুলি এখনও জাভা প্রতিবিম্বের মাধ্যমে অ্যাক্সেস করা যেতে পারে। @hide
তাই গুণ, Javadoc (droiddoc এছাড়াও) মাত্র অংশ @hide
সহজভাবে মানে পদ্ধতি / শ্রেণী / ক্ষেত্র এপিআই ডক্স থেকে বাদ দেওয়া হয়েছে।
উদাহরণস্বরূপ, 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});