获取系统和APK信息

获取系统信息

通常可以通过android.os.Bulid和SystemProperty获取系统的配置信息。

android.os.Build

android.os.Bulid类包含了很多系统编译时的大量设备和配置信息,常用的有:

  • Build.BOARD:主板
  • Build.BRAND:系统定制商
  • Build.SUPPORTED_ABIS:CPU指令集
  • Build.DEVICE:设备参数
  • Build.DISPLAY:显示屏参数
  • Build.FINGERPRINT:唯一编号
  • Build.SERIAL:硬件序列号
  • Build.ID:修订版本列表
  • Build.MANUFACTURER:硬件制造商
  • Build.MODEL:版本
  • Build.HARDWARE:硬件名
  • Build.TAGS:描述Build的标签
  • Build.TYPE:Build类型
  • Build.VERSION.CODENAME:当前开发代号
  • Build.VERSION.INCREMENTAL:源码控制版本号
  • Build.VERSION.RELEASE:版本字符串
  • Build.VERSION.SDK_INT:版本号
  • Build.HOST:Host值
  • Build.USER:User值
  • Build.TIME:编译时间

可以直接使用android.os.Bulid类获取Build提供的系统信息。

SystemProperty

SystemProperty包含了许多系统配置属性值和参数,有一些也可以通过android.os.Bulid类获取,常用的有:

  • os.verison:OS版本
  • os.name:OS名称
  • os.arch:OS架构
  • user.home:Home属性
  • user.name:Name属性
  • user.dir:Dir属性
  • user.timezone:时区
  • path.separator:路径分隔符
  • line.separator:行分隔符
  • file.separator:文件分隔符
  • java.vendor.url:Java vender URL属性
  • java.class.path:Java Class路径
  • java.class.version:Java Class版本
  • java.vendor:Java Vender属性
  • java.version:Java版本
  • java.home:Java Home属性

具体获取SystemProperty的值通过System.getProperty(“xxx属性”)方法。

获取APK信息

除了获取系统相关信息,还可以获取APK的相关信息。

PackageManager

Android系统使用PackageManager来负责管理所有已安装的APP,它通过解析Manifest文件,将APP的各种组件和相关信息封装成对应的类。下面介绍一些常用的封装类。

  • ActivityInfo、ServiceInfo、ReceiverInfo、ProviderInfo
    封装了Manifest文件中各个组件的信息,包括name、icon、label、launchmode等。

  • ApplicationInfo
    封装了Manifest文件中application的信息,不过ApplicationInfo还包含了很多Flag,比如FLAG_SYSTEM表示系统应用、FLAG_EXTERAL_STORAGE表示安装在SDCard上的应用等,通过Flag,可以判断应用的类型。

  • PackageInfo
    封装了APK安装包的基本信息,比如包名、权限等。

  • ResolveInfo
    封装了Manifest文件中包含intent标签的组件的信息,可以用来寻找包含特定Intent的应用,比如寻找有分享功能的应用。

PackageManager可以通过调用相关方法,获取上面介绍的封装类,从而获取APK相关的信息,常用的方法有:

  • getPackageManager():获取PackageManager对象。
  • getApplicationInfo():获取指定包名的ApplicationInfo。
  • getApplicationIcon():获取指定包名的Icon。
  • getInstalledApplications():以ApplicationInfo形式返还系统安装的所有应用。
  • getInstalledPackages():以PackageInfo形式返回系统安装的所有引用。
  • queryIntentActivities():返回指定Intent的所有Activity的ResolveInfo对象。
  • queryIntentServices():返回指定Intent的所有Service的ResolveInfo对象。
  • resolveActivity():返回指定Intent的Activity的ResolveInfo对象。
  • resolveService():返回指定Intent的Service的ResolveInfo对象。

ActivityManager

PackageManager主要获取APK的静态信息,而ActivityManager可以获取APP运行时的信息。类似的,ActivityManager也将相关信息封装为对应的对象,比较常用的有:

  • ActivityManager.MemoryInfo
    提供当前系统内存相的关状态信息,提供的字段有:
    availMem:系统可用内存;
    totalMem:总内存;
    threshold:低内存的阈值;
    lowMemory:是否处于低内存;

  • Debug.MemoryInfo
    提供提供某个进程的内存使用信息。

  • RunningAppProcessInfo
    提供运行的进程的信息,提供的字段有:
    processName:进程名;
    pid:进程的pid;
    uid:进程的uid;
    pkgList:该进程下所有的包;

  • RunningServiceInfo
    提供运行的服务的信息,提供的字段有:
    activeSince:第一次激活的时间和方式;
    foreground:服务是否在后台运行;

一般通过以下代码获取ActivityManager对象:

1
2
ActivityManager activityManager = 
(ActivityManager) (getSystemService(Context.ACTIVITY_SERVICE));

Packages.xml

Android系统在初始化的时候,PackageManager的底层实现类PackageManagerService会去扫描系统中的一些特点目录,并解析其中的APK文件,然后,把获取的信息保存在Packages.xml文件中,当系统中的APK进行安装、删除、升级时,这个文件会被更新,它的路径位于/data/system/目录下。

通过Packages.xml文件可以获取APP的很多信息,一般在进行系统层开发时,会通过这个文件获取系统的信息。

坚持原创技术分享,您的支持将鼓励我继续创作!