build.gradle:在构建之前复制目录

时间:2016-05-31 15:33:12

标签: android java-native-interface build.gradle

在我的android应用程序中,我使用JNI来处理一些C ++库源代码。 必须将这些来源从自己的存储库(".../Connection/Connection")复制到"src/main/jni/CoreLib/"

问题是我需要为每个构建重新创建"src/main/jni/CoreLib/"目录以删除未使用的文件。 我在"jni"文件夹中也有一个cpp文件,该文件引用了"CoreLib"目录中已删除的文件,由于包含了以下内容而导致错误:

#include "CoreLib/EventDispatcher.h" // "src/main/jni/MyCustomCppFile.cpp

我假设编译器检查包含在我的脚本执行之前。 问题是:如何在任何类型的编译/链接验证之前重新创建并复制所有cpp源到我的"CoreLib"目录?或者是否有其他解决方法来摆脱这个错误?

这是我的一些build.gradle文件:

task deleteCoreLibDir(type: Delete) {
    println('Deleting CoreLib dir')
    delete 'src/main/jni/CoreLib'
}

task createCoreLibDir {
    File f = new File('src/main/jni/CoreLib/');
    f.mkdirs();
    if (f.exists()) {
        println('Re-created CoreLib dir')
    } else {
        println('!!!! CoreLib dir was not created')
    }
}

task copyConnectionFiles(type: Copy) {
    println('Copying files from Core library to current project')
    File thisProj = file('src');
    File connectionDir = thisProj.parentFile.parentFile.parentFile.parentFile;
    File f = new File(connectionDir, 'Connection/Connection'); // library folder

    from f.absolutePath
    into 'src/main/jni/CoreLib/'
    include('**/*')
}

afterEvaluate {
    android.applicationVariants.all { variant ->
        variant.javaCompiler.dependsOn(deleteCoreLibDir)
        variant.javaCompiler.dependsOn(createCoreLibDir)
        variant.javaCompiler.dependsOn(copyConnectionFiles)
    }
}

提前致谢!

0 个答案:

没有答案