PKMS分析

开机应用扫描
PkMS构造方法-->scanDirTracedLI()-->scanDirLI{
1.遍历目录下的所有文件
2.获得ParallelPackageParser.ParseResult,parseResult.pkg
}
-->scanPackageChildLI--->addForInitLI{}-->
--->scanPackageOnlyLI{
1.pkgSetting相关变量赋值 Settings创建createNewSetting或者更新updatePackageSetting相关的值
2.needToDeriveAbi是否需要提取abi,第一次开机或者升级为true
3.scanFlags != SCAN_NEW_INSTALL(在installPackageLI中赋值) ,通过检测应用内部的so bit(derivePackageAbi),另外对应系统应用还可以检测是否有lib目录来确定primaryCpuAbi的值
4.isPlatformPackage系统包abi设为系统位数
5.更新PackageSetting pkgSetting,
}
PKMS.addForInitLI-->
//Settings.java  写入packages.xml
enableSystemPackageLPw--->addPackageLPw{mPackages.put}
mSettingsFilename packages.xml--->writeLPr{遍历PackageSetting mPackages}--->writePackageLPr{ serializer.attribute(null, "primaryCpuAbi", pkg.primaryCpuAbiString);}
///

应用安装
installPackageLI--->derivePackageAbi  根据应用so的位数来确认abi{setNativeLibraryPaths这个方法中getPrimaryInstructionSet读取PREFERRED_INSTRUCTION_SET(ro.product.cpu.abilist)的第一位64,}
///
scanPackageOnlyLI{
  if (isSystemApp(pkg) && !pkg.isUpdatedSystemApp() &&pkg.applicationInfo.primaryCpuAbi == null) {
    setBundledAppAbisAndRoots--->setBundledAppAbi  根据lib/lib64目录获取abi的位数{
        final File rootDir = new File(codeFile, LIB_DIR_NAME);
///codeFile=/system/app/Bluetooth/
///LIB_DIR_NAME = "lib"
//rootDir=/system/app/Bluetooth/lib
///
 final String isa = VMRuntime.getInstructionSet(Build.SUPPORTED_64_BIT_ABIS[0]);
 has64BitLibs = (new File(rootDirdi, isa)).exists();
///AOSP
isa=x86_64 rootDir=/system/app/Bluetooth/lib 这个目录中存在对应的x86_64目录那么可以设置为64位 has64BitLibs=true
    }
  }
}
adjustCpuAbisForSharedUserLPw  UID相同的应用,abi值为空的,遍历到不为空的,赋值

1.derivePackageAbi

2. setBundledAppAbisAndRoots

3.adjustCpuAbisForSharedUserLPw

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值