2012-06-13 56 views
7

我有一个本机二进制文件,我想将其包含到Android的源代码中,以便在编译时我的二进制文件将包含在/ system/bin中。在Android源代码中添加预构建的二进制

我抄我的二进制文件到文件夹/预建/机器人臂/我的二进制,和我创建了一个新的Android.mk有以下几点:

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

LOCAL_SRC_FILES := my-binary 
LOCAL_MODULE := my-binary 
LOCAL_MODULE_CLASS := EXECUTABLES 
LOCAL_MODULE_TAGS := optional 
include $(BUILD_PREBUILT) 

但是当我运行,我在日志中得到的唯一参考如下:

target Prebuilt: my-binary (out/target/product/generic/obj/EXECUTABLES/my-binary_intermediates/my-binary) 

和二进制并没有安装到system.img可言。在Installing a prebuilt binary on Android: "not found"中有一个几乎相同的问题,但提问者已经知道了基本程序,并且根本没有解释。如果我运行使我的二进制,我得到了我张贴的相同的行。

我也尝试运行make/target/product/generic/system.img my-binary但它也不起作用。我的二进制文件出现在列出的子文件夹中,但它不会包含在system.imng中

我是否缺少什么?有没有什么办法,只要运行make -j#我的二进制文件将包含在/ system/bin中?

回答

8

刚刚在我的模拟器上测试过,它正在工作。我在此文件夹中用作gdbserver的示例。我有一个交叉编译的android strace,并用它嵌入到图像中。所以,这些指令将用于这个可执行文件。

  1. 下创建预建/机器人臂的文件夹/ strace的
  2. 将有二进制文件(在我的情况strace的)

添加Android.mk有以下内容的文件:

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

LOCAL_SRC_FILES := strace 
LOCAL_MODULE := strace 
LOCAL_MODULE_CLASS := EXECUTABLES 
LOCAL_MODULE_TAGS := optional 
include $(BUILD_PREBUILT) 


prebuilt_files := 

$(call add-prebuilt-files, EXECUTABLES, $(prebuilt_files)) 

构建指令:mmm prebuilt snod -j4(如果您已经创建了映像),或者您当然也可以使用make -j4

+0

呀,我用Android.mk在参考同一个目录下gdbserver的发现,但它不工作的readOn一些。我会试着用mmmm;我会马上回来...... 编辑:*嗯嗯预建snod -j *工作!我打算做一个* make clean *,看看是否从头开始重建所有东西...... – ziritrion

+0

真的很奇怪......直接从回购(无需使用我的二进制文件)在源代码上运行* make *编译好。但是,当我添加我的二进制文件,我得到奇怪的错误。最糟糕的是,即使我做了一个* make clean *并取出我的文件夹(它应该让源代码就像刚开始时一样,因为我没有碰到其他任何东西),当我尝试编译它时仍然会收到编译错误。我释放了空间,确保它与代码本身没有任何关系(我在VMware上运行Ubuntu 10.04) – ziritrion

+0

make clean只需删除'out'文件夹。它不会将代码更改为defaoult。你能用编译过程中遇到的错误更新答案吗? – Yury

2

如果您的二进制文件在out目录中结束,但不在映像中,这是因为您没有将二进制文件包含在映像中的规则。

device/<vendorname>/<devicename>/device.mk(或由device.mk包括一些makefile文件),你需要有两个条目之一:

PRODUCT_PACKAGES += my-binary 

或:

PRODUCT_COPY_FILES += path/to/my-binary:/root/target/path/to/my-binary 

...我建议PRODUCT_PACKAGES方法; PRODUCT_COPY_FILES更适合脚本和配置文件。

注意:PRODUCT_PACKAGES使用模块名称,其中PRODUCT_COPY_FILES使用二进制文件的实际名称/位置。

0

您还可以对我的以下工作 ..... LOCAL_MDULE_PATH:= $(TARGET_OUT_OPTIONAL_EXECUTABLES) ... 包括$(BUILD_EXECUTABLE)

相关问题