我有一个本机二进制文件,我想将它包含到Android的源代码中,所以当我编译它时,我的二进制文件将包含在/system/bin中。
我已经将二进制文件复制到文件夹/预置/ Android.mk /My-二进制文件中,并创建了一个新的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我的二进制,我得到了相同的行,我张贴。
我也尝试过运行make /target/product/generic/system.img我的-二进制,但它也不起作用。我的二进制文件显示在out子文件夹中,但它不会包含在system.imng中
我是不是遗漏了什么?有没有办法让我的二进制文件只运行make -j#就可以包含在/system/bin中?
发布于 2012-06-13 14:33:23
刚在我的仿真器上测试过了,而且还能用。我用这个文件夹中的gdbserver作为示例。我已经为android交叉编译了一个strace,并使用它嵌入到图像中。因此,这些指令将适用于这个可执行文件。
在prebuilt/android-arm/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
。
发布于 2016-06-03 19:05:09
如果二进制文件最终位于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
使用二进制文件的实际名称/位置。
发布于 2017-03-28 07:36:26
你也可以有以下对我有用的.LOCAL_MDULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)包括$(BUILD_EXECUTABLE)
https://stackoverflow.com/questions/11014706
复制相似问题