如何指定要在Android.mk文件中复制的文件

时间:2011-11-18 19:46:11

标签: android java-native-interface cygwin

是否有复制文件的宏或命令?我想将第三方库(libThirdParty.so)复制到输出目录(lib)。这是我的Android.mk文件的内容

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := ndkFoo
LOCAL_SRC_FILES := ndkFoo.c

LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog

include $(BUILD_SHARED_LIBRARY)

3 个答案:

答案 0 :(得分:2)

我为我生成的一个.cpp文件添加了一个构建步骤;你可以做类似的事情。

请注意,有人告诉我,Google正在做的事情并不支持,因此请自行承担风险。不过,我一直在使用类似下面代码的东西超过一年。以下是对它的外观的粗略概念:

LOCAL_PATH:= $(call my-dir)
# this was important for some cases; can't remember if it's important here, but I don't want to steer you wrong if it isn't
REAL_LOCAL_PATH:=$(LOCAL_PATH) 

include $(CLEAR_VARS)

LOCAL_MODULE    := ndkFoo
# again, I'm being paranoid here
REAL_LOCAL_MODULE    := $(LOCAL_MODULE)

LOCAL_SRC_FILES := ndkFoo.c

$(REAL_LOCAL_PATH)/obj/local/armeabi/$(REAL_LOCAL_MODULE).so : $(REAL_LOCAL_PATH)/libs/armeabi/libThirdParty.so

$(REAL_LOCAL_PATH)/libs/armeabi/libThirdParty.so : $(PATH_TO_LIB_THIRD_PARTY)/libThirdParty.so
    cp $(PATH_TO_LIB_THIRD_PARTY)/libThirdParty.so $(REAL_LOCAL_PATH)/libs/armeabi/libThirdParty.so

LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog
include $(BUILD_SHARED_LIBRARY)

请注意,您需要定义PATH_TO_LIB_THIRD_PARTY。

另请注意,复制粘贴可能有效,也可能无效。众所周知,Makefiles对缩进很挑剔。我确保“cp”行有一个真正的制表符缩进,并且没有其他内容缩进。如果“cp”不起作用,则make可能会委托给CMD,您可以尝试“复制”。

祝你好运。

答案 1 :(得分:0)

我知道这个帖子已经老了,但是在我自己搜索的时候找到了它。

来自PowerVR SDK,Android.mk文件。

您可以创建文件夹和复制文件。

PVRSDKDIR := $(LOCAL_PATH)
ASSETDIR := $(PVRSDKDIR)/TrainingCourse/IntroducingPOD/OGLES2/Build/Android/assets

$(ASSETDIR):
-mkdir $(ASSETDIR)

$(ASSETDIR)/tex_base.pvr: $(ASSETDIR) $(PVRSDKDIR)/TrainingCourse/IntroducingPOD/OGLES2/tex_base.pvr
cp "$(PVRSDKDIR)/TrainingCourse/IntroducingPOD/OGLES2/tex_base.pvr" "$(ASSETDIR)/" 

答案 2 :(得分:0)

Google的功能完全适用于您的用例:PREBUILT_SHARED_LIBRARY

如果您查看NDK中包含的docs目录中的文档,您会发现ANDROID-MK.html会简要提及此功能,PREBUILTS.html会完整记录该功能。您可以指定源目录和目标目录,并且可以在复制文件时为该文件指定新名称。

还有PREBUILD_STATIC_LIBRARY对静态库做同样的事情。

有可能欺骗它复制任意文件......上述功能分别由prebuilt-shared-library.mkprebuilt-static-library.mk调用的文件实现。在里面,他们定义了一个必须在文件上的扩展名(分别为.so.a)。您可以创建另一个.mk文件,定义其他扩展名以启用复制其他类型的文件。但是我们只需要复制库,而我们还没有尝试过欺骗构建系统。

P.S。这篇博文很有意思。它指的是BUILD_PREBUILT,它在我的NDK副本中不存在。我想知道这篇博文是否引用了早期版本的NDK,它有BUILD_PREBUILT来复制任何类型的文件(没有检查所需的扩展名)。

http://karthiksden.blogspot.com/2011/03/copying-data-files-using-androidmk.html