如何将apk文件更新到系统中vendor文件夹下

时间:2024-10-08 09:53:21

1. 为什么要更新到vendor目录下

在知道如何将apk文件更新到系统文件之下之前我们需要先了解下Android源码和Android开发相关的相关知识.

1.1 Android系统各个目录说明

Android 源码目录说明

截取关键目录说明

  1. Android
  2. |-- system (底层文件系统库、应用及组件——C语言)
  3. |-- vendor (厂商定制代码)
  4. 复制代码

可以看到vendor目录是厂商定制化的目录, 因此将apk文件更新到vendor目录之下是一种权限较高的操作.

1.2 手机app开发和机顶盒app开发的区别

  1. 手机app开发是直接基于Android原生无裁剪的SDK开发的. 直接使用原生系统提供的各种API. 且一般安装在用户目录 data/app 之下.

  2. 机顶盒的系统是基于原生AOSP裁剪并进行相应扩展而来的系统, 在其上开发的app调用了很多非原生自带的API等. 且一般安装在系统目录 system/app 或者厂商定制目录 vendor/app 之下.

2. 更新到vendor文件夹之下的方法

2.1 通过U盘方式:

  1. 将需要更新的apk文件例如 APP_NAME.apk 文件存放在U盘里.

  2. 将U盘插在板子上通过 工具进行拷贝.

  3. 工具将开发板连接之后在 su 模式下进行 cp 命令 cp /storage/sda1/APP_NAME.apk vendor/app/.

  4. 步骤3会提示 cp: vendor/app/APP_NAME.apk: Read-only file system 表示该文件夹不可写.需要将该文件夹进行挂载.

  5. 输入命令mount -o rw,remount /vendor 此时vendor文件夹就是具有可读可写的权限.

  6. 重复步骤3的命令则可以将apk文件更新到 vendor/app 文件夹之下, 再输入 reboot 重启命令则可以看到最新的app了.

2.2 通过Android自带adb工具进行更新

  1. 确保开发板和电脑的网络处于同一个网段, 便于后续通过adb进行网络调试.

  2. 通过adb命令连接开发板 adb connect [开发板的ip地址:5555], 例如 adb connect 10.100.10.10:5555 如果提示 connected to 10.100.10.10:5555 则表示连接成功. 其他则表示连接失败. 检查ip地址和端口号是否正确.

  3. 再通过 adb devices 查看连接的设备数量, 一般情况下会显示如下:

  1. List of devices attached
  2. 10.100.10.10:5555 device
  3. 复制代码

但是如果开发板和电脑之间还用双头USB线进行连接的话显示如下:

  1. List of devices attached
  2. 0123456789 device
  3. 10.100.10.10:5555 device
  4. 复制代码

会发现多了一个0123456789 设备

  1. 如果只有一个设备时则直接通过 adb push [apk路径] /vendor/app 例如 adb push F:apk\APP_NAME.apk /vendor/app 提示 F:apk\APP_NAME.apk: 1 file pushed. 9.3 MB/s (19684462 bytes in 2.021s) 则表示成功.

  2. 如果有多个设备时则通过 adb -s 设备ip地址:端口 push [apk路径] /vendor/app 例如 >adb -s 10.100.10.10:5555 push F:apk\APP_NAME.apk /vendor/app

  3. 步骤4或者步骤5会出现方法1时的权限问题 F:apk\APP_NAME.apk' to '/vendor/app/APP_NAME.apk': remote couldn't create file: Read-only file system, 则需要通过adb将文件夹进行挂载.

  4. 进入设备的 shell 模式

一个设备时的命令:

  1. >adb shell
  2. :/ #>mount -o rw,remount /vendor
  3. :/ #>exit
  4. 再次进行步骤4
  5. 复制代码

多个设备时的命令:

  1. >adb -s [ip地址] shell
  2. :/ #>mount -o rw,remount /vendor
  3. :/ #>exit
  4. 再次进行步骤5
  5. 复制代码

文/谢康