首页 > 代码库 > System APP 与普通 APP 简析

System APP 与普通 APP 简析


在 Android 系统里,有两种类型的 App 存在,一种是系统级 App ,比如打电话,发短信,拍照等等,这些 App 最明显的特点就是 普通方法不可以卸载。另一种是普通 App ,用户从应用市场上下载主动安装的 App ,这样的 APP 可以卸载。
    

系统 App 和普通 App 还有很多其他重要的区别,主要体现在一下几个方面

  1. 安装位置

    系统 App 默认安装在系统根目录 /system/app/ 目录下
    普通 App 默认安装在内存目录 /data/data/app/ 目录下
  2. 广播接受权限
    什么是广播接受权限?简单来说,在 Android 3.0 之后,Google 采取一些安全措施,对于没有被用户主动打开的 App 处于静默状态,收不到系统发送的广播信息(各种广播信息,开机,锁屏,网络变化等)。这样防止一些病毒类的 App 主动下载后自动打开运行。在 Android 2.3 以及之前的版本没有这个措施。
    BTW,这个限制是针对普通 App 的 ,对于系统 App,即使没有被用户打开过,也还是可以收到各种广播信息。
  3. 是否可卸载
    在没有 root 权限时,系统 App 默认是不可以卸载的。普通 App 用户具有完全的操作权限。用过一些无良厂商的定制手机的都知道,总有一些无聊的什么移动商城,沃商城之类的东西,无法删除,这些都是厂商定制的预装系统 App ,没有 root 权限,无法卸载 。
  4. 安装位置的标记值
    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 文件浏览器。

满足这几个条件,具体操作就很简单啦。

  1. 用 ES 文件浏览器找到我们 APP 的安装位置,一般在根目录 /data/data/app 下,点击选中长按,选中剪切-->切换到 system/app 目录 ,选中粘贴
  2. 重启手机,即可。

使用场景说明:

普通的用户或者一般的 APP ,是没有这样的需求的。什么情况下我们会用到移动我们安装 APP 的 位置呢 ?

需求描述:在第三方刷机渠道,推广自有 App ,要去统计这个渠道有多少推广用户,这些用户累计在手机上停留时间。

需求解析:统计推广的用户数量,需要在用户刷上 ROM 后,第一次开机向服务端发送到达统计数据,标识这个用户已经是一个推广用户。第一次开机时,我们的 APP 并没有启动,如果不是系统 APP ,是收不到系统的各种广播事件。

针对这个需求的测试,如果要是使用第一种方法,工作量和时间都会很长,如果使用第二种方法,会提高效率,同时减轻很多工作量。

关于系统APP和普通APP 的介绍就这些,有什么问题欢迎大家交流









System APP 与普通 APP 简析