Android群英传学习——第九章、Android系统信息与安全机制

1、Android系统信息获取1、1 android.os.Buildandroid.os.Build类里面的信息非常丰富,它包含了系统编译时的大量设备、配置信息,下面列举了一些常用的信息:● Build.BOARD //主板● Build.BRAND //Android系统定制商● Build.SUPPORTED_ABIS //CPU指令集● Build.DEVICE //设备参数● B
摘要由CSDN通过智能技术生成

1、Android系统信息获取

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.MANUFACTURER //硬件制造商
● Build.MODEL //版本
● 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.vendor //Java Vender属性
● java.version //Java版本
● java.home //Java Home属性

1、3 Android系统信息实例

1)代码获得系统属性

通过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");

2)命令行/system目录

打开命令行窗口,进入/system目录,通过cat build.prop命令查看文件信息。

3)命令行 getprop

在adb shell中,还可以通过getprop来获取对应属性的值。

这里写图片描述

4)命令行/proc

Android系统还有另外一个非常重要的目录来存储系统信息——/prop目录,在adb shell中进入/prop目录,通过ll命令查看文件信息。

2、Android Apk应用信息获取之PackageManager

上一节我们将Android的系统信息翻了个遍,却没来得及查看Apk应用信息。所以我们现在来看看如何获取Apk应用程序的相关信息。

在ADB Shell命令中,提到应用相关的东西,我们会想到两个非常强大的助手——PM和AM命令。PM(PackageManager),AM(ActivityManager),PM主宰着应用的包管理,而AM则主宰着应用的活动管理。

2、1 PackageManager

下面我们通过实例来看一下,如何通PackageManager来获得应用的包信息。首先,让我们来看一下PackageManager到底管些什么呢?
这里写图片描述

在上图中,最里面的框代表了整个Activity的信息,系统提供了ActivityfInfo类来进行封装。
最外边的框代表着整个Mainifest文件中节点的信息,系统提供了PackageInfo来进行封装。
而Android系统提供了PackageManager来负责管理所有已安装的APP。

这些封装信息,就像我们自己封装的Bean对象一样,用来封装程序的相关信息,下面列举了一些常用的系统封装信息。

●ActivityInfo
ActivityInfo封装了在Mainifest文件中<activity></activity>和<receiver></receiver>之间的所有信息,包括name、icon、label、launchmod等。

●ServiceInfo
ServiceInfo与ActivityInfo类似,它封装了<service></service>之间的所有信息。

●ApplicationInfo
ApplicationInfo也是一样,它封装了<application></application>之间的信息,不过特别的是,Application包含很多Flag,FLAG_SYSTEM表示为系统应用,FLAG_EXTERNAL_STORAGE表示为安装在SDCard上的应用等,通过这些Flag,可以很方便地判断应用的类型。

●PackageInfo
PackageInfo与前面三个Info类类似,都是用于封装Mainifest文件的相关节点信息,而PackageInfo包含了所有的Activity、Service等信息。


●ResolveInfo
ResolveInfo比较特殊,它封装的是包含<intent>信息的上一级信息,所以它可以返回ActivityInfo、ServiceInfo等包含<intent>的信息,它经常用来帮助我们找到那些包含特定Intent条件的信息,如带分享功能、播放功能的应用。

有了上面这些用于封装的Bean对象之后,PackageManager就可以通过调用各种方法,返回不同类型的Bean对象了。PackageManager经常使用以下方法。

●getPackageManager:通过调用这个方法返回一个PackageManager对象。
●getApplicationInfo:以ApplicationInfo的形式返回指定包名的ApplicationInfo。
●getApplicationIcon:返回指定包名的Icon。
●getInstalledApplications:以ApplicationInfo的形式返回安装的应用。
●getInstalledPackages:以PackageInfo的形式返回安装的应用。
●queryIntentActivities:返回指定intent的ResolveInfo对象、Activity集合。
●queryIntentServices:返回指定intent的ResolveInfo对象、Service集合。
●resolveActivity:返回指定intent的Activity。
●resolveService:返回指定intent的Service。

看了这么多眼花缭乱的方法后,让我们来看一个实际的例子,了解一下该如何通过PackageManager筛选不同类型的App。
判断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。
●如果当前应用的flag & Application.FLAG_EXTERNAL_STORAGE != 0 则为安装在SDCard上的应用。
代码部分
PMAppInfo.java

封装一个Bean来保存我们需要的字段。

public class PMAppInfo {
    private String appLabel;
    private Drawable appIcon;
    private String pkgName;

    public  PMAppInfo(){

    }

    public String getAppLabel() {
        return appLabel;
    }

    public void setAppLabel(String appLabel) {
        this.appLabel = appLabel;
    }

    public Drawable getAppIcon() {
        return appIcon;
    }

    public void setAppIcon(Drawable appIcon) {
        this.appIcon = appIcon;
    }

    public String getPkgName() {
        return pkgName;
    }

    public void setPkgName(String pkgName) {
        this.pkgName = pkgName;
    }
}
PMAdapter.java

为列表设置适配器。

public class PMAdapter extends BaseAdapter {
   

    private List<PMAppInfo> mAppInfoList = null;
    private LayoutInflater mInflater = null;

    public PMAdapter(Context context) {
        mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mAppInfoList = new ArrayList<PMAppInfo>();
    }

    public void addData(List<PMAppInfo> appInfoList){
        mAppInfoList.clear();
        mAppInfoList.addAll(appInfoList);
        notifyDataSetChanged();
    }

    @Override
    public int getCount() {
        return mAppInfoList.size();
    }

    @Override
    public Object getItem(int position) {
        return mAppInfoList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        if (convertView == null) {
            holder = new ViewHolder();
            convertView = mInflater.inflate(R.layout.item_pm, null);
            holder.appIcon = (ImageView) convertView.findViewById(R.id.imageView_icon);
            holder.appLabel = (TextView) convertView.findViewById(R.id.textView_label);
            holder.appPackage = (TextView) convertView.findView
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值