`
y13872888163
  • 浏览: 17718 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Android中级篇之区分系统程序和安装程序

 
阅读更多

Android中级篇之区分系统程序和安装程序

2011-05-20 21:37:08

出处:http://www.cnblogs.com/mengshu-lbq/archive/2010/09/09/1822237.html

在google上输入以上的关键字+ android,可以搜到的代码:

1 List<PackageInfo> packs = getPackageManager().getInstalledPackages( 0 );

虽然,有些代码号称可以过滤掉系统自身的应用程序,但是只要细看代码就会发现,好像里面的那个布尔变量没有起到什么过滤的作用。

  方法一 :通过获取的安装包(包括安装的与系统自身的应用程序),对其android.content.pm.PackageInfo的packageName 进行过滤,

但是Anrodi与google的包比较容易过滤掉,但需要对不同产商进行适配;

  方法二 :枚举 /data/app 文件夹,其下的*.apk文件 就是本机安装的软件,而/system/App下的*.apk文件就是系统自带的软件,

由于普通的程序是无法读取这两个文件夹的,需要root权限吧,因此该方法也行不通(用File.listFiles() + android.permission.FACTORY_TEST 权限 还是不能枚举出文件)

虽然不能枚举文件夹 "/data/app/",但我们可以访问(read)文件夹"/data/app/"下的所有文件,因此可以用如下的方法来获取本机上已经安装的软件(排除系统的应用程序):

01 PackageManager pckMan = getPackageManager();
02 List<PackageInfo> packs = pckMan.getInstalledPackages( 0 );
03 count = packs.size();
04 String name;
05 int installedNum = 0 ;
06 for ( int i = 0 ; i < count; i++) {
07 PackageInfo p = packs.get(i);
08 if (p.versionName == null )
09 continue ;
10
01 //判断该软件包是否在/data/app目录下
02 File f1 = new File( "/data/app/" + p.packageName + ".apk" );
03 if (!f1.exists()) continue ;
04
05 installedNum++;
06 /**
07 * 应用程序的名字
08 */
09 name = p.applicationInfo.loadLabel(pckMan).toString();
10 }

方法三 、可以通过uid来过滤系统系统的安装包,因为android系统中的uid从 1000 ~ 9999 都是给系统程序保留的,所以只要判断package的uid > 10000即可判定该程序是非系统程序。

1 if (p.applicationInfo.uid > 10000 )
2 //非系统程序

uid是程序在安装的时候由系统分配的。

方法四:这个方法应该是最优的。

1 ApplicationInfo appInfo = p.applicationInfo;
2 /**
3 * Value for {@link #flags}: if set, this application is installed in the
4 * device's system image.
5 */
6 if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) > 0 )
7 //系统程序
8 else

//不是系统程序



Android源码上的方法 com/android/settings/ManageApplications.java


分享到:
评论

相关推荐

    Android系统源代码情景分析 / 罗升阳著

     在组织上,《Android系统源代码情景分析(含CD光盘1张)》将上述内容划分为初识Android系统、Android专用驱动系统和Android应用程序框架三大篇。初识Android系统篇介绍了参考书籍、基础知识以及实验环境搭建;...

    罗升阳-Android系统源代码情景分析(带书签完整高清版).pdf

    在组织上,本书将上述内容划分为初识Android系统、Android专用驱动系统和Android应用程序框架三大篇。初识Android系统篇介绍了参考书籍、基础知识以及实验环境搭建;Android专用驱动系统篇介绍了Logger日志驱动程序...

    Android系统源代码情景分析》光盘内容

    在组织上,本书将上述内容划分为初识Android系统、Android专用驱动系统和Android应用程序框架三大篇。初识Android系统篇介绍了参考书籍、基础知识以及实验环境搭建;Android专用驱动系统篇介绍了Logger日志驱动程序...

    android模拟器上应用程序的安装与卸载

    本文详细介绍了如何在Android模拟器上安装和卸载应用程序的过程。安装过程涉及到使用ADB工具通过命令行安装APK文件,而卸载则可以通过模拟器内置的设置菜单完成。这些步骤对于开发者来说非常重要,因为它们可以帮助...

    Android系统源代码情景分析 [罗升阳 著] [高清版 带书签 840页]

    在组织上,本书将上述内容划分为初识Android系统、Android专用驱动系统和Android应用程序框架三大篇。初识Android系统篇介绍了参考书籍、基础知识以及实验环境搭建;Android专用驱动系统篇介绍了Logger日志驱动程序...

    Android系统架构概述PPT

    应用程序框架层主要包括系统服务,例如组件管理服务、应用程序安装服务、窗口管理服务、多媒体服务和电信服务等。应用程序框架进一步又分为C/C++和Java两个层次,Java代码运行Dalvik虚拟机之上,并且通过JNI方法和C/...

    Android系统源代码情景分析 [罗升阳著]

    在组织上,本书将上述内容划分为初识Android系统、Android专用驱动系统和Android应用程序框架三大篇。初识Android系统篇介绍了参考书籍、基础知识以及实验环境搭建;Android专用驱动系统篇介绍了Logger日志驱动程序...

    Android系统源代码情景分析 【罗升阳】

    罗升阳,2007年毕业于浙江大学计算机系,2010年毕业于上海交通大学计算机系,在国内知名IT技术社区CSDN上发表了数十篇高质量的Android系统原创性文章,并且开设博客专栏--《老罗的Android之旅。 在内容上,本书结合...

    android 将自己的应用改为系统应用

    Android 操作系统中,将自己的应用程序改为系统应用,可以使得应用程序具有更高的权限和更好的性能。本文将详细介绍如何将自己的应用程序改为系统应用的步骤。 第一步:准备工作 首先,需要将手机数据线插上,并将...

    Android个人记账程序源码

    通过分析和研究这些源代码,开发者可以了解到如何在Android环境中实现一个功能完备的记账系统。 首先,`.classpath`文件是Eclipse IDE的一个配置文件,它包含了项目所依赖的Java类库和Android SDK的版本信息。这个...

    android系统原理及开发要点详解

     嵌入式Linux系统学习者:将Android作为一个集Linux核心和应用层程序于一体的系统进行学习,并可以利用Android的仿真环境运行和调试程序。  读者在学习本书的过程中,应尽量对照本书的框图和手头的Android源代码,...

    android触摸屏测试程序

    在Android操作系统中,触摸屏是用户与设备交互的主要方式,因此对触摸屏的测试是确保应用和设备质量的关键环节。"android触摸屏测试程序"是一个专门用于检测Android设备触摸屏性能和功能的工具,它可以帮助开发者、...

    android登陆注册客户端与服务器端程序

    在Android应用开发中,用户身份验证是至关重要的环节,它涉及到客户端与服务器端的交互,确保用户的安全登录和注册。本示例项目“android登陆注册客户端与服务器端程序”提供了一个完整的解决方案,覆盖了从客户端...

    Android系统源代码情景分析 PDF 完整版 ZIP.002(二个压缩包)

    Android应用程序框架篇从组件、进程、消息以及安装四个维度来对Android应用程序的框架进行了深入的剖析。 通过上述内容及其组织,本书能使读者既能从整体上把握Android系统的层次结构,又能从细节上去掌握每一个层次...

    搭建Android开发环境和构建第一个Android程序(Android studio版)

    本教程将详细介绍如何在Windows操作系统上使用Android Studio搭建开发环境并创建第一个Android程序。 首先,确保你已经安装了Java Development Kit (JDK),因为Android开发离不开Java语言的支持。在安装Android ...

    android小程序源码

    在Android平台上,小程序是一种轻量级的应用形式,它允许开发者快速构建功能丰富的应用程序,而无需安装。本资源“android小程序源码”旨在为初学者提供一个学习和实践Android开发的平台,尤其对于刚接触Android编程...

    【Android系统原理与开发要点详解】04_Android的底层库和程序

    本篇文章将深入探讨Android的底层库和程序,包括它们的结构组成、核心组件以及如何添加本地程序和库等内容。 #### 二、Android底层库和程序的结构 Android的底层主要由一系列库和程序构成,这些库和程序支持着整个...

    Android应用程序资源管理框架 PPT

    Android应用程序主要由代码和资源组成。资源主要就是指那些与UI相关的东西,例如UI布局、字符串和图片等。代码和资源分开可以使得应用程序在运行时根据实际需要来组织UI。这样就可使得应用程序只需要编译一次,就...

    《Android系统源代码情景分析》 PDF

    在组织上,本书将上述内容划分为初识Android系统、Android专用驱动系统和Android应用程序框架三大篇章。初识Android系统篇介绍了参考书籍、基础知识以及实验环境搭建;Android专用驱动系统篇介绍了Logger日志驱动...

    Android程序中(APK程序)执行Adb shell 命令

    在Android程序开发中,有时我们需要在应用程序内部执行一些系统级别的操作,这通常涉及到与底层Linux系统的交互。Android Debug Bridge(ADB)就是一个强大的工具,允许开发者从计算机上对连接的Android设备进行各种...

Global site tag (gtag.js) - Google Analytics