我现在需要把Generic.kl从vendor/sdmc/himalaya/us/kb_keylayout/Generic.kl 拷贝到系统的/system/usr/keylayout/Generic.kl。代码上在mk文件添加了PRODUCT_COPY_FILES += \ $(VENDOR_CUS_FOLDER)/$(MODEL_REGION)/kb_keylayout/Generic.kl:/system/usr/keylayout/Generic.kl,开机后查看这个文件的内容没有被覆盖;手动覆盖是可以的,现在需要在代码上能实现
时间: 2023-07-05 09:30:54 浏览: 82
如果您已经在.mk文件中添加了 `PRODUCT_COPY_FILES` 来复制文件,但是开机后文件的内容没有被覆盖,可能是因为该.mk文件并未被正确的引用。您可以确认一下是否在设备的构建配置文件中正确引用了该.mk文件。
除此之外,您还可以尝试在.mk文件中添加以下语句:
```
$(call inherit-product, $(SRC_TARGET_DIR)/product/updatable/updatable.mk)
```
这样可以确保在设备启动时,updatable partition 中的文件会被正确的覆盖。如果您的文件位于 /system 分区,而不是 updatable 分区中,可以尝试在.mk文件中添加以下语句:
```
$(call inherit-product, $(SRC_TARGET_DIR)/product/core.mk)
```
这样可以确保在设备启动时,/system 分区中的文件会被正确的覆盖。
如果您仍然无法成功覆盖文件,您可以考虑在设备启动时执行一个脚本,手动覆盖文件。您可以将以下命令添加到一个脚本中,并将该脚本添加到设备启动脚本中(一般为 /etc/init.d/):
```
mount -o remount,rw /system
cp -f /vendor/sdmc/himalaya/us/kb_keylayout/Generic.kl /system/usr/keylayout/Generic.kl
mount -o remount,ro /system
```
这样可以确保在设备启动时,文件会被正确的覆盖。
相关问题
我现在需要把Generic.kl从vendor/sdmc/himalaya/us/kb_keylayout/Generic.kl 拷贝到系统的/system/usr/keylayout/Generic.kl。开机后查看这个文件的内容没有被覆盖
您可以使用以下命令将文件从vendor目录复制到系统目录中:
```
adb root
adb remount
adb push vendor/sdmc/himalaya/us/kb_keylayout/Generic.kl /system/usr/keylayout/Generic.kl
```
其中,adb root 和 adb remount 命令将设备切换为 root 用户,并重新挂载文件系统为可读写模式,这样才能复制文件到 /system 目录下。接着,adb push 命令将文件从 vendor 目录复制到系统目录中。
复制完成后,您可以使用以下命令重新启动设备,以确保配置文件生效:
```
adb reboot
```
如果您依然无法看到文件的内容被覆盖,您可以尝试清除系统缓存,方法如下:
1. 进入设备的 recovery 模式,方法因设备而异,一般是按住音量减和电源键。
2. 进入 recovery 后,选择 "Wipe cache partition" 或 "清除缓存分区",等待清除完成。
3. 选择 "Reboot system now" 或 "重新启动系统",等待设备重启。
重启完成后,您可以再次查看文件的内容,确认是否被覆盖。
warning: writing to readonly directory: "vendor/sdmc/himalaya/us/kb_keylayout/Generic.kl"
这个警告通常是由于你尝试在一个只读的目录中写入文件而引起的。在这种情况下,你需要检查目录的权限设置,或者尝试将文件写入到另一个可写的目录中。如果你无法更改目录的权限,你可以考虑使用sudo命令以管理员身份运行你的程序,这可能会解决问题。另外,你也可以尝试使用其他文件路径来存储你的文件,而不是当前目录。
阅读全文