2011-11-18 105 views
3

是否有宏或命令来复制文件?我想将第三方库(libThirdParty.so)复制到输出目录(lib)。这是我的Android.mk文件的内容如何指定要在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) 

回答

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。

另请注意,复制粘贴可能会也可能不会。制造文件在缩进方面非常挑剔。我会确保“cp”行有一个真正的制表符缩进,并且没有别的缩进。如果“cp”不起作用,那么make可能会委托给CMD,您可以尝试“复制”。

祝你好运。

+0

谢谢,我会试试这个。我也发现这个命令:$(call add-prebuilt-files,EXECUTABLES,$(“Include/libThirdParty.so”)) – goyo

+0

基本上这只是利用了'.mk'文件包含在makefile ,'make'运行它。这些只是普通的'make'依赖项。但是当我们尝试这个技巧时,它在我们的'Android.mk'文件中不适用于我们。我添加了一个答案,记录了对我们有用的东西。 – steveha

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)/" 
+0

基本上这只是利用'.mk'文件包含在makefile中,'make'运行它的事实。这些只是普通的'make'依赖项。但是当我们尝试这个技巧时,它在我们的'Android.mk'文件中不适用于我们。我添加了一个答案,记录了对我们有用的东西。 – steveha

0

谷歌有一个正好适用于您的使用案例的特征: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

相关问题