Как я могу указать файл для копирования в файле Android.mk - PullRequest
3 голосов
/ 18 ноября 2011

Есть ли макрос или команда для копирования файлов?Мне бы хотелось, чтобы сторонняя библиотека (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 ]

2 голосов
/ 19 ноября 2011

У меня есть шаг сборки, который я добавил для одного из моих сгенерированных файлов .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, и вместо этого вы можете попробовать «copy».

Удачи.

0 голосов
/ 14 сентября 2012

У Google есть функция, которая точно предназначена для вашего случая использования: PREBUILT_SHARED_LIBRARY

Если вы проверите документацию в каталоге docs, включенном в NDK, вы найдете ANDROID-MK.html, в котором упоминается этократко и PREBUILTS.html, которая полностью документирует функцию.Вы можете указать исходный и целевой каталоги, а также указать новое имя файла при его копировании.

Существует также PREBUILD_STATIC_LIBRARY, который делает то же самое для статической библиотеки.

Может быть возможно обмануть его в копировании произвольных файлов ... вышеупомянутые функции реализованы файлами, называемыми, соответственно, prebuilt-shared-library.mk и prebuilt-static-library.mk.Внутри они определяют расширение, которое должно быть в файле (соответственно .so и .a).Возможно, вы могли бы создать другой файл .mk, который определил какое-то другое расширение, чтобы можно было копировать другие типы файлов.Но нам нужно было только скопировать библиотеки, и мы не экспериментировали с попытками обмануть систему сборки.

PS Эта публикация в блоге интересна.Это относится к BUILD_PREBUILT, которого нет в моей копии NDK.Интересно, относится ли это сообщение к более ранней версии NDK, в которой было BUILD_PREBUILT для копирования любого типа файла (без проверки на наличие необходимого расширения).

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

0 голосов
/ 07 августа 2012

Я знаю, что эта ветка старая, но сам нашел ее во время поиска чего-либо.

Из файла 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)/" 
...