Android系统信息和安全机制(学习笔记)
2016-01-22 13:00
375 查看
Android系统信息和安全机制
主要内容:Android系统信息的获取
PackageManager的使用
ActivityManager的使用
Android安全机制
1.Android系统信息获取
要获取系统的配置信息,通常可以从以下两个方面获取android.os.Build
SystemProperty
1.1 android.os.Build
android.os.Build类中的信息非常丰富,它包含了系统编译时的大量设备,配置信息:Build.BOARD // 主板
Build.BRAND // Android系统定制商
Build.SUPPORTED_ABIS // CPU指令集
Build.DEVICE // 设备参数
Build.DISPLAY // 显示屏参数
Build.FINGERPRINT // 唯一编号
Build.SERIAL // 硬件序列号
Build.ID // 修订版本列表
Build.MANUUFACTURER //硬件制造商
Build.MODER // 版本
Build.HARDWARE // 硬件名
Build.PRODUCT // 手机产品名
Build.TAGS // 描述Build的标签
Build.TYPE // Builder类型
Build.VERSION.CODENAME // 当前开发代号
Build.VERSION.INCREMENTAL // 源码控制版本号
Build.VERSION.RELEASE // 版本字符串
Build.VERSION.SDK_INT // 版本号
Build.HOST // Host值
Build.USER // User名
Build.TIME // 编译时间
1.2 SystemProperty
SystemProperty包含了许多系统配置属性值和参数,很多信息与上面通过android.os.Build获取的值是相同的:os.version // 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.vender // Java Vender属性
java.version // Java版本
java.home // Java Home属性
1.3 Android系统信息实例
String board = Build.BOARD; String brand = Build.BRAND; String os_version = System.getProperty("os.version"); String os_name = System.getProperty("os.name");
2. Android Apk应用信息获取之PackageManager
2.1 PackageManager
在上图中,最里面的框代表整个Activity的信息,系统提供了ActivityInfo类来进行封装。
最外面的框代表着整个Mainifest文件中节点的信息,系统提供了PackageInfo来进行封装。
而Android系统提供了PackageManager来负责管理所有已安装的App。
ActivityInfo
ActivityInfo封装了在Mainifest文件中和之间的所有信息,包括name,icon,label.launchmode等
ServiceInfo
ServiceInfo与ActivityInfo类似,它封装了之间的所有信息。
ApplicationInfo
ApplicationInfo也是一样,它封装了之间的信息,不过特别的是,ApplicationInfo包含很多Flag,FLAG_SYSTEM表示系统应用,FLAG_EXTERNAL_STORAGE表示安装在SDCard上的应用等,通过这些Flag,可以方便地判断应用的类型。
PackageInfo
PackageInfo与前面三个Info类似,都是用于封装Mainifest文件的相关节点信息,而PackageInfo包含了所有的Activity,Service等信息。
ResolveInfo
ResolveInfo比较特殊,它封装的是包含信息的上一级信息,所以它可以返回ActivityInfo,ServiceInfo等包含的信息,它经常用来帮助我们找到那些包含特定Intent条件的信息,如带分享功能,播放功能的应用。
有了上面这些用于封装的Bean对象后,PackageManager就可以通过调用各种方法,返回不同类型的Bean对象了。PackageManager经常使用方法:
getPackageManager——通过调用这个方法返回PackageManager对象。
getApplicationInfo——以ApplicationInfo的形式返回指定包名 的ApplicationInfo
getApplicationIcon——返回指定包名的Icon
getInstalledApplication——以ApplicationInfo的形式返回安装的应用
getInstalledPackages——以PackageInfo的形式返回安装的应用
queryIntentActivites——返回指定intent的ResolveInfo对象,Activity对象
queryIntentServices——返回指定intent的ResolveInfo对象,Service对象
resolveActivity——返回指定intent的Activity
resolveService——返回指定intent的Service
判断App类型的依据,就是利用ApplicationInfo中的FLAG_SYSTEM来进行判断,代码如下:
app.flags & ApplicationInfo.FLAG_SYSTEM
通过这样的标志区分,可以判断出以下几种不同的应用类型
如果当前应用的flags & ApplicationInfo.FLAG_SYSTEM != 0 则为系统应用。
如果当前应用的flags & ApplicationInfo.FLAG_SYSTEM <= 0 则为第三方应用。
特殊的,当系统应用经过升级后,也将成为第三方应用:flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP != 0 。
如果当前应用的flags & ApplicationInfo.FALG_EXTERNAL_STORAGE != 0 则为安装在SDCard上的应用。
3. Android Apk应用信息获取之ActivityManager
PackageManager重点在于获得应用的包信息,而ActivityManager重点在于获得在运行的应用程序信息。内存信息:
- ActivityManager.MemoryInfo
MemoryInfo有几个非常重要的字段:availMem——系统可用内存,totalMem——总内存,threshold——低内存的阈值,即区分是否低内存的临界值,lowMemory——是否处于低内存。
- Debug.MemoryInfo
ActivityManager.MemoryInfo通常用于获取全局的内存使用信息,而Debug.MemoryInfo用于统计进程下的内存信息。
- RunningAPPProgressInfo
RunningAPPProgressInfo是运行进程的信息,存储的字段是进程相关的信息,progressName——进程名,pid——进程pid,uid——进程uid,pkgList——该进程下的所有包。
- RunningServiceInfo
RunningServiceInfo用于封装运行的服务信息,activeSince——第一次被激活的时间,方式,foreground——服务是否在后台执行。
5. Android安全机制
5.1 Android安全机制简介
Android开发者在Android系统中建立了五道防线来保护Android系统的安全。5.1.1 第一道防线
代码安全机制——代码混淆progrard5.1.2 第二道防线
应用接入权限控制——AndroidMainifest文件权限声明,权限检查机制。5.1.3 第三道防线
应用签名机制——数字证书5.1.4 第四道防线
Linux内核层安全机制——Uid、访问权限控制5.1.5 第五道防线
Android虚拟机沙箱机制——沙箱隔离5.2 Android系统安全隐患
5.2.1 代码漏洞
5.2.2 Root风险
5.2.3 安全机制不健全
5.2.4 用户安全意识
5.2.5 Android开发原则与安全
5.3 Android Apk反编译
三个工具:5.3.1 apktool
5.3.2 Dex2jar、jd-gui
相关文章推荐
- android XML动画初步解析(activity界面之间跳转demo)
- Android 6.0 权限问题
- 发生android.view.ViewRoot$CalledFromWrongThreadException异常和loop循环的添加
- 安卓开发中非常炫的效果集合
- 【Android实测】取系统信息
- Android 常用参考文档
- android lrucache使用
- android DiskLruCache使用方法
- 在Android手机上获取其它应用的包名及版本
- Android -SharedPreferences
- Android Button1.图文混排
- 如何用不同的方式来处理安卓的权限管理?
- Android开发之VideoView
- Fragment的生命周期
- android TV-Working with Channel Data
- LayerDrawable
- Android开发--基础联网框架Xutils3
- 34.Android之资源文件res里drawable学习
- Android学习系列之Volley框架
- Android开发中一些疑难异常解决