获取系统信息
通常可以通过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 | ActivityManager activityManager = |
Packages.xml
Android系统在初始化的时候,PackageManager的底层实现类PackageManagerService会去扫描系统中的一些特点目录,并解析其中的APK文件,然后,把获取的信息保存在Packages.xml文件中,当系统中的APK进行安装、删除、升级时,这个文件会被更新,它的路径位于/data/system/目录下。
通过Packages.xml文件可以获取APP的很多信息,一般在进行系统层开发时,会通过这个文件获取系统的信息。