Monday, January 5, 2015

Android @hide 코드 호출하기

안드로이드에서 @hide로 정의된 코드는 소스에는 존재하나 SDK 사용시 일반적인 방법으로는 호출할 수 없다.

/** @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;
}

그런데 다음과 같이 Java reflection을 사용하면 호출이 여전히 가능하다.
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});

No comments:

Post a Comment