Tôi đang sử dụng Android Studio 2.2 Beta 3 và dự án thử nghiệm của tôi sử dụng CMake để xây dựng ứng dụng Java và C++ lai. Giao diện JNI được tạo bởi SWIG. Điều này có nghĩa rằng tôi sẽ muốn tạo các trình bao bọc SWIG trước các nhiệm vụ của lớp ngoàiNativeBuild và JavaCompile; tức là CMakeLists.txt của tôi chỉ định tệp trình bao bọc cpp được tạo bởi SWIG và mã java của tôi nhập khẩu các tệp trình bao bọc java được tạo bởi SWIG.Vấn đề đặt hàng nhiệm vụ tốt nghiệp trong Android Studio
Để đảm bảo SWIG được điều hành và tạo ra các tập tin wrapper cần thiết trước khi bất kỳ nhiệm vụ, tôi xác định sau đây trong ứng dụng/build.gradle tập tin của tôi
project.afterEvaluate {
preBuild.dependsOn("runSwig")
}
Khi tôi chạy từ dòng lệnh bằng cách sử dụng lệnh
./gradlew assembleDebug
tôi không gặp phải bất kỳ vấn đề và như mong đợi nhiệm vụ của tôi "runSwig" chạy trước bất kỳ trong những nhiệm vụ khác
:app:runSwig
:app:preBuild
:app:preDebugBuild
<blah blah more tasks>
:app:externalNativeBuildDebug
Nhưng vấn đề là khi dự án được khánh thành vào Android Studio, nó trông giống như bên ngoài quê hương xây dựng được gọi trước khi runSwig và tôi nhận được lỗi
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.
Lỗi không biến mất đi cho đến khi tôi hoặc lắp ráp sử dụng lệnh dòng OR, loại bỏ các tập tin wrap.cxx từ CMakeLists.txt của tôi và thêm lại nó sau khi swig được chạy thành công ít nhất một lần.