Android系统应用

系统应用

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下是不是权限就是最高 br> 就可以自然拥有很多系统权限才可以干的是它都可以干个其实并不是这样的哦,权限虽和你是不是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命令

引用文章

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

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览91312 人正在系统学习中

来源:刘洋浪子

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年1月17日
下一篇 2022年1月17日

相关推荐