《Android群英传》---读书笔记8

《Android群英传》—读书笔记8

标签(): android中级 读书笔记


Android系统信息与安全机制

知识点:
Android系统信息的获取
PackageManager的使用
ActivityManager的使用
Android安全机制

Android系统信息获取

获取系统信息可以通过以下两个方面获取
android.os.Build
SystemProperty

9.1.1 android.os.Build
android.os.Build类里面的信息非常丰富,包含了系统编译时的大量设备信息,配置信息
Build.BOARD//主板
Build.BRAND//Android系统定制商
Build.SUPPORTED_ABIS//CPU指令集
Build.DEVICE//设备参数
等等

9.1.2 SystemProperty
SystemProperty包含了许多系统的配置属性和参数
os.version//OS版本
os.name//OS名称
os.arch//OS架构
os.home//Home属性
user.name//Name属性
path.separator//路径分隔符
line.separator//行分隔符
java.version//Java版本
java.home//Java Home属性

9.1.3 Android 系统信息获取实例
通过android.os.Build类,可以直接获得一些Build提供的系统信息
通过System.getProperty(“XXXX”),我们可以访问到系统的属性值

String board=Build.BOARD;
String brand=Build.BRAND;
String os_version=System.getProperty("os.version");
String os_name=System.getProperty("os.name");

9.2 Android Apk 应用信息获取之PackageManager

9.2.1 PackageManager
Android系统提供PackageManager来管理所有已安装的App
1 ActivituInfo
封装了再Mainifest文件中< activity>和< receiver>之间的信息,包括name, icon, label, launchmod等
2 ServiceInfo
封装了< service>< /service>之间的所有信息
3 ApplicationInfo
封装了< application>之间的信息,不过特别的是,Application包含很多Flag,FLAG_SYSTEM表示为系统应用,FLAG_EXTERNAL_STORAGE表示为安装在SDCard上的应用等
4 PackageInfo
包含了所有的Activity,Service等信息
5 ResolveInfo
它封装的是包含< intent>信息的上一级信息,所以它可以返回ActivityInfo,ServiceInfo等包含< intent>的信息,它经常用来帮助我们找到包含特定Intent条件的信息,如带分享功能,播放功能的应用

PackageManager可以通过调用各种方法返回前面提到的各种Bean对象,常用方法如下:
getPackageManager:
getApplicationInfo:返回指定包名的ApplicationInfo
getApplicationIcon:返回指定包名的Icon
getInstalledApplication:以ApplicationInfo的形式返回安装的应用
getInstallPackages:以PackageInfo的形式返回安装的应用
queryIntentAcitivities:返回指定intent的ResolveInfo对象,Activity集合
queryIntentServices:返回指定intent的ResolveInfo对象,Service集合
resolveActivity:返回指定intent的Activity
resolveService:返回指定intent的Service

判断App类型的时候可以通过
app.flags&Application.FlAG_SYSTEM来判断
当!=0时为系统应用
当<=0时为第三方应用
注意当系统应用经过升级后,也将成为第三方应用:app.flags&ApplicationInfo.FLAG_UPDATED_SYSTEM_APP!=0;
当flags&ApplicationInfo.FLAG_EXTERNAL_STORAGE!=0时为安装在SDCard上的应用

9.3 Android Apk应用信息获取之ActivityManager

PackageManager重点在于获得应用的包信息,而ActivityManager重点在于获得在运行的应用程序信息,ActivityManager也封装了不少Bean对象:

1 ActivityManager.MemoryInfo
即内存信息,MemoryInfo有几个非常重要的字段:availMem—系统可用内存,totalMem—总内存,threshold低内存阀值,lowMemory—是否处于低内存
2 Debug.MemoryInfo
ActivityManager.MemoryInfo通常用于获取全局的内存使用信息,而Debug.MemoryInfo用于统计进程下的内存信息
3 RunningAppProcessInfo
运行进程的信息,储存的字段与进程相关,processName
pid—进程pid,uid—进程uid,pkgList—该进程下所有包
4 RunningServiceInfo
与RunningAppProcessInfo类似,用于封装运行的服务信息,除开一些服务的进程信息,同时还有一些其他信息。activeSince—第一次被激活的时间,方式,foreground—服务是否在后台执行

解析Packages.xml获取系统信息

packages.xml位于/data/system/目录下,保存了系统所有的Apk信息

9.5 Android 安全机制


9.5.3 Android Apk反编译:三个常用工具apktool,Dex2jar,jd-gui,

9.5.4 Android Apk加密
通常使用ProGuard来对Apk进行混淆处理,在Android Studio中,打开Gradle Scripts文件夹下的build.gradle(Module:app)文件,其中minifyEnabled属性就是控制是否启用ProGuard的开关;proguardFiles用于配置混淆文件,分为系统默认的混淆文件和自定义的混淆文件(可以自定义引入第三方依赖包的混淆规则),大多数情况下使用默认的混淆文件就可以了。
配置好ProGuard之后,只要使用AS导出Apk时,即可产生混淆

  buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值