Używam Androida Studio 2.2 Beta 3, a mój projekt testowy wykorzystuje CMake do zbudowania hybrydowej aplikacji C++ i Java. Interfejs JNI jest generowany przez SWIG. Oznacza to, że chciałbym wygenerować wrappery SWIG przed zewnętrznymi zadaniami gradacyjnymi NativeBuild i JavaCompile; to znaczy mój plik CMakeLists.txt określa plik opakowaniowy cpp generowany przez SWIG, a mój kod java importuje pliki opakowania Java wygenerowane przez SWIG.Problem z zamawianiem zadań Gradle w Androidzie Studio
Aby zapewnić SWIG jest prowadzony i generuje niezbędne pliki otoki przed wszelkimi zadaniami, I określa następujące w moim app pliku
project.afterEvaluate {
preBuild.dependsOn("runSwig")
}
/build.gradle Kiedy uruchomić z linii poleceń za pomocą polecenia
./gradlew assembleDebug
nie napotkają żadnych problemów i zgodnie z oczekiwaniami moje zadanie „runSwig” biegnie zanim którykolwiek z pozostałych zadań
:app:runSwig
:app:preBuild
:app:preDebugBuild
<blah blah more tasks>
:app:externalNativeBuildDebug
Ale problem jest, gdy projekt jest otwarty w Android Studio, wygląda zewnętrzny rodzimy build zostanie wywołana przed runSwig i pojawia się błąd
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.
Błąd nie odejdzie dopóki nie albo zmontować za pomocą polecenia linii LUB, usuń plik wrap.cxx z mojego CMakeLists.txt i dodaj go ponownie po tym, jak swig zostanie uruchomiony co najmniej raz.