【问题标题】:copying a folder to /data/data/<package-name>/ from system/app/<app> folder during build time in aosp在 aosp 的构建期间将文件夹从 system/app/<app> 文件夹复制到 /data/data/<package-name>/
【发布时间】:2018-03-07 11:06:51
【问题描述】:

我正在尝试在构建 aosp 期间将文件夹从“system/app/”文件夹复制到“/data/data//”。

使用android-marshmallow-6.0.1的源码

日志: 01-01 00:07:13.796 10269-10269/custompackagename.com.customapp W/System.err: 在 android.app.ActivityThread.-wrap11(ActivityThread.java) 01-01 00:07:13.796 10269-10269/custompackagename.com.customapp W/System.err: 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 01-01 00:07:13.796 10269-10269/custompackagename.com.customapp W/System.err: 在 android.os.Handler.dispatchMessage(Handler.java:102) 01-01 00:07:13.796 10269-10269/custompackagename.com.customapp W/System.err: 在 android.os.Looper.loop(Looper.java:148) 01-01 00:07:13.796 10269-10269/custompackagename.com.customapp W/System.err: 在 android.app.ActivityThread.main(ActivityThread.java:5422) 01-01 00:07:13.796 10269-10269/custompackagename.com.customapp W/System.err:在 java.lang.reflect.Method.invoke(本机方法) 01-01 00:07:13.796 10269-10269/custompackagename.com.customapp W/System.err: 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 01-01 00:07:13.796 10269-10269/custompackagename.com.customapp W/System.err: 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 01-01 00:07:13.796 10269-10269/custompackagename.com.customapp W/System.err:引起:android.system.ErrnoException:打开失败:ENOENT(没有这样的文件或目录) 01-01 00:07:13.796 10269-10269/custompackagename.com.customapp W/System.err:在 libcore.io.Posix.open(本机方法) 01-01 00:07:13.796 10269-10269/custompackagename.com.customapp W/System.err: 在 libcore.io.BlockGuardOs.open(BlockGuardOs.java:186) 01-01 00:07:13.797 10269-10269/custompackagename.com.customapp W/System.err: 在 java.io.File.createNewFile(File.java:932) 01-01 00:07:13.797 10269-10269/custompackagename.com.customapp W/System.err: ... 16 更多 01-01 00:07:13.797 10269-10269/custompackagename.com.customapp D/CustomApp: copyAsset app_g3_models/en-IN/wordlist.syms 01-01 00:07:13.797 10269-10269/custompackagename.com.customapp D/CustomApp: copyAsset /data/data/com.google.android.googlequicksearchbox/app_g3_models/en-IN/wordlist.syms 01-01 00:07:13.798 10269-10269/custompackagename.com.customapp W/System.err:java.io.IOException:打开失败:ENOENT(没有这样的文件或目录) 01-01 00:07:13.798 10269-10269/custompackagename.com.customapp W/System.err: at java.io.File.createNewFile(File.java:939) 01-01 00:07:13.798 10269-10269/custompackagename.com.customapp W/System.err: 在 custompackagename.com.customapp.CustomApp.copyAsset(CustomApp.java:139) 01-01 00:07:13.798 10269-10269/custompackagename.com.customapp W/System.err: 在 custompackagename.com.customapp.CustomApp.copyAssetFolder(CustomApp.java:116) 01-01 00:07:13.798 10269-10269/custompackagename.com.customapp W/System.err: 在 custompackagename.com.customapp.CustomApp.copyAssetFolder(CustomApp.java:120) 01-01 00:07:13.798 10269-10269/custompackagename.com.customapp W/System.err: 在 custompackagename.com.customapp.CustomApp.onCreate(CustomApp.java:81) 01-01 00:07:13.798 10269-10269/custompackagename.com.customapp W/System.err:

【问题讨论】:

标签: android build android-6.0-marshmallow android-source


【解决方案1】:

您可以在任何Android.mk / Makefile 中使用:$(hide) cp -R system/app/folder /data/data/。看看buid/core/Makefile

或查看:PRODUCT_COPY_FILES

【讨论】:

  • 感谢您的回复,正如您所提到的,我尝试在 CustomApp 的 Android.mk 中添加“ $(hide) cp -R system/app/CustomApp/data_folder/ /data/data/CustomPackagename/” ,但这并没有在路径 /data/data/com.CustomPackagename.CustomApp/ 下创建 data_folder
  • 您可以尝试删除 $(hide) 以查看 cp 命令是否因某种权限错误而失败。
  • 没有错误,也没有警告。我尝试在 buid/core/Makefile 中添加相同的行,但这也无济于事。
  • 那么我猜它甚至没有被调用 -> 检查你在哪里添加了 cp 并确保它被调用了。还分享一些代码/上下文,否则人们将无法帮助您
  • 是的,你说得对,它没有被调用。现在,它被调用了,我得到 packages/apps/CustomApp/Android.mk:6: *** missing separator。停止。 Android.mk LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional LOCAL_MODULE := CustomApp LOCAL_SRC_FILES := CustomApp.apk $(hide) cp -R $(TARGET_OUT)/app/CustomApp/data_folder/ $(TARGET_OUT_DATA)/data/com.CustomPackagename.CustomApp/data_folder LOCAL_CERTIFICATE := platform LOCAL_MODULE_CLASS := APPS include $(BUILD_PREBUILT) # 使用以下包含来制作我们的测试 apk。 include $(call all-makefiles-under,$(LOCAL_PATH))
【解决方案2】:

您确定可以在构建时将任何内容放入/data/data 文件夹吗?文件夹/data/data/&lt;package-name&gt; 是在运行时创建的,如果您在其中放置任何内容,它将在恢复出厂设置时被清除。

您可能需要(如果您真的需要)在启动时将数据放置在 init.rc 脚本中。查看 AOSP 是如何做到的:https://github.com/LineageOS/android_device_xiaomi_mido/tree/cm-14.1/rootdir

您可以创建自己的 .sh 脚本并将其作为服务启动(或修改现有脚本以进行测试,即上面链接中的init.qcom.sh),然后复制您的数据。

您可以检查您的应用已安装的脚本,如果没有,则通过pm 命令安装它,然后从system 分区上的文件夹中复制其data 文件夹中的数据。

因此,在 AOSP 构建时,您应该关心系统分区上的文件夹,即通过您的 device.mk 文件中的 PRODUCT_COPY_FILES 变量将数据放在那里。

【讨论】:

  • 恢复出厂设置是对的。我希望文件夹始终存在。现在我将尝试您提供的解决方案并让您知道。
  • 在从自定义应用的资产文件夹复制到“/data/data/com.google.android.googlequicksearchbox/app_g3_models/en-US”时获取某些文件的权限错误问题标签
  • 您是否尝试从常规应用中复制这些文件?是的,它肯定不会起作用,因为它被 android 安全模型禁止,所以没有应用程序可以相互复制文件。如果您不想修改目标应用程序(从其他文件夹读取数据,然后是它自己的),并且不能在它们之间共享存储stackoverflow.com/a/36302991/1028256,那么最简单的解决方案可能是运行一个定期检查的 init.rc 脚本如果源和目标数据存在,则复制它。然后处理文件权限
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多