按照其他有关如何在构建库项目后在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 ++静态库是否真正构建?