我想建立一个静态库,使用最新的Android NDK(r5),我没有任何运气。我已经能够毫无问题地构建和运行示例(例如HelloJni),但从“从头开始”开始一个新项目已经是另一回事了。如何为NDK静态库编写/调试Android.mk?
对于这个实验,我试图构建libpng。我的文件夹结构如下所示:
root
|
+--- jni
|
+---- Android.mk (one line: "include $(call all-subdir-makefiles)")
|
+---- png
|
+---- Android.mk (see below)
|
+---- { a bunch of .c and .h files)
所以我有两个Android.mks。一个用于构建所有子项目,另一个用于libpng子项目。根/ JNI/PNG/Android.mk是这样的:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := png
MODULE_PATH := $LOCAL_PATH
LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/*.c)
LOCAL_C_INCLUDES := $(wildcard $(LOCAL_PATH)/*.h)
LOCAL_INTERMEDIATE_TARGETS += junk
junk:
echo $(LOCAL_SRC_FILES)
include $(BUILD_STATIC_LIBRARY)
此版本的设置似乎什么也不做(即从根文件夹运行NDK,建立什么也不做,甚至后NDK,建立清洁)。详细运行(ndk-build V = 1)会显示一些rm -f调用(删除不存在的文件夹),但与项目或子项目无关。
我对这个构建脚本失败的原因很感兴趣,但这个过程应该是微不足道的,所以我确信它没有什么太有趣的地方。我对如何开始自己攻击构建错误更感兴趣。在上面的脚本中回声调用从来没有打 - 我不知道如何确定什么值或为什么它跳过子项目。有没有人找到一种方法来知道构建系统是试图用来做什么?
我也有兴趣知道这些工具是否有文档,或者它是否只是NDK文档文件夹中的一小部分文本文件?我一直在试图通过复制我从Google搜索中发现的随机Android.mk的部分来解决这个问题,但是只有简单的NDK示例中使用的几个命令似乎被记录下来,所以这些经验实际上只是提出了新的问题。
谢谢。我已经尝试过,并没有改变任何行为(ndk-build仍然是一个无操作)。我也尝试删除LOCAL_C_INCLUDES,因为我不知道为什么会被使用。没有运气。这听起来像你在暗示我使用eclipse来生成这个mk文件?我不知道你可以这样做。我可能能够使用它而不是关于如何调试.mk文件的说明。你能指点我怎么做的吗? – Dave 2011-04-27 23:28:41
奇怪:对不起,没有工作。原始的参考文件是手工生成的,但由Eclipse构建,除非我记错。我会实际尝试自己构建它。有一点需要注意:如果你在Windows上这样做,你必须确保你的路径中没有空格,不管怎么样,或者在十多年后,Cygwin STILL不能正确处理空格(不是视觉工作室ddk做了一个粉碎的工作,所以这可能只是Windows吸吮风)。 – Femi 2011-04-27 23:49:33
我将尝试报废我的文件夹结构并逐字使用您的文件。但是关于如何调试这些.mk文件的原始问题仍然存在。 仅供参考,我在Mac上... – Dave 2011-04-27 23:55:44