在文件夹中添加预先构建的文件集到android out文件夹

Roo*_*kie 4 linux android makefile prebuild android-source

我有glibc为arm编译,这与Android glibc或仿生C不同,因为我所遵循的glibc环境将有助于提供更多的api.现在我可以在Android运行时复制/ system /文件夹中的glibc环境,并且在执行chroot时我可以在glibc环境中运行我的程序.

目前我正在单独编译glibc和Android,然后将glibc和它复制到Android模拟器SD卡上,然后在/ system文件夹上解压缩然后在/ system/glibc上执行chroot

我分别编译glibc,然后将它放在Android源代码中.现在在编译Android源码时,我应该怎么做才能将glibc的整个预建文件夹结构复制到/ system文件夹并成为system.img的一部分.

有了这个,当我将system.img复制到Android模拟器并启动它时,glibc已经存在于/ system文件夹中,只需要在glibc环境中运行应用程序.

UPDATE

根据Yuri在他的回答中提到的(我创建了glibc文件夹并将所有内容复制到其中),当我编译代码时,我得到了输出.

build/core/main.mk:490: * Some files have been added to ALL_PREBUILT.
build/core/main.mk:491: *
build/core/main.mk:492: * ALL_PREBUILT is a deprecated mechanism that
build/core/main.mk:493: * should not be used for new files.
build/core/main.mk:494: * As an alternative, use PRODUCT_COPY_FILES in
build/core/main.mk:495: * the appropriate product definition.
build/core/main.mk:496: * build/target/product/core.mk is the product
build/core/main.mk:497: * definition used in all products.
build/core/main.mk:498: *
build/core/main.mk:499: * unexpected glibc in ALL_PREBUILT
build/core/main.mk:500: *
build/core/main.mk:501: * ALL_PREBUILT contains unexpected files. Stop.
Run Code Online (Sandbox Code Playgroud)

所以我在build/core/legacy_prebuilts.mk中添加了glibc

但后来我明白了

make: * No rule to make target mkdir', needed byout/target/product/generic/root/glibc'. Stop.
Run Code Online (Sandbox Code Playgroud)

Roo*_*kie 5

最后,我以一种非常不寻常的方式做到了.

我有3个选择:

  1. 使用BUILD_PREBUILT变量,但缺点是你可以为一个文件做,但我有多个文件和特定的forlder结构
  2. 使用PRODUCT_COPY_FILES.但不知怎的,它对我不起作用PRODUCT_COPY_FILES用于设备,它对我来说不是一个新设备.我正在模拟器上工作.
  3. 使用Yuri给出的解决方案,使用ALL_PREBUILT + =,但正如Yuri提到的那样是GB和我使用JB和ICS因此不适合我.

我采用的方法是在Android.mk文件中使用shell脚本.我使用了这样的:假设你有一个名为my_folder的文件夹,其中包含整个预建文件夹结构,需要将其复制到anddroid out文件夹,在my_folder中,我创建了Android.mk并在下面的文本中输入:

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

$(shell mkdir -p $(TARGET_OUT)/my_folder/)
$(shell cp -rf $(LOCAL_PATH)/* `pwd`/$(TARGET_OUT)/my_folder/)
Run Code Online (Sandbox Code Playgroud)

这样,我在my_folder目录中的所有预先构建的文件和文件夹都被原样复制到android out中的system文件夹中.

我希望这可以帮助别人.


per*_*era 5

PRODUCT_COPY_FILES 必须放置在产品 mk 文件 (device/mydevice/..) 中,而不是模块文件 (Android.mk) 中。这里提到了这一点。

此格式用于复制目录:

PRODUCT_COPY_FILES += $(call find-copy-subdir-files,*,vendor/mydir,system/app)
Run Code Online (Sandbox Code Playgroud)

但此命令不适用于 apk 文件,并给出错误:

build/core/Makefile: *** 在 PRODUCT_COPY_FILES 中找到预构建的 apk:vendor/mydir/ray-system-ui-release.apk:system/app/ui-release.apk,请使用 BUILD_PREBUILT!停止。