Android Gradle - Как вызвать внешнюю команду после того, как библиотека построена, НО только после того, как библиотека «действительно построена»? - PullRequest
0 голосов
/ 12 июня 2019

Следуя другим темам о том, как вызывать внешнюю команду в 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 ++ создана?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...