2017-08-31 72 views
0

那麼,更大的問題是如何使公共類{AccountManagerService}無法訪問?AccountManagerService:如何訪問其私有方法

[編輯]

如果我開發一個Android應用程序,我只能訪問的AccountManager但不AccountManagerService正在由的AccountManager內部使用。如果我查看它,我可以找到com.android.server.accounts。 AccountManagerService類並聲明爲public。但是,我仍然無法導入它,也沒有創建它的參考。

+0

無法訪問什麼? –

+0

如果我正在開發一個android應用程序,我只能訪問AccountManager,但不能訪問AccountManager內部使用的AccountManagerService。如果我查找它,我可以找到'com.android.server.accounts。 AccountManagerService'類並聲明爲public。但是,我仍然無法導入它,也沒有創建它的參考。 –

+0

您可能無法訪問此對象。即使你這樣做,請記住它的API和實現可能因Android版本和設備製造商而異。 – CommonsWare

回答

0

訪問另一個類的私有方法只能通過使用反射像這樣來實現:

Method m = SomeClass.class.getDeclaredMethod("methodName", paramClasses); 
m.setAccessible(true); 
m.invoke(params); 

這可以通過這樣的類的創建者可以防止和我期望這是具有內部的Android類的情況。

通過設置您自己的SecurityManager並拒絕訪問此類,可以完成公共類無法訪問。我不會詳細討論這個問題,因爲在Android上運行時,你不太可能設置自己的SecurityManager。