應用黑名單以及靜默安裝的實現

DnGn發表於2018-08-21

需求描述:
1.主要給上層應用提供一個新增應用黑名單介面,被新增到黑名單的應用使用者無法對其進行安裝。同時也可以對這個黑名單進行增加和刪除
2.給上層應用提供一個靜默安裝解除安裝的介面,應用呼叫這個介面可以實現應用的靜默安裝和解除安裝。

具體實現:
一.應用黑名單新增:
1.在PackageManagerService中建立一個資料庫用來儲存這些應用的包名,同時實現對於此資料庫的增刪改查。
2.在handleStartCopy()函式中去讀取資料庫遍歷和安裝的包名進行對比,如果存在於黑名單就不進行安裝同時返回不安裝的資訊。
程式碼:
List packageName = new ArrayList();
packageName = getAppRestriction();
if(packageName != null) {
for(String pakgs : packageName) {
if(pkgLite.packageName.equals(pakgs)) {
ret = PackageManager.INSTALL_FAILED_INVALID_URI;
break;
} else {
ret = PackageManager.INSTALL_SUCCEEDED;
}

            }
        } else {
            ret = PackageManager.INSTALL_SUCCEEDED;
        }

二.靜默安裝的實現:
1.通過解析pm命令的方式進行靜默安裝,因為考慮到重複安裝的情況,所以使用pm install -r命令。
2.但是在手機沒有root的情況下,pm命令是安裝不成功的,原因在於PackageManagerService的installPackageAsUser()函式有一個許可權的檢查,
所以在這裡新增包名判斷來確定進不進行許可權檢查。
程式碼:
final int callingUid = Binder.getCallingUid();
if(getNameForUid(callingUid) != null) {
if(!getNameForUid(callingUid).equals(“com.example.requiredemo”)) {
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.INSTALL_PACKAGES, null);
}
} else
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.INSTALL_PACKAGES, null);

相關文章