2011-11-18 168 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