2016-08-31 5 views
7

में ग्राडल कार्य ऑर्डरिंग समस्या मैं एंड्रॉइड स्टूडियो 2.2 बीटा 3 का उपयोग कर रहा हूं और मेरी टेस्ट प्रोजेक्ट एक हाइब्रिड सी ++ और जावा ऐप बनाने के लिए सीएमके का उपयोग करती है। जेएनआई इंटरफेस एसडब्ल्यूआईजी द्वारा उत्पन्न होता है। इसका मतलब है कि मैं बाहरीनेटबिल्ड और जावाकंपाइल ग्रेडल कार्यों से पहले SWIG रैपर उत्पन्न करना चाहता हूं; यानी मेरा CMakeLists.txt SWIG द्वारा उत्पन्न सीपीपी रैपर फ़ाइल निर्दिष्ट करता है और मेरा जावा कोड SWIG द्वारा जेनरेट की गई जावा रैपर फ़ाइलों को आयात करता है।एंड्रॉइड स्टूडियो

सुनिश्चित करने के लिए बड़ा घूँट चलाया जाता है और किसी भी कार्य करने से पहले आवश्यक आवरण फ़ाइलें उत्पन्न करता है, मैं अपने ऐप/build.gradle फ़ाइल

project.afterEvaluate { 
    preBuild.dependsOn("runSwig") 
} 

में निम्नलिखित जब मैं कमांड

का उपयोग कर कमांडलाइन से चलाने निर्दिष्ट करता है
./gradlew assembleDebug 

मैं किसी भी मुद्दे का सामना नहीं करते हैं और उम्मीद के रूप में मेरे काम "runSwig" अन्य कार्यों में से किसी से पहले चलाता

:app:runSwig 
:app:preBuild 
:app:preDebugBuild 
<blah blah more tasks> 
:app:externalNativeBuildDebug 

लेकिन मुद्दा जब परियोजना पहले एंड्रॉयड स्टूडियो में खोला जाता है यह लग रहा है बाहरी देशी निर्माण की तरह 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. 

त्रुटि मैं जब तक नहीं होती या तो आदेश का उपयोग कर इकट्ठा त्रुटि मिलती है लाइन या, मेरे CMakeLists.txt से wrap.cxx फ़ाइल को हटा दें और कम से कम एक बार सफलतापूर्वक चलाने के बाद इसे फिर से जोड़ें।

उत्तर

1

हाँ, ऐसा इसलिए है क्योंकि एंड्रॉइड स्टूडियो आईडीई को संकलन से पहले आईडीई में प्रदर्शित करने की आवश्यकता होती है: कमांड लाइन और आईडीई बिल्ड के बीच अलग-अलग व्यवहार का पर्दाफाश करें। here में मैं किसी और चीज से पहले आवश्यक रेपो डाउनलोड करने के लिए हैक करता हूं, इसलिए एंड्रॉइड स्टूडियो शिकायत नहीं करेगा। लेकिन यह सुंदर नहीं है ... और लंबे एंड्रॉइड स्टूडियो समय शुरू करते हैं ...

0

मैं एंड्रॉइड स्टूडियो 3 (और 2.3 मुझे लगता है) में निर्माण के क्रम के साथ इसी समस्या में भाग गया है।

अगर यह एक पारंपरिक रूप से मान्य समाधान है मैं नहीं जानता, लेकिन यह अपने Android/बड़ा घूँट/NDK उदाहरण (यहाँ: https://github.com/sureshjoshi/android-ndk-swig-example) में काम करने के लिए -seems-

मैं अपने Gradle फाइल में इस जोड़ा है, इसलिए लापता फाइलों पर निर्माण विफल होने से पहले उस सीएमके को बुलाया जाता है। सीएमईजी ने अपनी जावा फाइलों को स्वतः उत्पन्न करने और उन्हें उचित रूप से रखने के लिए एसडब्ल्यूआईजी को बुलाया।

project.afterEvaluate { 
    javaPreCompileDebug.dependsOn externalNativeBuildDebug 
} 

मैं शायद यह भी एक

javaPreCompileRelease.dependsOn externalNativeBuildRelease 

या कुछ इसी तरह ... बस इसे अभी तक परीक्षण नहीं किया की जरूरत है।

इस समस्या से उत्पन्न: https://github.com/sureshjoshi/android-ndk-swig-example/issues/8

संबंधित मुद्दे