系统消息
Android系统消息获取
获取Android系统信息,代码中可以两个方面获取 android.os.Build System.Property。
当然,也可以通过手机ADB来获取设备信息,在/proc目录中查看,或者使用getprop命令
android.os.Build
包含系统编译时大量设备,配置信息 例如 Build.BRAND//Android系统定制商 Build.DEVICE //设备参数 Build.FINGERPRINT //唯一编号 Build.Model //版本 Build.SERLAL //硬件设备序列号 这个参数之前一个项目中应用到过 还有其他参数,使用时查寻即可
SystemProperty
也是包含系统的一些配置属性值和参数,许多获取值和上面的os.Build是一样的。常用的有系统版本,java版本,java Class版本等属性。
Android apk 应用信息获取
查看apk应用信息,有两个强大的助手,PM(PackageManger)和AM(ActivityManger),这两个也是ADB的两个指令集。我们这里讨论如何在代码中使用他们获取应用信息。二者各有侧重
PackageManager
PackageManger主要管理mainifest文件里的信息,包含Activity的配置信息以及mainnifset文件的节点信息。这些信息被封装在一些类里面,我们可以获取使用。
- ActivityInfo:包含 < activity > 标签和< receiver>标签里的所有信息。例如name,icon,label,launchmod等等。
- ServiceInfo:包含< service>里的信息
- AplicationInfo:包含< application>里的所有信息,这里面包含许多Flag,例如FLAG_SYSTEM表示系统应用,FLAG_EXTERNAL_STORAGE表示安装在sd卡上的应用,这些Flag,可以用来判断应用类型。
- PackageInfo:包含mainnifest文件里 所有 activity与service的信息
- ResolveInfo:封装< intent>上一级的信息,可以是ActivityInfo和ServiceInfo等包含Intent的信息。用来帮助我们找到那些包含特定Intent条件的信息,比如分享功能,播放功能。需要去学习一下intent-filter 标签的知识
RespvleageInfo的应用
https://blog.csdn.net/wang_yubin/article/details/8564335?_t_t_t=0.8696009771752313
知道这些类的意义之后,只用根据功能,通过相应的方法获取到类,然后解析使用即可。具体使用可以看书里的例子。
ActivityMangaer
PackageManager重点在于获取应用包信息(mainnifest文件节点信息),ActivityManager重点获取运行的应用信息。
内存信息:
- ActivityManager.MemoryInfo: 全局内存信息,包含十分重要的字段,availMem-系统可用内存,totalMerm-总内存,threshold-低内存阈值,lowMermory-是否处于低内存
- Debug.MemoryInfo:系统进程下的内存信息
- RunningAppProcessInfo:运行进程信息,processName-进程名,pid-进程pid(进程唯一标识),uid-进程uid(一般表示进程的创建者)。pkgList-该进程下的所有包
- RunningServiceInfo:封装运行的服务信息,包含一些服务进程信息,例如activeSince-服务 被第一次激活的世界,方式。forground-服务是否在后台运行。
Packages.xml文件解析
该文件相当与系统的应用花名册,系统apk进行安装,升级,删除时,它会被更新。目录位于/data/system/ 可以通过ADB Pull命令将它导入本地。
-
< Permissions>标签:定义目前系统所以权限,包含系统的和apk自定义的 -
< Package>标签:代表一个apk的属性,包含包名与路径(厂商app和三方app目录不同)等等 -
< perms>:对应mainnifest文件中的标签
Android安全机制
Android安全机制
五道防线
- 代码混淆 proguard:混淆关键代码,压缩代码,优化编译后的字节码。代码混淆在开发中是一定会使用到的,需要进行学习。
- 权限控制:AndroidMainifest文件权限声明,权限检查机制。一般使用者,会使用permissionX等框架进行权限动态申请。
- 应用签名机制-数字证书:app签名用于保护作者对其app的信任关系,只有拥有相同数字签名的app,才被认为是同一App。安卓系统不会安装没有签名的app。
- Linux内核层安全机制-Uid,访问权限控制:安卓继承linux的安全特性,文件访问机制-user,group,other与读(r),写(w),执行(x)的不同组合实现权限控制。一般只有system和root用户才能访问系统文件
- 安卓虚拟机-沙箱隔离:每个安卓app运行在单独的虚拟机中,使得应用之间相互隔离,通常情况下,不能相互访问。一个应用崩溃,也不会导致其他app异常。
一些apk反编译工具的介绍,安卓安全隐患,见书里。
|