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
);
|
05
|
int
installedNum =
0
;
|
06
|
for
(
int
i =
0
; i < count; i++) {
|
07
|
PackageInfo p = packs.get(i);
|
08
|
if
(p.versionName ==
null
)
|
02
|
File f1 =
new
File(
"/data/app/"
+ p.packageName +
".apk"
);
|
03
|
if
(!f1.exists())
continue
;
|
09
|
name = p.applicationInfo.loadLabel(pckMan).toString();
|
方法三
、可以通过uid来过滤系统系统的安装包,因为android系统中的uid从 1000 ~ 9999 都是给系统程序保留的,所以只要判断package的uid > 10000即可判定该程序是非系统程序。
1
|
if
(p.applicationInfo.uid >
10000
)
|
uid是程序在安装的时候由系统分配的。
方法四:这个方法应该是最优的。
1
|
ApplicationInfo appInfo = p.applicationInfo;
|
3
|
* Value for {@link #flags}: if set, this application is installed in the
|
4
|
* device's system image.
|
6
|
if
((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) >
0
)
|
//不是系统程序
Android源码上的方法
com/android/settings/ManageApplications.java
分享到:
相关推荐
在组织上,《Android系统源代码情景分析(含CD光盘1张)》将上述内容划分为初识Android系统、Android专用驱动系统和Android应用程序框架三大篇。初识Android系统篇介绍了参考书籍、基础知识以及实验环境搭建;...
在组织上,本书将上述内容划分为初识Android系统、Android专用驱动系统和Android应用程序框架三大篇。初识Android系统篇介绍了参考书籍、基础知识以及实验环境搭建;Android专用驱动系统篇介绍了Logger日志驱动程序...
在组织上,本书将上述内容划分为初识Android系统、Android专用驱动系统和Android应用程序框架三大篇。初识Android系统篇介绍了参考书籍、基础知识以及实验环境搭建;Android专用驱动系统篇介绍了Logger日志驱动程序...
本文详细介绍了如何在Android模拟器上安装和卸载应用程序的过程。安装过程涉及到使用ADB工具通过命令行安装APK文件,而卸载则可以通过模拟器内置的设置菜单完成。这些步骤对于开发者来说非常重要,因为它们可以帮助...
在组织上,本书将上述内容划分为初识Android系统、Android专用驱动系统和Android应用程序框架三大篇。初识Android系统篇介绍了参考书籍、基础知识以及实验环境搭建;Android专用驱动系统篇介绍了Logger日志驱动程序...
应用程序框架层主要包括系统服务,例如组件管理服务、应用程序安装服务、窗口管理服务、多媒体服务和电信服务等。应用程序框架进一步又分为C/C++和Java两个层次,Java代码运行Dalvik虚拟机之上,并且通过JNI方法和C/...
在组织上,本书将上述内容划分为初识Android系统、Android专用驱动系统和Android应用程序框架三大篇。初识Android系统篇介绍了参考书籍、基础知识以及实验环境搭建;Android专用驱动系统篇介绍了Logger日志驱动程序...
罗升阳,2007年毕业于浙江大学计算机系,2010年毕业于上海交通大学计算机系,在国内知名IT技术社区CSDN上发表了数十篇高质量的Android系统原创性文章,并且开设博客专栏--《老罗的Android之旅。 在内容上,本书结合...
Android 操作系统中,将自己的应用程序改为系统应用,可以使得应用程序具有更高的权限和更好的性能。本文将详细介绍如何将自己的应用程序改为系统应用的步骤。 第一步:准备工作 首先,需要将手机数据线插上,并将...
通过分析和研究这些源代码,开发者可以了解到如何在Android环境中实现一个功能完备的记账系统。 首先,`.classpath`文件是Eclipse IDE的一个配置文件,它包含了项目所依赖的Java类库和Android SDK的版本信息。这个...
嵌入式Linux系统学习者:将Android作为一个集Linux核心和应用层程序于一体的系统进行学习,并可以利用Android的仿真环境运行和调试程序。 读者在学习本书的过程中,应尽量对照本书的框图和手头的Android源代码,...
在Android操作系统中,触摸屏是用户与设备交互的主要方式,因此对触摸屏的测试是确保应用和设备质量的关键环节。"android触摸屏测试程序"是一个专门用于检测Android设备触摸屏性能和功能的工具,它可以帮助开发者、...
在Android应用开发中,用户身份验证是至关重要的环节,它涉及到客户端与服务器端的交互,确保用户的安全登录和注册。本示例项目“android登陆注册客户端与服务器端程序”提供了一个完整的解决方案,覆盖了从客户端...
Android应用程序框架篇从组件、进程、消息以及安装四个维度来对Android应用程序的框架进行了深入的剖析。 通过上述内容及其组织,本书能使读者既能从整体上把握Android系统的层次结构,又能从细节上去掌握每一个层次...
本教程将详细介绍如何在Windows操作系统上使用Android Studio搭建开发环境并创建第一个Android程序。 首先,确保你已经安装了Java Development Kit (JDK),因为Android开发离不开Java语言的支持。在安装Android ...
在Android平台上,小程序是一种轻量级的应用形式,它允许开发者快速构建功能丰富的应用程序,而无需安装。本资源“android小程序源码”旨在为初学者提供一个学习和实践Android开发的平台,尤其对于刚接触Android编程...
本篇文章将深入探讨Android的底层库和程序,包括它们的结构组成、核心组件以及如何添加本地程序和库等内容。 #### 二、Android底层库和程序的结构 Android的底层主要由一系列库和程序构成,这些库和程序支持着整个...
Android应用程序主要由代码和资源组成。资源主要就是指那些与UI相关的东西,例如UI布局、字符串和图片等。代码和资源分开可以使得应用程序在运行时根据实际需要来组织UI。这样就可使得应用程序只需要编译一次,就...
在组织上,本书将上述内容划分为初识Android系统、Android专用驱动系统和Android应用程序框架三大篇章。初识Android系统篇介绍了参考书籍、基础知识以及实验环境搭建;Android专用驱动系统篇介绍了Logger日志驱动...
在Android程序开发中,有时我们需要在应用程序内部执行一些系统级别的操作,这通常涉及到与底层Linux系统的交互。Android Debug Bridge(ADB)就是一个强大的工具,允许开发者从计算机上对连接的Android设备进行各种...