readLPw

一上来就clear了一下这两个变量mPendingPackages,mPastSignatures

private final ArrayList<PendingPackage> mPendingPackages = new ArrayList<PendingPackage>();
private final ArrayList<Signature> mPastSignatures =new ArrayList<Signature>();

看样子是往这两个变量里存东西了

1 读包信息

(1)如果当前的tag是package,那么就用readPackageLPw解析package相关的信息并保存起来

if (tagName.equals("package")) {
           readPackageLPw(parser);

解析比较简单,无非就是根据package的值给相应的变量赋值

当解析完成后,如果userId>0就意味着这个包的userid是确定的了,可以保存起来:

else if (userId > 0) {
                packageSetting = addPackageLPw(name.intern(), realName, new File(codePathStr),
                        new File(resourcePathStr), nativeLibraryPathStr, userId, versionCode,
                        pkgFlags);

包的信息最终保存在了mPackages中:

p = new PackageSetting(name, realName, codePath, resourcePath, nativeLibraryPathString,
                vc, pkgFlags);
        p.userId = uid;
        if (addUserIdLPw(uid, p, name)) {
            mPackages.put(name, p);
            return p;
        }

否则的话再看一下它是不是和别人共用ID的,如果是则把这个包的信息放到mPendingPackages中,表示这些包的user id还不能确认到底是多少,需要后续进一步处理

            } else if (sharedIdStr != null) {
                userId = sharedIdStr != null ? Integer.parseInt(sharedIdStr) : 0;
                if (userId > 0) {
                    packageSetting = new PendingPackage(name.intern(), realName, new File(
                            codePathStr), new File(resourcePathStr), nativeLibraryPathStr, userId,
                            versionCode, pkgFlags);
                    packageSetting.setTimeStamp(timeStamp);
                    packageSetting.firstInstallTime = firstInstallTime;
                    packageSetting.lastUpdateTime = lastUpdateTime;
                    mPendingPackages.add((PendingPackage) packageSetting);

如果上面的两种情况都不是,那就表明这个包的user id肯定没戏了,接着就走异常处理流程了。

(2)读permissions信息

else if (tagName.equals("permissions")) {
                    readPermissionsLPw(mPermissions, parser);
                } else if (tagName.equals("permission-trees")) {
                    readPermissionsLPw(mPermissionTrees, parser);
                }
permissions和permission-trees的信息分别保存在了mPermissions和mPermissionTrees中。

(3)读shared-user

else if (tagName.equals("shared-user")) {
                    readSharedUserLPw(parser);
                }

shared-user的信息最终保存到了mSharedUsers中

if (addUserIdLPw(uid, s, name)) {
            mSharedUsers.put(name, s);
            return s;
        }


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值