2017-09-26 9 views
6

के साथ एंड्रॉइड एनडीके मैं एंड्रॉइड स्टूडियो पर GoogleTest का उपयोग करने की कोशिश कर रहा हूं।Google टेस्ट

जो मैंने समझा, उसके अनुसार, एनडीके के नवीनतम संस्करण में gtest शामिल है।

मुझे यह स्पष्ट मार्गदर्शिका नहीं मिली कि इसे कैसे किया जाए।

मैं पीछा किया this दस्तावेज़:

तो, मैं एक नई परियोजना, बनाया JNI फ़ोल्डर और निम्न फ़ाइलों को खोला (फ़ाइलें मैं बिल्कुल लिखा क्या दस्तावेज़ के अंदर):

enter image description here

लेकिन यह #include gtest/gtest.h

इसके अलावा को नहीं पहचानता है,

  • अंत में एडीबी कैसे चलाएं?
  • मैंने एक android.mk फ़ाइल बनाई लेकिन मुझे इसे कहां कहां जाना चाहिए?

उत्तर

5

आप अपने externalNativeBuild ड्राइव करने के लिए cmake चुनें (और यह पसंदीदा विकल्प है, Android डेवलपर NDK guide के अनुसार), तो आप बस अपने CMakeLists.txt निम्न पंक्तियां जोड़ें कर सकते हैं:

set(GOOGLETEST_ROOT ${ANDROID_NDK}/sources/third_party/googletest/googletest) 
add_library(gtest STATIC ${GOOGLETEST_ROOT}/src/gtest_main.cc ${GOOGLETEST_ROOT}/src/gtest-all.cc) 
target_include_directories(gtest PRIVATE ${GOOGLETEST_ROOT}) 
target_include_directories(gtest PUBLIC ${GOOGLETEST_ROOT}/include) 

add_executable(footest src/main/jni/foo_unittest.cc) 
target_link_libraries(footest gtest) 

यदि आपका निर्माण सफल होता है, तो आपको app/.externalNativeBuild/cmake/debug/x86/footest मिलेगा। यहां से, आप एमुलेटर या डिवाइस पर चलाने के लिए README.NDK में निर्देशों का पालन कर सकते हैं।


नोट्स:

  • सुनिश्चित करें कि ABI लक्ष्य आप उपयोग से मेल खाता है (गाइड इस बारे में बहुत स्पष्ट नहीं है)।
  • निर्मित एबीआई की सूची abiFiltersbuild.gradle पर नियंत्रित है। एंड्रॉइड स्टूडियो में, ndk-buildमें APP_ABI सेट को अनदेखा करता है Application.mk
  • फ़ाइलों Android.mk और Application.mk अनदेखी कर रहे हैं जब आप cmake का उपयोग करें।
  • gradle-3.3 के लिए

    , और classpath 'com.android.tools.build:gradle:2.3.3', वर्तमान Android स्टूडियो रिलीज 2.3.3 के रूप में, आप स्पष्ट रूप से निर्माण में unittest लक्ष्य निर्दिष्ट करने की आवश्यकता हो सकती है।Gradle:

    android { defaultConfig { externalNativeBuild { cmake { targets "foo_unittest" }}}} 
    
  • एंड्रॉयड स्टूडियो 3.0, gradle-4.1 साथ

    , और classpath 'com.android.tools.build:gradle:3.0.0-beta6' निष्पादन app/build/intermediates/cmake/debug/obj तहत खोजने के लिए आसान है।


foo एक साझा लाइब्रेरी में foo.cpp से (int x, int y) समारोह का परीक्षण करने के (बनाने के लिए NDK instructions को अधिक से अधिक निकट है), तो आप अपने CMakeLists.txt लिपि में कुछ और लाइनों की जरूरत है:

# build libfoo.so 
add_library(foo SHARED src/main/jni/foo.cpp) 
target_link_libraries(footest foo) 

आप एल मिलेगा app/build/intermediates/cmake/debug/obj के तहत मैन्युअल रूप से अपने डिवाइस पर प्रतिलिपि बनाने के लिए ibfoo.so

परेशानी को कम करने के लिए, आपको SHARED के बजाय STATIC उपयोग कर सकते हैं, या बस foo.cppको footest निष्पादन जोड़ें:

add_executable(footest src/main/jni/foo_unittest.cc src/main/jni/foo.cpp) 
+0

धन्यवाद! आपने मेरी बहुत मदद की! निर्माण सफल होता है, लेकिन मुझे जो रास्ता मिल रहा है वह है: \ app \ .externalNativeBuild \ cmake \ debug \ x86 \ CMakeFiles \ footest.dir। और मेरे पास libfoo.so फ़ाइल नहीं है। मुझे वास्तव में खेद है लेकिन यहां से मुझे नहीं पता कि क्या करना है .. क्या मुझे आपकी मदद से अधिक मदद मिल सकती है? – ShiraOzeri

+0

पर्याप्त मेला, अगर आप ** libfoo.so ** नहीं बनाते हैं, तो यह सिर्फ जादूगर दिखाई नहीं देगा। ** foo.c int ** ** ** foo.cpp ** से फ़ंक्शन का परीक्षण करने के लिए, आपको अपने ** CMakeLists.txt ** स्क्रिप्ट में कुछ और पंक्तियों की आवश्यकता है। मैं इन्हें ऊपर दिए गए उत्तर में जोड़ता हूं। –

+0

बहुत धन्यवाद! ठीक है, .लेकिन निर्माण libfoo.so README में लिखा है कि दोनों फ़ाइलों, 'libfoo.so' और 'foo_unittest' दिखाई देनी चाहिए, और मैं 'foo_unittest' फ़ाइल जहां परीक्षण स्थित हैं नहीं मिल रहा। मैंने फ़ाइल जोड़ने की कोशिश की क्योंकि आप libfoo.so जोड़ रहे थे लेकिन मैं सफल नहीं हुआ। – ShiraOzeri

0

आप CMake या NDK-निर्माण (Android.mk), दोनों नहीं उपयोग कर सकते हैं। सीडीके के लिए एनडीके के सबसे अच्छे टुकड़े टुकड़े नहीं किए गए हैं। https://github.com/android-ndk/ndk/issues/500

+0

धन्यवाद! तो मैं Android.mk पर CMakeLists.txt पर जो लिखा है उसे जोड़ूं? – ShiraOzeri

2

बस एलेक्स के उत्कृष्ट जवाब में जोड़ने के लिए, आप भी तैनात कर सकते हैं और जोड़कर जिसके परिणामस्वरूप परीक्षण द्विआधारी adb का उपयोग कर चलाने के लिए अपनी CMakeLists.txt के लिए निम्न:

find_program(ADB adb) 
add_custom_command(TARGET footest POST_BUILD 
    COMMAND ${ADB} shell mkdir -p /data/local/tmp/${ANDROID_ABI} 
    COMMAND ${ADB} push $<TARGET_FILE:native-lib> /data/local/tmp/${ANDROID_ABI}/ 
    COMMAND ${ADB} push $<TARGET_FILE:footest> /data/local/tmp/${ANDROID_ABI}/ 
    COMMAND ${ADB} shell \"export LD_LIBRARY_PATH=/data/local/tmp/${ANDROID_ABI}\; /data/local/tmp/${ANDROID_ABI}/footest\") 

ध्यान दें कि उपरोक्त उदाहरण में footest साझा लाइब्रेरी native-lib पर निर्भर है इसलिए हम इसे धक्का देते हैं। का पथ LD_LIBRARY_PATH पर्यावरण चर सेट करके निर्दिष्ट किया गया है।

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