【发布时间】:2023-03-21 00:39:01
【问题描述】:
我正在尝试使用最新的 Android NDK (r5) 构建一个静态库,但我没有任何运气。我已经能够毫无问题地构建和运行示例(例如 HelloJni),但从“零”开始一个新项目却是另一回事。
对于这个实验,我正在尝试构建 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 子项目。 root/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-build 什么也不做,即使在 ndk-build clean 之后也是如此)。详细运行(ndk-build V=1)显示一些 rm -f 调用(删除不存在的文件夹),但与项目或子项目无关。
我很感兴趣为什么这个构建脚本会失败,但是这个过程应该是微不足道的,所以我确信它没有什么特别有趣的。我对如何开始自己攻击构建错误更感兴趣。上面脚本中的 echo 调用永远不会被命中——我不知道如何确定什么是值或为什么它会跳过子项目。有没有人找到一种方法来了解构建系统正在尝试做什么?
我还想知道这些工具是否有文档,或者它是否只是 NDK 文档文件夹中的少数文本文件?我一直在尝试通过复制我从谷歌搜索中找到的随机 Android.mk 片段来解决这个问题,但似乎只有简单 NDK 示例中使用的少数命令被记录在案,因此这种体验实际上只是提出了新问题。
【问题讨论】:
标签: android android-ndk