2016-08-31 18 views
7

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.

Trả lời

1

Vâng, điều này là do Android Studio IDE cần có các tệp để hiển thị trong IDE trước khi biên dịch: hiển thị hành vi khác nhau giữa dòng lệnh và tạo IDE. Trong here Tôi hack để tải xuống bản repo cần thiết sớm hơn bất kỳ thứ gì khác, vì vậy Android Studio sẽ không phàn nàn. Nhưng nó không phải là khá ... và dài studio android bắt đầu lên thời gian ...

0

Tôi đã chạy vào cùng một vấn đề này với thứ tự xây dựng trong Android Studio 3 (và 2,3 tôi đoán).

Tôi không biết nếu điều này là một giải pháp truyền thống có giá trị, nhưng nó -seems- để làm việc trong ví dụ Android/SWIG/NDK của tôi (ở đây: https://github.com/sureshjoshi/android-ndk-swig-example)

tôi đã thêm vào tập tin này Gradle tôi, vì vậy CMake được gọi trước khi xây dựng không thành công trên các tệp bị thiếu. CMake gọi SWIG để tự động tạo các tệp Java của tôi và đặt chúng một cách thích hợp.

project.afterEvaluate { 
    javaPreCompileDebug.dependsOn externalNativeBuildDebug 
} 

tôi có lẽ cũng cần một

javaPreCompileRelease.dependsOn externalNativeBuildRelease 

hoặc một cái gì đó tương tự ... Chỉ cần đã không kiểm tra nó được nêu ra.

Xuất phát từ sự cố này: https://github.com/sureshjoshi/android-ndk-swig-example/issues/8

Các vấn đề liên quan