在Android源中添加预构建的二进制文件

时间:2012-06-13 12:20:50

标签: android android-source android-build

我有一个原生二进制文件,我希望将其包含在Android的源代码中,这样当我编译它时,我的二进制文件将包含在/ system / bin中。

我已将我的二进制文件复制到文件夹/ p​​rebuilt / android-arm / my-binary中,并且我创建了一个新的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)

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

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 my-binary ,我会得到我发布的同一行。

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

我错过了什么吗?有没有什么方法可以只运行 make -j#我的二进制文件将包含在/ system / bin中?

3 个答案:

答案 0 :(得分:8)

刚刚在我的模拟器上测试过它正在运行。我在此文件夹中使用了gdbserver作为示例。我有一个针对Android的交叉编译strace并使用它嵌入到图像中。因此,说明将适用于此可执行文件。

  1. 在预建/ android-arm / strace
  2. 下创建一个文件夹
  3. 把你的二进制文件放在那里(在我的情况下是strace)
  4. 添加包含以下内容的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

答案 1 :(得分: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使用二进制文件的实际名称/位置。

答案 2 :(得分:0)

您还可以使用以下内容 ..... LOCAL_MDULE_PATH:= $(TARGET_OUT_OPTIONAL_EXECUTABLES) ... 包括$(BUILD_EXECUTABLE)