您的位置:首页 > 其它

解析Packages.xml获取系统信息

2018-01-05 15:40 253 查看
        熟悉Android开机启动流程的读者应该知道,在系统初始化的时候,PackageManager的底层实现类PackageManagerService回去扫描系统中的一些特定的目录,并解析其中的apk文件。同时,Android把它获得的应用信息,保存在Xml文件中,做成一个应用的花名册,当系统中的Apk安装、删除、升级时,它也会被更新。这个小册子,就是位于/data/system/目录下的——packages.xml文件,如图所示。



        通过ADB Pull命令将它导出到本地,如图所示。



        打开packages.xml文件,信息量非常大,以至于让人眼花缭乱,无从下手,如下图所示。

 


        由于packages.xml文件非常复杂,所以先来了解下这个文件所包含的信息点标签。

<permissions>标签定义了目前系统中的所以权限,并分为两类:系统定义的(package属性为Android)和Apk定义的(package属性为Apk的包名),如下所示。
<item name="android.permission.BROADCAST_CALLLOG_INFO" />
<item name="android.permission.BIND_TV_INPUT" package="android" protection="18" />

<package>标签代表了一个Apk的属性。
    <package name="com.pax.ipp.neptune" codePath="/data/app/com.pax.ipp.neptune-1" nativeLibraryPath="/data/app/com.pax.ipp.neptune-1/lib" primaryCpuAbi="armeabi" flags="540228" ft="160c0aafec0" it="160c0ab00e2" ut="160c0ab00e2" version="25" versionName="V2.02.00_20171220" applicationName="NeptuneService" userId="10085">
        <sigs count="1">
            <cert index="3" key="3082037d30820265a0030201020204717a0378300d06092a864886f70d01010b0500306f310b300906035504061302636e310b3009060355040813027368310b300906035504071302736831163014060355040a130d636f6d2e7061782e696e6e6f7631163014060355040b130d636f6d2e7061782e696e6e6f76311630140603550403130d636f6d2e7061782e696e6e6f76301e170d3136303732323132313134315a170d3436303731353132313134315a306f310b300906035504061302636e310b3009060355040813027368310b300906035504071302736831163014060355040a130d636f6d2e7061782e696e6e6f7631163014060355040b130d636f6d2e7061782e696e6e6f76311630140603550403130d636f6d2e7061782e696e6e6f7630820122300d06092a864886f70d01010105000382010f003082010a02820101009d601f0d5136846d0f8f6d22d4a56dffb254dbce6649839de3031b0446294209c3835afc84c3324322fe697d271b3f793daf83afd73e90c5c2cbb5365368d4e52d8ff2c31583c4fee18aaad820ac8eb663be04a0b64e99e679ee7fb3973f792dcf79ab94759851526da0b9aa7291559f738b4d621150797053c69cdcdfa5761180d1bead45c20e3c54864601131f26133558fb13c7f7ea1f66556776b08010e505497f09e1b3fa8de24a8c3dab2acc5908d5342ebef12501a72f43b5b30a79218641eb0cb0c7d3d1acfb06b6f15c1f0a9e827bf94b54316743a89b0521cf87a76a177cba128e3fac8d12c5b9f48e2778a65c48e9b35d54367ab407ad4c251a150203010001a321301f301d0603551d0e04160414b6964709230398e9a4498baff9841dc9d5bc9335300d06092a864886f70d01010b050003820101002b5d32aaf2963cb0dd77ae6041a364a79e44989ac403baacd0780e084a56e027879020adb76db0fa2b6f59741f2df3f6ca293752e9300abd5724e2c0fd9952a1c7ef40f387157c1fcbe006a0f94dc21ee87a5d58fe4183f30c33ea406c916b99c71937ad834d208a0f13380cd48fa78246ee521c8665d73d050039f103e5705b4c2376fccc074098e67314ccafe51af8b0afc8d87d24e0a42be806822295de0c8f80db4193ec1d4f8e7d99cfa9456c43697778cdb146dd828601966889b5ffdbb58886af68513243f37f1a3a9aec93cfa47572671ddeec4fe93693a196c513dd59223ec6feb10b73530aa6ab39d07b9ac9c4369bd0390b2f9a0db869d484bc55" />
        </sigs>
        <perms>
            <item name="android.permission.SYSTEM_ALERT_WINDOW" />
            <item name="android.permission.CHANGE_NETWORK_STATE" />
            <item name="android.permission.RECEIVE_BOOT_COMPLETED" />
            <item name="android.permission.BLUETOOTH" />
            <item name="android.permission.GET_TASKS" />
            <item name="android.permission.INTERNET" />
            <item name="android.permission.BLUETOOTH_ADMIN" />
            <item name="android.permission.READ_EXTERNAL_STORAGE" />
            <item name="android.permission.BROADCAST_STICKY" />
            <item name="android.permission.CHANGE_WIFI_STATE" />
            <item name="android.permission.ACCESS_NETWORK_STATE" />
            <item name="android.permission.WRITE_EXTERNAL_STORAGE" />
            <item name="android.permission.ACCESS_WIFI_STATE" />
            <item name="android.permission.READ_CONTACTS" />
        </perms>
        <proper-signing-keyset identifier="148" />
        <signing-keyset identifier="148" />
    </package>

        其中各个节点信息的含义如下所示。

          name:Apk包名。

        codePath:Apk安装路径。主要时/system/app和/data/app两种。/system/app存放系统级别的Apk或者时厂商定制的Apk,/data/app存放客户安装的第三方Apk。

          userId:用户Id。

          version:版本号。

<perms>标签
        对应的Apk的AndroidMainifest文件中的<uses-permission>标签,记录Apk的权限信息。

        通过packages.xml文件中的这些标签,可以获取到很多手机内应用的信息,通常在进行系统层开发的时候,可以通过packages.xml文件来获取很多有价值的信息。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: