Следуя другим темам о том, как вызывать внешнюю команду в gradle после создания библиотечного проекта, мне удалось заставить ее работать.
В моем случае проект приложения Android NDK имеет статическую библиотеку C ++ в качестве модуля зависимости. Я хочу скопировать собранную библиотеку (файл * .a) куда-нибудь после завершения сборки. Поэтому я подготовил задание postBuildTask()
, чтобы выполнить копирование файла и разрешить его запуск после задания externalNativeBuild
. Это работает.
task postBuildTask(type:Exec) \
{
workingDir '.'
commandLine 'cmd', '/c', 'copyLibrary.bat ARGUMENT_1 ARGUMENT_2 ARGUMENT_3'
}
tasks.whenTaskAdded
{ task ->
if(task.project.name == 'NativeStaticLib') // NativeStaticLib is a native C++ static library proj
{
if(task.name.indexOf("externalNativeBuild") != -1) //The task building native library by CMake
{
task.finalizedBy(postBuildTask) //Calls "copyLIbrary.bat" upon completion
}
}
}
Мой вопрос
Теперь я хочу оптимизировать свою задачу, поскольку независимо от того, был ли изменен код этой библиотеки C ++, всегда вызывается задача postBuildTask()
, что бесполезно и в большинстве случаев замедляет сборку.
Мне нужно найти способ определить, действительно ли статическая библиотека C ++ перестроена, и тогда я вызываю postBuildTask()
.
Я вижу только следующее сообщение, отображаемое в консоли, которое указывает, что для библиотеки нечего строить, поскольку ее код не изменился:
> Task :NativeStaticLib:externalNativeBuildDebug
Build NativeStaticLib arm64-v8a
ninja: no work to do.
Так как я могу определить, действительно ли статическая библиотека C ++ создана?