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

在Android源代码中添加预构建的二进制文件,android,android-source,android-build,Android,Android Source,Android Build,我有一个本机二进制文件,我想将其包含在Android的源代码中,这样当我编译它时,我的二进制文件将包含在/system/bin中 我已将我的二进制文件复制到/prebuild/android arm/my binary文件夹中,并使用以下内容创建了一个新的android.mk: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES := my-binary LOCAL_MODULE := my-binary LOC

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

我已将我的二进制文件复制到/prebuild/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)
target Prebuilt: my-binary (out/target/product/generic/obj/EXECUTABLES/my-binary_intermediates/my-binary)
但当我运行make时,我在日志中得到的唯一参考是:

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中。在中有一个几乎相同的问题,但询问者已经知道基本程序,并且根本没有解释。如果我运行makemybinary,我会得到与我发布的相同的行

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


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

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

  • 在prebuild/android arm/strace下创建一个文件夹
  • 把你的二进制文件放在那里(在我的例子中是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预编译snod-j4
    (如果您已经编译了映像),或者您当然也可以使用
    make-j4

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

    device///device.mk
    中(或在
    device.mk
    包含的某些makefile中),您需要有两个条目之一:

    PRODUCT_PACKAGES += my-binary
    
    或:

    。。。我建议采用
    产品包
    方法<代码>产品拷贝文件更适合脚本和配置文件


    注意:
    PRODUCT\u-PACKAGES
    使用模块名称,其中
    PRODUCT\u-COPY\u-FILES
    使用二进制文件的实际名称/位置。

    您也可以使用以下适用于我的 ..... 本地\模块\路径:=$(目标\输出\可选\可执行文件) ...
    include$(BUILD\u EXECUTABLE)

    是的,我在同一个目录中使用了gdbserver中的Android.mk作为参考,但它在一些readon中不起作用。我要试试看,嗯;我马上回来。。。编辑:嗯,预建的snod-j工作了!我要做一个清理,看看是否从零开始重建所有东西也能正常工作…真的有一些奇怪的事情正在发生。。。在源代码上直接从repo运行make(不使用我的二进制代码)可以很好地编译。但当我添加二进制文件时,会出现奇怪的错误。最糟糕的是,即使我做了一个清理并取出了我的文件夹(这应该让源代码与开始时一样,因为我没有接触任何其他东西),当我试图编译它时,我仍然会得到编译错误。我正在释放空间并确保它与代码本身没有任何关系(我在VMware上运行Ubuntu 10.04),只需删除“out”文件夹即可清除。它不会将代码更改为defaoult。你能用你在编译过程中得到的错误更新你的答案吗。。。我从repo重新下载了源代码,并在没有ccache的情况下构建了它,并使用了纯make,没有任何-j4,它只是构建了。无论如何,它仍然不起作用;在模拟器上使用DDMS时,我的二进制文件没有出现在/system/bin中。这很奇怪。我在我的模拟器中看到这个文件-我刚刚检查过。