9

我有一个本机二进制文件,我想将它包含到 Android 的源代码中,这样当我编译它时,我的二进制文件就会包含在 /system/bin 中。

我已将二进制文件复制到文件夹 /prebuilt/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 中。在 Android 上安装预构建的二进制文件中有一个几乎相同的问题:“未找到” ,但提问者已经知道基本过程,根本没有解释。如果我运行make my-binary,我会得到我发布的同一行。

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

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

4

3 回答 3

9

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

  1. 在 prebuilt/android-arm/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

于 2012-06-13T14:33:23.557 回答
3

如果您的二进制文件最终在 out 目录中但不在图像中,那是因为您没有将二进制文件包含在图像中的规则。

device/<vendorname>/<devicename>/device.mk(或包含在某些 makefile 中device.mk)中,您需要具有以下两个条目之一:

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使用二进制文件的实际名称/位置。

于 2016-06-03T19:05:09.767 回答
0

您还可以执行以下对我有用的操作..... LOCAL_MDULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES) ... 包括 $(BUILD_EXECUTABLE)

于 2017-03-28T07:36:26.880 回答