Android 11 系统定制--应用安装签名白名单

客户需要禁用应用安装,对在签名md5白名单中的应用安装放行

@GuardedBy("mInstallLock")
    private PrepareResult preparePackageLI(InstallArgs args, PackageInstalledInfo res)
            throws PrepareFailure {
            ............
 
            //boyin start 
            
            boolean allowIntall = android.provider.Settings.System.getInt(mContext.getContentResolver(), "allow_install", 1) == 1;
            if(systemApp||allowIntall){

            }else{
                allowIntall = false;
                String signMd5 = getSignValidString(parsedPackage.getSigningDetails().signatures[0].toByteArray());
                Slog.i(TAG, "boyin sign " + signMd5);
                String[] defaultSign = new String[]{"B26BBC0BED642E73DE40B97F7092487A","68968881A23F1B89D4337CCD64FB7EBA"};//预设 mamayizhan 和weici签名应用
                for (String s : defaultSign) {
                    if(s.equalsIgnoreCase(signMd5)){
                        allowIntall = true;
                    }
                }
                String whiteList = android.provider.Settings.System.getString(mContext.getContentResolver(),"allow_install_white_list");
                if(whiteList !=null && !whiteList.isEmpty() && whiteList.length()>2){//如果列表不为空,并且长度大于2
                    String[] list  = whiteList.split(",");
                    for (String s : list) {
                        if (s.equalsIgnoreCase(signMd5)) {
                            allowIntall = true;
                        }
                    }
                }

            }
            if(allowIntall == false){
                throw new PrepareFailure(INSTALL_FAILED_INSTANT_APP_INVALID,
                                "system did not allow install this app, because signatures not in white list");
            }
            
            //boyin end
            .............
            }
    //boyin start
     private String getSignValidString(byte[] paramArrayOfByte)  {
        MessageDigest localMessageDigest = null;
        try {
            localMessageDigest = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        }
        localMessageDigest.update(paramArrayOfByte);
        return toHexString(localMessageDigest.digest());
    }

    public String toHexString(byte[] paramArrayOfByte) {
        if (paramArrayOfByte == null) {
            return null;
        }
        StringBuilder localStringBuilder = new StringBuilder(2 * paramArrayOfByte.length);
        for (int i = 0; ; i++) {
            if (i >= paramArrayOfByte.length) {
                return localStringBuilder.toString();
            }
            String str = Integer.toString(0xFF & paramArrayOfByte[i], 16);
            if (str.length() == 1) {
                str = "0" + str;
            }
            localStringBuilder.append(str);
        }
    }
        //boyin end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值