我想弄清楚如何设置一个Android.mk
来依赖另一个。后者构建了本机代码共享库,前者具有依赖于共享库的JNI库。我们称这些为shared_lib
和service
。
目前,Android.mk
的{{1}}包含以下代码:
service
这样可行,但仅在已构建LOCAL_SRC_FILES := ../../../shared_lib/libs/armeabi/libshared_NDK.so
include $(PREBUILT_SHARED_LIBRARY)
时才有效。构建shared_lib
不会构建service
。
我写了一个shell脚本,首先构建shared_lib
,然后构建shared_lib
。但似乎应该可以使用构建系统来执行构建任务。
我曾尝试使用service
,但未找到任何有效的语法。 makefile路径扩展中有太多魔力,我无法预测会发生什么。例如,将此代码添加到$(call import-module,...)
的Android.mk中:
service
这根本不起作用;我得到了这个错误结果:
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.
搞乱了变量,从而导致在错误的地方搜索C ++源文件。但import-add-path
没有它就会失败。
此外,如果您首先在import-module
上运行ndk-build clean
,则在service
目录中运行ndk-build clean
会失败并显示错误。由于shared_lib
文件被列为本地源文件,因此它不存在是错误的。
.so
建立在ndk-build
之上,make
有一个全局命名空间,我尝试过使make
构建另一个Android.mk
Android.mk
有这样的问题。最好的方法似乎是显式调用ndk-build
来获取make
的新实例,从而获得一个单独的命名空间。
有没有办法进行设置,以便ndk-build
上service
首先构建shared_lib
?如果上述ndk-build clean
案例也能正常运作,则可获得奖励积分。
答案 0 :(得分:0)
我从未找到纯粹的" make"解。相反,我编写了一个Python脚本来依次构建每个模块。在自己的进程中运行每个ndk-build
非常简单而且健壮。