1. 为什么要更新到vendor目录下
在知道如何将apk文件更新到系统文件之下之前我们需要先了解下Android源码和Android开发相关的相关知识.
1.1 Android系统各个目录说明
截取关键目录说明
Android
|-- system (底层文件系统库、应用及组件——C语言)
|-- vendor (厂商定制代码)
可以看到vendor目录是厂商定制化的目录, 因此将apk文件更新到vendor目录之下是一种权限较高的操作.
1.2 手机app开发和机顶盒app开发的区别
-
手机app开发是直接基于Android原生无裁剪的SDK开发的. 直接使用原生系统提供的各种API. 且一般安装在用户目录
data/app之下. -
机顶盒的系统是基于原生AOSP裁剪并进行相应扩展而来的系统, 在其上开发的app调用了很多非原生自带的API等. 且一般安装在系统目录
system/app或者厂商定制目录vendor/app之下.
2. 更新到vendor文件夹之下的方法
2.1 通过U盘方式:
-
将需要更新的apk文件例如
APP_NAME.apk文件存放在U盘里. -
将U盘插在板子上通过
SecureCRT.exe工具进行拷贝. -
用
SecureCRT.exe工具将开发板连接之后在su模式下进行cp命令cp /storage/sda1/APP_NAME.apk vendor/app/. -
步骤3会提示
cp: vendor/app/APP_NAME.apk: Read-only file system表示该文件夹不可写.需要将该文件夹进行挂载. -
输入命令
mount -o rw,remount /vendor此时vendor文件夹就是具有可读可写的权限. -
重复步骤3的命令则可以将apk文件更新到
vendor/app文件夹之下, 再输入reboot重启命令则可以看到最新的app了.
2.2 通过Android自带adb工具进行更新
-
确保开发板和电脑的网络处于同一个网段, 便于后续通过adb进行网络调试.
-
通过adb命令连接开发板
adb connect [开发板的ip地址:5555], 例如adb connect 10.100.10.10:5555如果提示connected to 10.100.10.10:5555则表示连接成功. 其他则表示连接失败. 检查ip地址和端口号是否正确. -
再通过
adb devices查看连接的设备数量, 一般情况下会显示如下:
List of devices attached
10.100.10.10:5555 device
但是如果开发板和电脑之间还用双头USB线进行连接的话显示如下:
List of devices attached
0123456789 device
10.100.10.10:5555 device
会发现多了一个0123456789 设备
-
如果只有一个设备时则直接通过
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)则表示成功. -
如果有多个设备时则通过
adb -s 设备ip地址:端口 push [apk路径] /vendor/app例如>adb -s 10.100.10.10:5555 push F:apk\APP_NAME.apk /vendor/app -
步骤4或者步骤5会出现方法1时的权限问题
F:apk\APP_NAME.apk' to '/vendor/app/APP_NAME.apk': remote couldn't create file: Read-only file system, 则需要通过adb将文件夹进行挂载. -
进入设备的
shell模式
一个设备时的命令:
>adb shell
:/ #>mount -o rw,remount /vendor
:/ #>exit
再次进行步骤4
多个设备时的命令:
>adb -s [ip地址] shell
:/ #>mount -o rw,remount /vendor
:/ #>exit
再次进行步骤5
文/谢康