Saya menggunakan Android Studio 2.2 Beta 3 dan proyek pengujian saya menggunakan CMake untuk membangun aplikasi hybrid C++ dan Java. Antarmuka JNI dihasilkan oleh SWIG. Ini berarti saya ingin membuat pembungkus SWIG sebelum tugas gradle externalNativeBuild dan JavaCompile; yaitu CMakeLists.txt saya menentukan file pembungkus cpp yang dihasilkan oleh SWIG dan kode java saya mengimpor file pembungkus java yang dihasilkan oleh SWIG.
Untuk memastikan SWIG dijalankan dan menghasilkan file pembungkus yang diperlukan sebelum tugas apa pun, saya menentukan yang berikut ini di file app/build.gradle saya
project.afterEvaluate {
preBuild.dependsOn("runSwig")
}
Ketika saya menjalankan dari baris perintah menggunakan perintah
./gradlew assembleDebug
Saya tidak menghadapi masalah apa pun dan seperti yang diharapkan, tugas saya "runSwig" berjalan sebelum tugas lainnya
:app:runSwig
:app:preBuild
:app:preDebugBuild
<blah blah more tasks>
:app:externalNativeBuildDebug
Namun masalahnya adalah ketika proyek pertama kali dibuka di Android Studio, sepertinya build asli eksternal dipanggil sebelum runSwig dan saya mendapatkan kesalahan
CMake Error at CMakeLists.txt:79 (add_library):
Cannot find source file:
../../../wrap.cxx
Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp
.hxx .in .txx
FAILURE: Build failed with an exception.
Kesalahan tidak hilang sampai saya merakit menggunakan baris perintah ATAU, menghapus file wrap.cxx dari CMakeLists.txt saya dan menambahkannya kembali setelah swig berhasil dijalankan setidaknya sekali.