系统级应用的安装位置一般在codePath=/system 下面,
如果手动的去进行adb install覆盖安装,通过dumpsys package可以发现是安装在/data/app/里,
如果是通过标准的系统升级方式呢?
这里我们来通过升级查看一下,
升级前
Package [com.test.android.test] (51fa7a7):
userId=10053
pkg=Package{5b97454 com.test.android.test}
codePath=/system/priv-app/testService
resourcePath=/system/priv-app/testService
versionName=3.1
升级后
Package [com.test.android.test] (51fa7a7):
userId=10053
pkg=Package{5b97454 com.test.android.test}
codePath=/system/priv-app/testService
resourcePath=/system/priv-app/testService
versionName=3.2
说明和手动安装的情况不一样。是会覆盖安装到/system/priv-app里的
在Android中,系统级应用通常是预装在设备上的,并且通常位于/system/app
目录中。这些应用通常是由设备制造商提供的,并且它们的更新方式可能会根据设备的具体配置和Android版本的不同而有所差异。下面是一些常见的更新机制:
系统内置应用更新机制
-
版本控制:
- Android系统为每个应用在
AndroidManifest.xml
文件中提供了versionName
和versionCode
两个属性,用于标识应用的版本信息。 - 更新时,系统会检查新版本的
versionCode
是否高于已安装版本的versionCode
,以确定是否需要更新。
- Android系统为每个应用在
-
静默更新:
- 静默更新通常指的是不需要用户干预的后台更新过程。这种更新通常发生在系统应用上,尤其是对于OEM定制的应用。
- 为了实现静默更新,新的应用版本会被安装到
/data/app
目录中,而旧版本保留在/system/app
目录内。如果新版本的versionCode
低于旧版本,系统会在下次重启时恢复旧版本。
更新渠道
-
OTA (Over-the-Air) 更新:
- 这是最常见的系统级应用更新方式之一,通过网络自动下载更新包,并在后台安装。
- 用户通常可以在设置中的"软件更新"或"系统更新"部分检查并安装可用的更新。
-
通过Google Play商店:
- 对于那些可以从Google Play商店获取更新的应用,用户可以在Play商店中手动更新或设置自动更新。
- 注意,并非所有的系统级应用都可以通过Play商店进行更新,这取决于设备制造商和运营商的策略。
-
ADB命令行工具:
- 对于开发者来说,可以使用ADB工具来更新系统级应用。这通常涉及到将新的APK文件推送到设备,并使用
pm install
或pm install-replace
命令进行安装或替换。 - 使用这种方法更新应用通常要求设备已经解锁或者具有特殊权限。
- 对于开发者来说,可以使用ADB工具来更新系统级应用。这通常涉及到将新的APK文件推送到设备,并使用
-
内置系统服务:
- Android系统中有一个名为
PackageManagerService
的服务,它负责管理设备上的所有应用,包括更新和安装。 scanPackageLI
函数是PackageManagerService
的一部分,它负责扫描新的APK文件并检查是否需要进行更新。
- Android系统中有一个名为
注意事项
- 权限限制:由于系统级应用通常位于受保护的分区,因此更新这类应用可能需要特殊的权限,比如root权限。
- 备份和恢复:在更新过程中,如果出现问题,可能需要恢复到旧版本或备份数据。
- 兼容性:新版本的应用需要与当前设备的硬件和软件环境兼容。