在Android文件夹中添加结构化文件夹中的预构建文件集

问题描述:

我已经编译了用于arm的glibc,它与Android glibc或仿生C不同,因为我遵循的glibc环境将有助于提供更多API。 现在我可以在Android运行时将/ glibc环境复制到/ system /文件夹中,并且在做chroot时我可以在glibc环境中运行我的程序。在Android文件夹中添加结构化文件夹中的预构建文件集

目前我编译的glibc和Android分别然后tarring glibc的,并复制它在Android模拟器的SD卡,然后解包它/系统文件夹,然后/系统上做的chroot/glibc的

我单独编译的glibc和然后将其放置在Android源代码的某处。 现在在编译Android源代码时,我该怎么做,以便glibc的整个预先构建的文件夹结构被复制到/ system文件夹并成为system.img的一部分。

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

UPDATE

后我一样每尤里在他的回答中提到(我创建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. 

所以我在建/核心/ legacy_prebuilts.mk

添加的glibc但后来我得到

​​

这里是一本书 “嵌入式Android” 的,这将有助于你一个例子。创建你叫rootfs-glibc AOSP项目的根文件夹,放在那里,你要复制的代码,并与下面的内容创建有Android.mk文件:

LOCAL_PATH:= $(call my-dir) 
include $(CLEAR_VARS) 
# This part is a hack, we're doing "addprefix" because if we don't, 
# this dependency will be stripped out by the build system 
GLIBC_ROOTFS := $(addprefix $(TARGET_ROOT_OUT)/, rootfs-glibc) 
$(GLIBC_ROOTFS): mkdir -p $(TARGET_ROOT_OUT) cp -af $(TOPDIR)rootfs-glibc/* $(TARGET_ROOT_OUT) rm 
# The last command just gets rid of this very .mk since it's copied as-is 
ALL_PREBUILT += $(GLIBC_ROOTFS) 

有一张纸条,这是真实的姜饼。也许在更新的Android版本中,make系统已经改变。

+0

谢谢尤里,但在你的情况下,我可能需要检查和修复编译问题时glibc的使用的Android工具链编译。它可以完美编译而不需要任何改变。 – Rookie

+0

我不明白。你尝试添加一个预编译的二进制文件,或者你想用android工具链编译glibc吗? – Yury

+0

嗨尤里,我需要添加一堆预生成二进制文件的特定文件夹结构,即我有一大堆的二进制文件在glibc的文件夹中的文件夹结构,需要如 – Rookie

我在想如果我可以这样做 1.我有android和glibc编译分离。 2.一旦两个被编译,我手动复制glibc的整个文件夹/出/目标/产品/通用/系统/ glibc的/文件夹 3.然后我运行“make snod”

将这项工作?

最后我以非常不寻常的方式做到了。

我有3个选项:

  1. 使用BUILD_PREBUILT变量,但退税它,你可以为 单个文件做到这一点,但我有多个文件,并在特定的forlder 结构
  2. 使用PRODUCT_COPY_FILES。但不知何故,它不适合我 PRODUCT_COPY_FILES是一个设备,它不是 我的新设备。我正在模拟器上工作。
  3. 使用尤里给出的解决方案,使用ALL_PREBUILT + =,但是因为尤里 提到它是GB和我使用JB和ICS,因此不是 为我工作。

我采取的方法是将Android.mk文件中使用shell脚本。 我使用了一些这样的: 假设你有一个包含整个预置的文件夹结构的文件夹命名my_folder需要被复制到原样anddroid出来的文件夹,里面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/) 

这样在my_folder目录中的所有预置的我的设置文件和文件夹被复制的是系统文件夹中的android出来。

我希望这可以帮助别人。

PRODUCT_COPY_FILES必须放置在产品MK文件(设备/ mydevice在/ ..),而不是模块文件(Android.mk)。这提到了here

此格式用于复制迪尔斯:

PRODUCT_COPY_FILES += $(call find-copy-subdir-files,*,vendor/mydir,system/app) 

该命令不APK文件的工作虽然给错误:

编译/核心/ Makefile文件:***预建APK在PRODUCT_COPY_FILES发现:vendor/mydir/ray-system-ui-release.apk:system/app/ui-release.apk,改为使用BUILD_PREBUILT !.停止。