Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android NDK build-host-executable.mk:没有这样的文件或目录_Android_Android Ndk_Adt - Fatal编程技术网

Android NDK build-host-executable.mk:没有这样的文件或目录

Android NDK build-host-executable.mk:没有这样的文件或目录,android,android-ndk,adt,Android,Android Ndk,Adt,简短问题: 我正在尝试使用EclipseADT和NDKR10e(当前版本)构建一个具有JNI依赖关系的应用程序。JNI依赖项(显然)使用NDK中的build host executable.mk构建一个二进制文件以在构建主机上运行。但是,该脚本似乎已在最近的NDK版本中删除。我该怎么办 长问题: JNI依赖项来自AOSP,它附带了一个Android.mk文件(实际上,其中有几个) 我已经设置了Eclipse来根据说明构建本机部件,并将JNI代码树复制到我的应用程序源代码树的JNI目录中。此外,我

简短问题:

我正在尝试使用EclipseADT和NDKR10e(当前版本)构建一个具有JNI依赖关系的应用程序。JNI依赖项(显然)使用NDK中的
build host executable.mk
构建一个二进制文件以在构建主机上运行。但是,该脚本似乎已在最近的NDK版本中删除。我该怎么办

长问题:

JNI依赖项来自AOSP,它附带了一个
Android.mk
文件(实际上,其中有几个)

我已经设置了Eclipse来根据说明构建本机部件,并将JNI代码树复制到我的应用程序源代码树的
JNI
目录中。此外,我还必须编辑jni/Android.mk,添加以下行:

export TARGET_BUILD_TYPE := debug
据我所知,这将由AOSP工具链设置,但在从Eclipse构建时没有设置

但是,我得到以下错误:

android-ndk-r10e/build/core/build-host-executable.mk: No such file or directory
这是由我的
Android.mk
文件中的一行引起的:

include $(BUILD_HOST_EXECUTABLE)
NDK在
BUILD/core/BUILD all.mk
中定义了
BUILD\u HOST\u可执行文件

BUILD_HOST_EXECUTABLE     := $(BUILD_SYSTEM)/build-host-executable.mk
但是,
build\u host\u executable.mk
不在
build/core
目录中(在周围的行中声明的其他
build host-*.mk
脚本也是如此)

在谷歌上搜索一下,我发现这个脚本似乎出现在早期的NDK版本中(至少达到NDKR7R7B),但在以后的版本中(可能从r10b开始)似乎没有。JNI库被(现已废弃的)语音拨号应用程序使用。它最后一次提交是在2014年12月,尽管最后一次真正的代码更改可能是在2014年6月。AOSP已于2015年6月停止建设。与NDK发布历史相比,它可能永远不会针对r9d或r10之后的NDK版本构建

我发现的NDK r7b似乎是添加了主机目标支持的修补版本,另请参阅。看起来NDK中计划了对这一点的支持,并添加了一些存根,但从未完全实现。这让我可以选择使用本地工具链构建主机,或者修补NDK r10e以添加主机目标支持


另一方面,这个软件包已经成为AOSP的一部分有一段时间了(Cyanogenmod在KitKat之前一直包含它,并将其放入棒棒糖中),因此AOSP工具链必须能够构建它。有指向那个工具链的指针吗?也许可以从AOSP工具链中提取相关部分并将其添加到包中。

所讨论的JNI依赖项取自AOSP代码树。AOSP使用的工具链与NDK不同,尽管两者都是围绕一组GNU make宏构建的。Android.mk(它们的makefile等价物)的格式有意地在两者之间相似,因此在许多情况下,可以使用任一工具链构建项目

其中一种情况是主机目标不起作用,即构建二进制文件(可执行文件或库)以在构建主机上运行,而不是在Android设备上运行。AOSP工具链有这种支持,但NDK没有。令人困惑的是,NDK确实有一些用于该功能的存根(包括
BUILD\u HOST\u EXECUTABLE
和类似的定义),但缺少实现

有三种选择。请注意,您正在构建的包可能依赖于AOSP源代码中的其他包,您也需要构建这些包

  • 使用AOSP工具链构建本机代码(或主机目标),如中所述。这种方法最有可能成功,因为这是为其设计包的工具链。它至少需要包含构建工具的包,这些工具的大小为几GB。您可以获得所描述的整个AOSP源代码,该源代码应该提供您所需的所有依赖项,但这将下载大约50GB(!)的数据
  • NDK有一个补丁版本,它增加了对主机目标(或只是make宏)的支持。然而,它基于现已过时的NDK r7b,最后一次提交是在2012年的某个时候——您将使用一个有点异国情调且不再维护的工具链。此外,还需要通过检查包手动确定依赖项
  • 抛弃构建主机目标的
    Android.mk
    文件,并使用常规GNU工具链构建它们。这方面的介绍可以找到。您可以修改更高级别的
    Android.mk
    ,为主机目标调用“其他”工具链,这样您就可以自动完成整个构建。如果
    Android.mk
    内容非常复杂,那么所有这些都可能需要大量的工作,但这是一次性的工作,之后您的代码将使用标准工具链构建。与前面的方法一样,您需要手动确定依赖关系。主机目标所需的依赖项可能更容易实现,但是,如果它们是移植到Android的标准库,因为可能有一个上游版本设计为使用GNU工具链构建

如果将最新版本的build-host-executable.mk放到build/core中会发生什么情况?也许可以尝试在没有NDK的情况下构建主机可执行文件,即使用标准make&gcc?因为它们不是在Android上运行的,所以它们不能真正依赖NDK。。。应该可以单独构建它们。这将需要对makefile进行去雄性化…@ReubenScratton我有一个r7b的链接,你知道任何更高版本吗?谷歌似乎只提供了当前的一个…@ReubenScratton我尝试了r7b中的文件,将
LOCAL\u my
更改为
my
(如r10e
build\u executable.mk
)。现在我得到了
未知的本地\u模块\u类值:HOST\u EXECUTABLE
,显然生成文件的依赖项也被删除了。@ReubenScratton查看我对