系统应用

Android有一套电子邮件、短信、日历、互联网浏览和联系人等的核心应用。平台的应用与用户可以选择安装的应用一样,没有特殊状态。因此第三方应用可成为用户的默认网络浏览器、短信 Messenger 甚至默认键盘(有一些例外,例如系统的“设置”应用)。
系统应用可用作用户的应用,以及提供开发者可从其自己的应用访问的主要功能。例如,如果您的应用要发短信,您无需自己构建该功能,可以改为调用已安装的短信应用向您指定的接收者发送消息。

简而言之,“该应用是作为预安装的或作为system.img(作为Android操作系统的AOSP系统映像)提供的,称为系统App。 系统应用程序可以轻松访问某些平台(应用程序框架)级的API调用”。
系统应用程序是ROM在系统分区中的预安装应用程序。 换句话说,系统应用程序就是放置在Android设备上/ system / app文件夹下的应用程序。
/ system / app是只读文件夹。 Android设备用户无权访问此分区。 因此,用户无法直接从中安装或卸载应用程序。
手机预装了相机,设置,消息,Google Play商店等应用,制造商通常不提供删除此类应用的选项,因为这可能会影响设备的功能。 如果要删除系统应用程序,则需要先对设备进行root用户操作。

系统应用安装位置

Android系统应用通常放在/system/app和/system/priv-app中,priv-app中拥有更高的权限,应用安装到系统有两种方式;
一、系统整体编译
应用的Android.mk声明LOCAL_PRIVILEGED_MODULE := true,这样通过mk编译出的apk将打包到img,img烧写后开机自动安装在/system/priv-app。
二、push外部开发的应用到/system/priv-app
1、可以按照Android studio编译出未签名的apk
2、导出系统中签名,并将apk签名
3、adb root; adb remount; adb push new.apk /system/priv-app
4、reboot后会自动安装

/system/app和/system/priv-app区别

在system/priv-app目录主要是存放手机厂商定制的系统的系统级应用,比如phone app,settings app,systemui app等,这些应用需要系统及权限,而又不能被用户卸载掉。这个目录是在Android KitKat新增加的分区。在KitKat之前版本在系统分区的所有apks都可以使用系统权限,这个更改使手机厂商能够更好的控制捆绑软件对敏感权限的访问。手机厂商在定制一些系统软件的时候软件也会需要专门给priv-app添加selinux policy。当然应用需要获取系统权限还有其他的办法,在AndroidManifest.xml文件中添加 android:sharedUserId=“android.uid.sysytem”,同时给该apk添加系统签名,比如小米手机就需要给apk添加小米的系统权限。

/system/priv-app 中包括 Launcher,SystemUI,SettingsProvider 等,均是系统的核心应用,这些应用能使用系统级的权限,4.4 之前的所有 /system/app 下的软件都能使用系统级的权限,Google 这样做是把内置到系统的应用也做个级别的区别。
放到 /system/priv-app 下的应用比放到 /system/app 下的应用可以声明获得更多的权限。在Android中每个应用都有自己的权限声明,比如要使用系统限制的权限(例如 android.permission.WRITE_SECURE_SETTINGS),我们就需要把程序安装到 /system/app 下。
手机被 root 后,通过 adb push 可以把 apk 推送到这两个目录,作为系统应用,用户无法删除。

android中app主要有3个路径可以放:
1、data/app —这个就是最为普遍 的第三方应用的apk路径,安装在这里一般 可以随意 进行卸载
2、system/app --系统内置应用,这里面的app是不可以 进行卸载的,所以叫做系统应用,但是系统应用的每个应用的签名却没有要求,即可以是自己应用根据情况确定,比如大部分内置应用是platform,也有shared,media等
3、system/priv-app —这个部分是android后来版本新加入系统特权应用路径,这里面应用和system/app一样是不可以卸载的,但是这里大家肯定会想他和system/app有什么区别么?这里其实最主要是在于二者目录的权限apk运行起来不一样
那么这里是不是有个疑问,那么是不是系统应用如果在priv-app下是不是权限就是最高 ?
就可以自然拥有很多系统权限才可以干的是它都可以干?这个其实并不是这样的哦,权限虽和你是不是priv-app有关系 ,但并不是说你 预制在priv-app既可以拥有系统权限。

如何将普通应用转为系统应用

