首页 > 代码库 > System APP 与普通 APP 简析
System APP 与普通 APP 简析
在 Android 系统里,有两种类型的 App 存在,一种是系统级 App ,比如打电话,发短信,拍照等等,这些 App 最明显的特点就是 普通方法不可以卸载。另一种是普通 App ,用户从应用市场上下载主动安装的 App ,这样的 APP 可以卸载。
系统 App 和普通 App 还有很多其他重要的区别,主要体现在一下几个方面
- 安装位置
系统 App 默认安装在系统根目录 /system/app/ 目录下
普通 App 默认安装在内存目录 /data/data/app/ 目录下 - 广播接受权限
什么是广播接受权限?简单来说,在 Android 3.0 之后,Google 采取一些安全措施,对于没有被用户主动打开的 App 处于静默状态,收不到系统发送的广播信息(各种广播信息,开机,锁屏,网络变化等)。这样防止一些病毒类的 App 主动下载后自动打开运行。在 Android 2.3 以及之前的版本没有这个措施。
BTW,这个限制是针对普通 App 的 ,对于系统 App,即使没有被用户打开过,也还是可以收到各种广播信息。 - 是否可卸载
在没有 root 权限时,系统 App 默认是不可以卸载的。普通 App 用户具有完全的操作权限。用过一些无良厂商的定制手机的都知道,总有一些无聊的什么移动商城,沃商城之类的东西,无法删除,这些都是厂商定制的预装系统 App ,没有 root 权限,无法卸载 。 - 安装位置的标记值
Android SDK 有开放接口获取APP 安装位置,系统 APP 和普通 APP 返回值不同 ,以此可以判断 APP 是系统 APP 还是普通 APP 。
获取 安装位置的方法
/** * *判断当前 App 是否为 系统 APP * */ public static boolean isSystemApp(Context context){ boolean isSystem = false; if(context != null ){ String packageName = context.getPackageName(); try{ PackageInfo packageInfo = context.getPackageManager().getPackageInfo(packageName,0); if((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYST) != 0){ isSystem = false ; }else{ isSystem = true ; } }catch(NameNotFoundException e){ isSystem = false ; } return isSystem; } }
系统 App 制作
上面说了系统 APP 那么多的好处,怎么才能让我们的APP 变成系统 APP 呢?下面介绍两个方法
1.制作 ROM
这个比较麻烦,工作量相对较大,好处是制作完成之后以后都无需在改变。现在给大家介绍个投机取巧的方法,在华为 u8950D 上用官方的 ROM 测试 也是可以的。
a.下载适合手机的 ROM卡刷包
b.用压缩包的形式打开 ROM 文件 ,依次打开/system/app 目录,这时会看到很多系统的 apk 文件。
c.将我们自己的 apk 直接拖进去,这是就可以看到我们自己的 APP 在 system/app 目录下。如果里面有不喜欢的 APP ,可以直接拖出来即可。
这样的方式修改 Rom 压缩文件,ROM 的签名信息 并没有修改,还是可以刷到手机上,正常使用。
对于深度定制修改是手机和系统没有测试,如小米 ,魅族等。在华为 u8950D 测试通过。
2.移动apk 文件位置
默认情况下普通 APP 安装在内存 data/data/app 目录或者 SD卡 下。可以通过第三方软件移动 APk 位置,这样我们的 APP 也具有了系统 APP 的属性和功能。
前提条件
a.安装要移动的 APP
b.手机具有 root 权限
c.安装有第三方文件浏览器,推荐 ES 文件浏览器。
满足这几个条件,具体操作就很简单啦。
- 用 ES 文件浏览器找到我们 APP 的安装位置,一般在根目录 /data/data/app 下,点击选中长按,选中剪切-->切换到 system/app 目录 ,选中粘贴
- 重启手机,即可。
使用场景说明:
普通的用户或者一般的 APP ,是没有这样的需求的。什么情况下我们会用到移动我们安装 APP 的 位置呢 ?
需求描述:在第三方刷机渠道,推广自有 App ,要去统计这个渠道有多少推广用户,这些用户累计在手机上停留时间。
需求解析:统计推广的用户数量,需要在用户刷上 ROM 后,第一次开机向服务端发送到达统计数据,标识这个用户已经是一个推广用户。第一次开机时,我们的 APP 并没有启动,如果不是系统 APP ,是收不到系统的各种广播事件。
针对这个需求的测试,如果要是使用第一种方法,工作量和时间都会很长,如果使用第二种方法,会提高效率,同时减轻很多工作量。
关于系统APP和普通APP 的介绍就这些,有什么问题欢迎大家交流
System APP 与普通 APP 简析