1. 为什么要更新到vendor目录下
在知道如何将apk文件更新到系统文件之下之前我们需要先了解下Android源码和Android开发相关的相关知识.
1.1 Android系统各个目录说明
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盘插在板子上通过
工具进行拷贝.
-
用
工具将开发板连接之后在
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
-
复制代码
文/谢康