android - 如何在 rombuild 中将文件正确添加到 android AOSP Marshmallow 的 under/data 部分

标签 android android-6.0-marshmallow user-data

我正在制作 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 阶段下的 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 添加到 def_immersive_mode_confirmations packages/SettingsProvider/res/values/default.xml 中的部分使用设备覆盖。更多信息请点击此处:How does the Android source overlays work? .尽管出于某种原因,尽管我的覆盖设置似乎正确,但它仍然显示消息,而且我现在没有时间调试它,因为我发现 AOSP 的大多数“简单”功能都无法正常工作然后花上一整天的时间来找出我做错的随机事情......当我弄清楚时,我会编辑这个答案以确认它有效。

编辑:事实证明叠加层工作正常。这是错误的文档......要禁用警告,请使用值 confirmed对于 def_immersive_mode_confirmations packages/SettingsProvider/res/values/default.xml 中的部分

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

所以你实际上需要这个:

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

关于android - 如何在 rombuild 中将文件正确添加到 android AOSP Marshmallow 的 under/data 部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43801575/

相关文章:

java - 从对象启动 Activity

android - 在 Mupdf 上以横向模式显示两页

Marshmallow PermissionHelper 的 Android Robolectric 单元测试

amazon-s3 - 无法通过 cfn-init 和 UserData 脚本使用 AWS CloudFormation 模板在 EC2 实例上部署应用程序

java - 应用程序重新启动后显示用户输入的数据

android - 显示带有单选按钮的警报对话框并将所选按钮添加到 ListView - Android

android - Webview 发布后不显示 url

android - 如何在调用 requestPermissions 之前知道用户检查 "Never ask again"

android - 在android M中移除HTTPClient有什么影响

jquery - 如何读取jqgrid中的userData?