diff --git a/CMakeLists.txt b/CMakeLists.txt index f0289611b379807f15d5988393a61c924b714600..8b6de8c5669323c4dfb1d2ab896d1338e2ba4280 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -697,11 +697,12 @@ if (BUILD_JAVA_SUPPORT AND (BUILD_EXAMPLES OR BUILD_TESTS)) OUTPUT_VARIABLE ANT_VERSION_FULL OUTPUT_STRIP_TRAILING_WHITESPACE) string(REGEX MATCH "[0-9]+.[0-9]+.[0-9]+" ANT_VERSION "${ANT_VERSION_FULL}") - + message(STATUS " Found apache ant ${ANT_VERSION}: ${ANT_EXECUTABLE}") endif() - if (ANDROID_EXECUTABLE AND ANT_EXECUTABLE AND ANT_VERSION VERSION_GREATER 1.8) + + if (ANDROID_EXECUTABLE AND ANT_EXECUTABLE AND (ANT_VERSION VERSION_GREATER 1.7.-1)) SET(CAN_BUILD_ANDROID_PROJECTS TRUE) else() SET(CAN_BUILD_ANDROID_PROJECTS FALSE) diff --git a/android/scripts/cmake_android.sh b/android/scripts/cmake_android.sh index e95d35f9b3dd49242557ad859f472007d7a1e1f2..c17110e69b3f7a4eb5c789468c65794407ec489a 100644 --- a/android/scripts/cmake_android.sh +++ b/android/scripts/cmake_android.sh @@ -4,5 +4,5 @@ cd `dirname $0`/.. mkdir -p build cd build -cmake -C ../CMakeCache.android.initial.cmake -DCMAKE_TOOLCHAIN_FILE=../android.toolchain.cmake ../.. +cmake -C ../CMakeCache.android.initial.cmake -DCMAKE_TOOLCHAIN_FILE=../android.toolchain.cmake $@ ../.. diff --git a/modules/java/CMakeLists.txt b/modules/java/CMakeLists.txt index 662c11de09e78cc24e11f714d4457dc6d9e0aa7b..43783f274a290a84cc9c08e804751915f069e7f9 100644 --- a/modules/java/CMakeLists.txt +++ b/modules/java/CMakeLists.txt @@ -12,6 +12,8 @@ ENDIF() SET(GEN_JAVA "${CMAKE_CURRENT_SOURCE_DIR}/gen_java.py") SET(HDR_PARSER "${CMAKE_CURRENT_SOURCE_DIR}/../python/src2/hdr_parser.py") +SET(additional_clean_files "") + foreach(module ${OPENCV_JAVA_MODULES}) IF(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/config/${module}.filelist") FILE(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/config/${module}.filelist" headers_to_parse) @@ -100,6 +102,7 @@ IF(ANDROID) COMMENT "Generating ${lib_file_name}" ) install(FILES "${CMAKE_BINARY_DIR}/${lib_file_name}" DESTINATION . COMPONENT main) + LIST(APPEND additional_clean_files "${CMAKE_BINARY_DIR}/${lib_file_name}") endif() endforeach() @@ -111,6 +114,7 @@ IF(ANDROID) DEPENDS "${jni_file}" COMMENT "Generating jni/${jni_file_name}" ) + LIST(APPEND additional_clean_files "${CMAKE_BINARY_DIR}/jni/${jni_file_name}") endforeach() ENDIF() @@ -126,8 +130,11 @@ foreach(java_file ${java_project_files} ${generated_java_sources}) DEPENDS "${JAVA_OUTPUT_DIR}" COMMENT "Generating src/org/opencv/${java_file_name}" ) + LIST(APPEND additional_clean_files "${JAVA_OUTPUT_DIR}/${java_file_name}") if(ANDROID) install(FILES "${JAVA_OUTPUT_DIR}/${java_file_name}" DESTINATION src/org/opencv COMPONENT main) endif() endforeach() +set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${additional_clean_files}") + diff --git a/samples/CMakeLists.txt b/samples/CMakeLists.txt index 1a601589a9d688851d32380dee98be05ab078ac9..7a7fe682d167d2a82e1da956d125121be5b60481 100644 --- a/samples/CMakeLists.txt +++ b/samples/CMakeLists.txt @@ -5,7 +5,14 @@ add_subdirectory(c) add_subdirectory(cpp) -add_subdirectory(gpu) + +if(NOT ANDROID) + add_subdirectory(gpu) +endif() + +if(ANDROID AND CAN_BUILD_ANDROID_PROJECTS) + add_subdirectory(android) +endif() if(0) add_subdirectory(swig_python) diff --git a/samples/android/0-base/default.properties b/samples/android/0-base/default.properties index 787ee33afaa6a92a53ead176a3787cafc6fbc956..32299c258a5fcd4eeb33f79cd7fe47c6cd587444 100644 --- a/samples/android/0-base/default.properties +++ b/samples/android/0-base/default.properties @@ -1,11 +1,2 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system use, -# "build.properties", and override values to adapt the script to your -# project structure. - # Project target. -target=android-8 \ No newline at end of file +target=android-8 diff --git a/samples/android/1-java/default.properties b/samples/android/1-java/default.properties index b4a7e0f66a007099b7ccdc9d7f2aaa436f03ed7e..fb3ea1f7b34c41e85d4a6bf81241ba67c9890502 100644 --- a/samples/android/1-java/default.properties +++ b/samples/android/1-java/default.properties @@ -1,12 +1,3 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system use, -# "build.properties", and override values to adapt the script to your -# project structure. - +android.library.reference.1=../../../android/build # Project target. target=android-8 -android.library.reference.1=../../../android/build diff --git a/samples/android/2-native/default.properties b/samples/android/2-native/default.properties index e2e8061f26caab979212f723d170965ca6a3656e..32299c258a5fcd4eeb33f79cd7fe47c6cd587444 100644 --- a/samples/android/2-native/default.properties +++ b/samples/android/2-native/default.properties @@ -1,11 +1,2 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system use, -# "build.properties", and override values to adapt the script to your -# project structure. - # Project target. target=android-8 diff --git a/samples/android/4-mixed/default.properties b/samples/android/4-mixed/default.properties index b4a7e0f66a007099b7ccdc9d7f2aaa436f03ed7e..fb3ea1f7b34c41e85d4a6bf81241ba67c9890502 100644 --- a/samples/android/4-mixed/default.properties +++ b/samples/android/4-mixed/default.properties @@ -1,12 +1,3 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system use, -# "build.properties", and override values to adapt the script to your -# project structure. - +android.library.reference.1=../../../android/build # Project target. target=android-8 -android.library.reference.1=../../../android/build diff --git a/samples/android/CMakeLists.txt b/samples/android/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..1bda5fbd649b92269229537f0f360946322b44d4 --- /dev/null +++ b/samples/android/CMakeLists.txt @@ -0,0 +1,97 @@ +# ---------------------------------------------------------------------------- +# CMake file for Android samples. See root CMakeLists.txt +# +# ---------------------------------------------------------------------------- + +if (BUILD_EXAMPLES) + project(android_samples) + + include_directories( + "${CMAKE_SOURCE_DIR}/modules/core/include" + "${CMAKE_SOURCE_DIR}/modules/flann/include" + "${CMAKE_SOURCE_DIR}/modules/imgproc/include" + "${CMAKE_SOURCE_DIR}/modules/video/include" + "${CMAKE_SOURCE_DIR}/modules/highgui/include" + "${CMAKE_SOURCE_DIR}/modules/ml/include" + "${CMAKE_SOURCE_DIR}/modules/calib3d/include" + "${CMAKE_SOURCE_DIR}/modules/features2d/include" + "${CMAKE_SOURCE_DIR}/modules/objdetect/include" + "${CMAKE_SOURCE_DIR}/modules/legacy/include" + "${CMAKE_SOURCE_DIR}/modules/contrib/include" + ) + + SET (sample_dependencies opencv_contrib opencv_legacy opencv_objdetect opencv_calib3d opencv_features2d opencv_video opencv_highgui opencv_ml opencv_imgproc opencv_flann opencv_core) + if(NOT BUILD_SHARED_LIBS) + LIST(APPEND sample_dependencies opencv_androidcamera) + endif() + + SET(additional_clean_files "") + + macro(ADD_ANDROID_SAMPLE sample_name) + #message(STATUS "Build android sample: '${sample_name}'") + SET(sample_dir "${CMAKE_CURRENT_SOURCE_DIR}/${sample}") + + add_custom_target(${sample} ALL) + add_dependencies(${sample} opencv_java opencv_java_api) + + set_target_properties(${sample} PROPERTIES + PROJECT_LABEL "(ANDROID EXAMPLE) ${sample}") + + file(RELATIVE_PATH OPENCV_REFERENCE_PATH "${sample_dir}" "${CMAKE_BINARY_DIR}") + + if(NOT ("${sample}" STREQUAL "0-base" OR "${sample}" STREQUAL "2-native")) + SET(opencv_reference --library \"${OPENCV_REFERENCE_PATH}\") + else() + SET(opencv_reference) + endif() + + add_custom_command( + TARGET ${sample} + WORKING_DIRECTORY ${sample_dir} + COMMAND ${CMAKE_COMMAND} -E remove -f "${sample_dir}/default.properties" + COMMAND ${CMAKE_COMMAND} -E touch "${sample_dir}/default.properties" + COMMAND ${ANDROID_EXECUTABLE} update project --name "${sample}" --target 7 ${opencv_reference} --path . + COMMAND ${ANT_EXECUTABLE} debug + COMMAND ${CMAKE_COMMAND} -E copy "${sample_dir}/bin/${sample}-debug.apk" "${CMAKE_BINARY_DIR}/bin/${sample}-debug.apk" + ) + + LIST(APPEND additional_clean_files "${CMAKE_BINARY_DIR}/bin/${sample}-debug.apk" "${sample_dir}/build.xml" "${sample_dir}/local.properties" "${sample_dir}/proguard.cfg") + + if(IS_DIRECTORY "${sample_dir}/jni") + INCLUDE_DIRECTORIES("${sample_dir}/jni") + FILE( GLOB srcs "${sample_dir}/jni/*.cpp" ) + + FILE(STRINGS "${sample_dir}/jni/Android.mk" JNI_LIB_NAME REGEX "LOCAL_MODULE[ ]*:=[ ]*.*" ) + string(REGEX REPLACE "LOCAL_MODULE[ ]*:=[ ]*([a-zA-Z_][a-zA-Z_0-9]*)[ ]*" "\\1" JNI_LIB_NAME "${JNI_LIB_NAME}") + + ADD_LIBRARY( ${JNI_LIB_NAME} MODULE ${srcs} ) + + ADD_DEPENDENCIES(${JNI_LIB_NAME} ${sample_dependencies}) + TARGET_LINK_LIBRARIES(${JNI_LIB_NAME} ${OPENCV_LINKER_LIBS} ${sample_dependencies}) + + set_target_properties(${JNI_LIB_NAME} PROPERTIES + OUTPUT_NAME "${JNI_LIB_NAME}" + LIBRARY_OUTPUT_DIRECTORY "${sample_dir}/libs/${ARMEABI_NDK_NAME}" + ) + + ADD_CUSTOM_COMMAND( + TARGET ${JNI_LIB_NAME} + POST_BUILD + COMMAND ${CMAKE_STRIP} "${sample_dir}/libs/${ARMEABI_NDK_NAME}/*.so" + ) + + add_dependencies(${sample} ${JNI_LIB_NAME}) + endif() + endmacro() + + file(GLOB android_samples RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *) + list(SORT android_samples) + + foreach(sample ${android_samples}) + if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${sample}/AndroidManifest.xml) + ADD_ANDROID_SAMPLE(${sample}) + endif() + endforeach() + + set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${additional_clean_files}") +endif()