如何在 rombuild 的 android AOSP Marshmallow 的 /data 部分下正确添加文件

How to add file correct way to under /data section of android AOSP Marshmallow at rombuild

我正在制作 Marshmallow AOSP rom 并尝试将 device_owner.xml 添加到 /data/system 以直接向设备所有者配置应用程序。

我在产品复制文件后添加了一个 .mk 文件

 PRODUCT_COPY_FILES += abc/cba:data/system/device_owner.xml

文件可以在out/data/system/下找到,但是好像没有包含在rom中。

我也试过用

替换PRODUCT_COPY_FILES
PRODUCT_PACKAGES += device_owner.xml

并为文件

制作了自己的Android.mk文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE = device_owner.xml
LOCAL_SRC_FILES = $(LOCAL_MODULE)
LOCAL_MODULE_CLASS = ETC
LOCAL_MODULE_PATH = $(TARGET_OUT_DATA)/system
include $(BUILD_PREBUILT)

仍然没有包含在 rom 中。

我读到数据分区将是 userdata.img 的一部分,但文件也不存在。

我也尝试将 device_owner.xml 包含到不同的位置,例如 /system/ 下,然后将其复制到 post-fs-data phase[=18= 下的 init.rc 文件中]

copy /system/abc/device_owner.xml /data/system/device_owner.xml
chown system system /data/system/device_owner.xml
chmod 0600 /data/system/device_owner.xml

文件将位于正确的位置,但出于某种原因,chown 命令不会将所有者和组更改为系统。默认文件有 root 所有者和组。

知道如何做到这一点吗?

编辑 1.

我现在已经为此做了一个解决方案。

我已经制作了 set_device_owner.sh 文件

 #!/system/bin/sh

 chown system:system /data/system/device_owner.xml
 chmod 0600 /data/system/device_owner.xml

然后我在产品复制文件后添加了一个 .mk 文件

 PRODUCT_COPY_FILES += abc/cba/device_owner.xml:/system/xbin/device_owner.xml
 PRODUCT_COPY_FILES += abc/cba/set_device_owner.sh:/system/xbin/set_device_owner.sh

在init.rc中我有post-fs-data

copy /system/xbin/device_owner.xml /data/system/device_owner.xml
exec - root root -- /system/bin/sh ./system/xbin/set_device_owner.sh

现在这可行了,但我仍然想知道什么是正确的或更好的做法。

而且我不知道为什么 copy、chown 和 chmod 不能直接在 init.rc

上工作

AOSP 构建过程无法将文件放入数据目录,所以我相信您的解决方案是正确的。您会看到 init.rc 实际上创建了数据目录,并且恢复出厂设置也会清除 /data。据我所知,没有其他好的方法可以做到这一点,而且您的方法也没有错。

虽然 chmod 命令应该可以直接在 init.rc 文件中使用,但不确定为什么它对您不起作用,它在文件的其他地方多次使用。

我刚刚自己实现了这个,并且能够在不使用单独脚本的情况下完成。以下是我在 post-fs-data 部分末尾添加到 init.rc 文件中的行:

copy /system/device_owner.xml /data/system/device_owner.xml
copy /system/device_policies.xml /data/system/device_policies.xml
chmod 0600 /data/system/device_owner.xml
chmod 0600 /data/system/device_policies.xml
chown system system /data/system/device_owner.xml
chown system system /data/system/device_policies.xml

请注意,我的设备配置中有 PRODUCT_COPY_FILES,可以在构建时将文件复制到 /system,否则这显然行不通。

另外,为了防止在您的应用首次启动时向用户显示有关沉浸式模式的消息,您可以使用设备覆盖将您的包 ID 添加到 packages/SettingsProvider/res/values/default.xml 中的 def_immersive_mode_confirmations 部分.更多信息请点击此处:How does the Android source overlays work?。尽管出于某种原因,虽然我的覆盖设置似乎正确,但它仍然显示消息,我现在没有时间调试它,因为我发现 AOSP 的大多数 "simple" 东西都不知何故不工作,然后一整天都在找出我做错的随机事情......当我弄清楚时,我会编辑这个答案以确认它有效。

编辑:原来叠加效果很好。这是错误的文档......要禁用警告,请使用 packages/SettingsProvider/res/values/default.xml

def_immersive_mode_confirmations 部分的值 confirmed

这是关于它的问题跟踪器 post:https://issuetracker.google.com/issues/37093452#c1

所以你真的需要这个:

<string name="def_immersive_mode_confirmations" translatable="false">confirmed</string>