【问题标题】:How to set up Android.mk to perform nested build如何设置 Android.mk 以执行嵌套构建
【发布时间】:2013-09-25 19:59:10
【问题描述】:

我想弄清楚如何设置一个Android.mk 以依赖另一个。后者构建原生代码共享库,前者有依赖共享库的JNI库。我们称它们为shared_libservice

现在,serviceAndroid.mk 包含如下代码:

LOCAL_SRC_FILES := ../../../shared_lib/libs/armeabi/libshared_NDK.so
include $(PREBUILT_SHARED_LIBRARY)

这可行,但前提是 shared_lib 已经构建。构建 service 不会构建 shared_lib

我编写了一个 shell 脚本,它首先构建 shared_lib,然后构建 service。但似乎应该可以使用构建系统来完成构建任务。

我尝试使用$(call import-module,...),但没有找到任何有效的语法。 makefile 路径扩展中有如此多的魔力,以至于我永远无法预测会发生什么。例如,将此代码添加到 service 的 Android.mk 中:

include $(CLEAR_VARS)
SL_DIR=$(LOCAL_PATH)/../../../shared_lib
$(call import-add-path,$(SL_DIR))
NDK_MODULE_PATH := $(SL_DIR)
$(call import-module, jni)

这根本不起作用;我得到了这个错误结果:

/Users/steveha/devel/android/ndk/build/core/build-binary.mk:450: warning: overriding commands for target `obj/local/armeabi/libshared_NDK.so'
/Users/steveha/devel/android/ndk/build/core/build-binary.mk:473: warning: ignoring old commands for target `obj/local/armeabi/libshared_NDK.so'
/Users/steveha/devel/android/ndk/build/core/build-binary.mk:489: warning: overriding commands for target `libs/armeabi/libshared_NDK.so'
/Users/steveha/devel/android/ndk/build/core/build-binary.mk:489: warning: ignoring old commands for target `libs/armeabi/libshared_NDK.so'
make: *** No rule to make target `../../shared_library/jni/com_dts_SourceFile.cpp', needed by `obj/local/armeabi/objs/dts-shared-jni/com_dts_shared_SourceFile.o'.  Stop.

看起来import-add-path 弄乱了变量,从而导致在错误的位置搜索 C++ 源文件。但是import-module 没有它就失败了。

此外,如果您先在 shared_lib 上运行 ndk-build clean,则在 service 的目录中运行 ndk-build clean 会失败并出现错误。由于.so 文件被列为本地源文件,因此它不存在是错误的。

ndk-build 建立在make 之上,而make 有一个单一的全局命名空间,而我为使一个Android.mk 构建另一个Android.mk 所做的一切都遇到了这样的问题。最好的方法似乎是显式调用ndk-build 以获取make 的新实例,从而获得一个单独的命名空间。

有什么方法可以让ndk-buildservice 上首先构建shared_lib?如果上述ndk-build clean 案例也能正常工作,则加分。

【问题讨论】:

    标签: android android-ndk ndk-build


    【解决方案1】:

    我从来没有找到一个纯粹的“制造”解决方案。相反,我编写了一个 Python 脚本来依次构建每个模块。在自己的进程中运行每个ndk-build 既简单又健壮。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-17
      • 2011-11-30
      • 2019-02-06
      • 2021-12-02
      • 1970-01-01
      相关资源
      最近更新 更多