安卓的系统一般会有4个重要的分区:boot,system,cache,data。装在system区的就是系统应用(system app),data分区的是用户应用。应用程序都安装在/app子目录下。
不管是系统应用还是用户应用,安卓会建立缓存以加速应用的启动,该缓存是在/data/dalvik-cache下面。应用安装的越多,data分区可用的空间就越少。
app一旦移动到system空间,就是系统应用了!
以下应用是可以移动到system分区的:
1) 开机就要启动的程序,比如权限管理啊,Widget啊。
2) 常常用到的程序,比如文件管理器。
3) 一些不会有内存驻留的小程序,比如autostarts,SD Maid啊。
有一些应用是不适合移动到system空间的:
1) 退出仍然会驻留内存的程序,因为这些程序一旦变成了system应用,杀进程的软件就拿他们没办法了。
2) 应用程序内含lib库的,这个可以用压缩工具查看该apk,假如内部有lib文件夹的,里面有*.so文件的,那就说明他用到了这些lib。
移动方法:
1) 将该apk先卸载,然后将apk文件拷贝到system/app下,修改权限,有必要的话,重启一下。这样做的好处是,该软件的缓存会在卸载是自动删除。
2) 为防止有些应用卸载后数据丢失,可以不卸载,方法是:将apk拷贝到system/app下,然后删除data/app的apk,最后手动把/data/dalvik-cache/下该程序的缓存清除。
3) 假如要移动的应用太多,可以进入recovery,清除一下dalvik-cache,让启动的时候自动再生成cache。
在 Android 中,如果要使用系统限制的权限(比如 android.permission.WRITE_SECURE_SETTINGS),我们需要把程序安装到 /system/app/ 下。
一般手机/system目录是mount成只读的,所以我们需要重新mount成读写的
下面以 test.apk 为例,演示这个操作。需要准备一台已经获得 Root 权限的手机。
1、通过 USB 连接手机和电脑。
2、使用 adb 控制手机。
运行cmd显示命令行窗口,直接输入adb devices 即可查看设备(如果没有反应则说明失败)。
adb push test.apk /system/app 将test.app推到/system/app目录下
如果出现adb: error: failed to copy ‘test.apk’ to ‘/system/app’: remote Read-only file
则使用 adb remount 重新挂在系统进行读写
然后在adb push test.apk /system/app
成功之后拔掉数据线,重启手机,则test.apk安装完成

在安卓系统的机制里面 ,只要是将app复制到系统的system文件/system/app 文件夹中的app,都是系统应用,如果你把系统内置的应用从里面删除了,也就是彻底移除了作为系统应用的条件 .这就是很多软件可以删除 操控系统应用的一个实际干的事情…
当然,要做这个操作,就必须得先root,不然是不可能做到的.
首先 : 可以用adb 命令 ,adb 命令是需要在电脑端完成的.
可以先把你要设置的app ,复制到sd卡的目录下面,也就是 /sdcard/
1、这个操作也可以使用adb来完成
adb push demo.apk /sdcard/
2、进入手机的shell 命令行:
adb shell
3、然后切换root 用户
su root
4、然后解锁系统分区,就锁这个分区后,就可以往里面复制我们的app安装包了 :
mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system
5、再复制我们第一步时的app 至 系统分区下面的app目录下面
cat /sdcard/demo.apk > /system/app/demo.apk // 这一步可以用 cp 实现,但一般设备中没有包含该命令。如果使用 mv 会出现错误:
6、mount -o remount,ro -t yaffs2 /dev/block/mtdblock3 /system // 还原分区属性,只读。
然后,关机重启, 将自己的app设置为系统app就完成了.但是,弄完这一步,并不能保证我们的app能正常运行,还需要进行下面的操作 .
在我们的app中,可能会有 lib 相关的关联包,你通过这样的方式引用的,需要手动去复制过去,那么需要进行这样的操作
首先,在电脑端,用解压缩工具,将我们的app解压到某个文件夹下面,在刚才解压的文件夹下面有个文件夹lib
打开这个文件夹,里面会有三个文件夹,分别对应不同的 系统架构生成的 so文件 ,需要找到合适系统架构的的so文件,复制到 系统分区的lib 目录中去(/system/lib/) 我这里是小米5的手机,我复制的是 armeabi 这个目录下面的 so文件.

1、在清单文件AndroidManifest.xml 中添加
android:sharedUserId=“android.uid.system”
2、打包未签名的APK
在Studio 中 执行 assembleBuild 自动打包生成APK 生成目录:bulid/outputs/release/xxx.apk
3、使用工具生成系统签名
4、将签名好的APK push 到系统目录下 /system/app/
5、重启后即可在Launcher中看到我们自己的应用,该应用即为系统应用了。

push命令


adb rootadb remountadb shell > mount -o remount,rw /    (这一步很关键,给系统读写权限,不然无法push)exitadb  push adb  push xxx.apk /system/app/adb reboot

引用文章

系统应用介绍
android中的系统应用
Android系统应用
Android 将自己的应用改为系统应用
修改安卓系统应用,将自己的app变成系统应用
Android system/app/与system/priv-app/的区别
Android 应用安装到/system/app下

