ฉันใช้ Android Studio 2.2 Beta 3 และโปรเจ็กต์ทดสอบของฉันใช้ CMake เพื่อสร้างแอป C++ และ Java แบบไฮบริด อินเทอร์เฟซ JNI ถูกสร้างขึ้นโดย SWIG ซึ่งหมายความว่าฉันต้องการสร้าง SWIG wrappers ก่อนงาน gradle ภายนอกNativeBuild และ JavaCompile เช่น CMakeLists.txt ของฉันระบุไฟล์ wrapper cpp ที่สร้างโดย SWIG และโค้ด java ของฉันนำเข้าไฟล์ java wrapper ที่สร้างโดย SWIG
เพื่อให้แน่ใจว่า SWIG ทำงานและสร้างไฟล์ wrapper ที่จำเป็นก่อนงานใดๆ ฉันจึงระบุสิ่งต่อไปนี้ในไฟล์ app/build.gradle ของฉัน
project.afterEvaluate {
preBuild.dependsOn("runSwig")
}
เมื่อฉันรันจาก commandline โดยใช้คำสั่ง
./gradlew assembleDebug
ฉันไม่ประสบปัญหาใดๆ และงาน "runSwig" ของฉันจะทำงานก่อนงานอื่นๆ ตามที่คาดไว้
:app:runSwig
:app:preBuild
:app:preDebugBuild
<blah blah more tasks>
:app:externalNativeBuildDebug
แต่ปัญหาคือเมื่อโปรเจ็กต์ถูกเปิดครั้งแรกใน Android Studio ดูเหมือนว่าเนทีฟบิวด์ภายนอกจะถูกเรียกใช้ก่อนที่ runSwig และฉันได้รับข้อผิดพลาด
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.
ข้อผิดพลาดจะไม่หายไปจนกว่าฉันจะประกอบโดยใช้บรรทัดคำสั่งหรือลบไฟล์ wrap.cxx ออกจาก CMakeLists.txt ของฉันแล้วเพิ่มใหม่อีกครั้งหลังจากที่ swig รันได้สำเร็จอย่างน้อยหนึ่งครั้ง