我想了解一些用例在Android中的動態權限。換句話說,我試圖理解爲什麼我們有addPermission *()API方法,爲什麼只有靜態權限是不夠的。這裏似乎沒有太多材料可以解釋這一點,所以我希望能有一些解釋。另外,爲了解應用程序使用動態權限所做的工作,我下載了一些Android應用程序並開始對其進行逆向工程,並在源代碼中查找addPermission *()API方法。我注意到有一些應用程序爲PackageManager實現了一個包裝類,我想知道這樣做的目的是什麼。下面是這些應用程序實現的包裝類的一個示例,他們所做的只是調用PackageManager類的相應方法:用於動態權限的Android用例
public class PackageManagerWrapper
extends PackageManager
{
protected PackageManager mInner;
public PackageManagerWrapper()
{
this.mInner = null;
}
public PackageManagerWrapper(Context paramContext)
{
this.mInner = paramContext.getPackageManager();
}
@Inject
public PackageManagerWrapper(PackageManager paramPackageManager)
{
this.mInner = paramPackageManager;
}
public void addPackageToPreferred(String paramString)
{
this.mInner.addPackageToPreferred(paramString);
}
public boolean addPermission(PermissionInfo paramPermissionInfo)
{
return this.mInner.addPermission(paramPermissionInfo);
}
...
}
非常感謝!
好的,但那你爲什麼認爲這是一個公開的API? –
對於第二個問題,包裝類似乎只調用PackageManager類的方法,而沒有真正添加任何功能。 –
Android操作系統是非常模塊化的,許多你可能認爲的「操作系統」都是應用程序(例如,啓動器)。自然,這些應用程序只能使用公共Java方法。其中一些應用程序需要執行有意義的操作,因此Android權限模型僅允許那些「系統應用程序」使用它的某些apis。所以有可能這個api甚至不能被非系統應用程序使用,或者它是,但是沒有能夠安裝軟件包(只能通過系統應用程序完成)而無用 –