Android系统应用相关推荐

  1. Android系统的启动过程

    Android系统的启动过程可以简单地总结为以下几个流程: 加载BootLoader -> 初始化内核 -> 启动init进程 -> init进程fork出Zygote(孵化器)进程 ...

  2. Android系统默认Home应用程序(Launcher)的启动过程源代码分析

    在前面一篇文章中,我们分析了Android系统在启动时安装应用程序的过程,这些应用程序安装好之后,还需要有一个Home应用程序来负责把它们在桌面上展示出来,在Android系统中,这个默认的Home应 ...

  3. android运行过程简书,Android系统的启动流程

    Android系统有哪些进程 在Linux系统启动时,会读取init.rc,里面配置了一些需要启动的进程.注意:SystemServer进程不在init.rc里,因为SystemServer进程是由z ...

  4. Android系统的命令行操作及C程序编译

    在Android系统执行C程序,需要使用Android系统的专用编译器NDK,下载NDK工具可以通过以下博文中给出的链接: https://blog.csdn.net/baidu_35904821/a ...

  5. NDK JNI方式读写Android系统的demo(二)

    NDK & JNI(方式读写Android系统的Demo) 大家都知道Android系统是一种基于Linux的自由及开放源码的操作系统,所以读写GPIO也可以直接用Linux那一套export ...

  6. android系统的iphone,iPhone上安装Android系统详细步骤。

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 在iphone安装android系统的详细步骤 首先,准备好iphone的多点触屏和wlan固件.因为法律的缘故,我们不能分享这些文件,你可以去ipsw文 ...

  7. Ubuntu16.04下搭建开发环境及编译tiny4412 Android系统【转】

    本文转载自:http://blog.csdn.net/songze_lee/article/details/72808631 版权声明:本文为博主原创文章,未经博主允许不得转载. 1.安装ssh服务器 ...

  8. Android系统移植与调试之-------如何修改Android设备添加重启、飞行模式、静音模式等功能(一)...

    1.首先先来看一下修改前后的效果对比图 修改之后的图片 确认重启界面 具体的修改内容在下一篇中具体介绍. Android系统移植与调试之------->如何修改Android设备添加重启.飞行模 ...

  9. android 手写字体识别,一种基于Android系统的手写数学公式识别及生成MathML的方法...

    专利名称:一种基于Android系统的手写数学公式识别及生成MathML的方法 技术领域: 本发明属于模式识别技术领域,涉及数学公式中字符间的空间结构分析,具体涉及一种基于Android系统的手写数学 ...

  10. 俄罗斯 Android 系统受限,或将转用 HarmonyOS!

    整理 | 郑丽媛 出品 | CSDN 近一个月来,受当前局势影响,部分底层工具.基础软件.开源项目已相继宣布在俄罗斯停服,期间不少人因此担忧:同出自美国且占据极大智能手机市场的 Android 和 i ...

最新文章

  1. 【读书笔记】iOS-ARC-不要向已经释放的对象发送消息
  2. c语言不安全库_为什么 C 语言仍然占据统治地位?
  3. ML之NN:利用神经网络的BP算法解决XOR类(异或非)问题(BP solve XOR Problem)
  4. Django框架(10.Django中的模型类的定义以及模型类字段属性和选项)
  5. Nginx配置之基于域名的虚拟主机
  6. [Leetcode]-- Valid Number
  7. 测试Android应用程序的逆向方法和寻找攻击面的技巧
  8. 【0702作业】输出九九乘法表
  9. ubuntu 中安装 Redis
  10. 【高等数学笔记】拉格朗日乘数法(Lagrange Multiplier Method):其实也没那么难嘛
  11. Matlab 方差分解 程序,跪求+急问:在Dynare中如何做出方差分解?具体命令是什么?谢谢。...
  12. win10提高开机速度只需要5步
  13. IE8中怎样使用脚本隐藏弹出窗口的地址栏
  14. 哮喘病人小气道上皮细胞 (Asthma) Small airway epithelial cells 培养解决方案
  15. node.js基于vue的化妆品销售管理系统的设计与实现毕业设计源码151314
  16. 中康科技黄毅宁:AI+医疗,于我而言是圆梦
  17. 手机端网页设计尺寸,手机端网页设计图片尺寸
  18. 30 岁了, 现在开始努力,晚吗?
  19. 唯美伤感个性日志推荐:有一种美因距离而产生
  20. 最新消息!2022年全国大学生数学建模竞赛评阅要点发布

热门文章

  1. cad详图怎么画_施工图大样图都是怎么学的怎么画的cad 室内设计
  2. centos7下添加常用YUM源(EPEL/Remi/RPMforge/php/Nginx)
  3. components vue 引用 assets图片
  4. matlab 点顺时针排序,算法 – 按顺时针顺序排序点?
  5. 硬盘安装arch linux,ArchLinux硬盘安装
  6. Oracle——SQL基础练习
  7. 放弃5k事业编选择了15k的程序员,真的值得么?
  8. java.lang.UnsupportedOperationException: Currently Flink doesn‘t support individual window table-val
  9. Django 学习 之ORM简介与单表操作
  10. 信号、传输介质、数制转换