diff --git a/CMakeLists.txt b/CMakeLists.txt index 1044b5007a..01222f9283 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -152,13 +152,8 @@ OCV_OPTION(BUILD_TESTS "Build accuracy & regression tests" OCV_OPTION(BUILD_WITH_DEBUG_INFO "Include debug info into debug libs (not MSCV only)" ON ) OCV_OPTION(BUILD_WITH_STATIC_CRT "Enables use of staticaly linked CRT for staticaly linked OpenCV" ON IF MSVC ) OCV_OPTION(BUILD_FAT_JAVA_LIB "Create fat java wrapper containing the whole OpenCV library" ON IF ANDROID AND NOT BUILD_SHARED_LIBS AND CMAKE_COMPILER_IS_GNUCXX ) -OCV_OPTION(BUILD_ANDROID_SERVICE "TBD" OFF IF ANDROID AND ANDROID_USE_STLPORT AND ANDROID_SOURCE_TREE ) - -if(DEFINED BUILD_opencv_nonfree AND NOT BUILD_opencv_nonfree) - OCV_OPTION(BUILD_ANDROID_PACKAGE "TBD" OFF IF ANDROID ) -else() - unset(BUILD_ANDROID_PACKAGE CACHE) -endif() +OCV_OPTION(BUILD_ANDROID_SERVICE "Build OpenCV Manager for Google Play" OFF IF ANDROID AND ANDROID_USE_STLPORT AND ANDROID_SOURCE_TREE ) +OCV_OPTION(BUILD_ANDROID_PACKAGE "Build platform-specific package for Google Play" OFF IF ANDROID ) # 3rd party libs @@ -230,15 +225,15 @@ else() endif() if(ANDROID) - set(LIBRARY_OUTPUT_PATH "${CMAKE_BINARY_DIR}/lib/${ANDROID_NDK_ABI_NAME}") - set(3P_LIBRARY_OUTPUT_PATH "${CMAKE_BINARY_DIR}/3rdparty/lib/${ANDROID_NDK_ABI_NAME}") + set(LIBRARY_OUTPUT_PATH "${OpenCV_BINARY_DIR}/lib/${ANDROID_NDK_ABI_NAME}") + set(3P_LIBRARY_OUTPUT_PATH "${OpenCV_BINARY_DIR}/3rdparty/lib/${ANDROID_NDK_ABI_NAME}") set(OPENCV_LIB_INSTALL_PATH sdk/native/libs/${ANDROID_NDK_ABI_NAME}) set(OPENCV_3P_LIB_INSTALL_PATH sdk/native/3rdparty/libs/${ANDROID_NDK_ABI_NAME}) set(OPENCV_CONFIG_INSTALL_PATH sdk/native/jni) set(OPENCV_INCLUDE_INSTALL_PATH sdk/native/jni/include) else() - set(LIBRARY_OUTPUT_PATH "${CMAKE_BINARY_DIR}/lib") - set(3P_LIBRARY_OUTPUT_PATH "${CMAKE_BINARY_DIR}/3rdparty/lib${LIB_SUFFIX}") + set(LIBRARY_OUTPUT_PATH "${OpenCV_BINARY_DIR}/lib") + set(3P_LIBRARY_OUTPUT_PATH "${OpenCV_BINARY_DIR}/3rdparty/lib${LIB_SUFFIX}") set(OPENCV_LIB_INSTALL_PATH lib${LIB_SUFFIX}) set(OPENCV_3P_LIB_INSTALL_PATH share/OpenCV/3rdparty/${OPENCV_LIB_INSTALL_PATH}) set(OPENCV_INCLUDE_INSTALL_PATH include) diff --git a/android/package/AndroidManifest.xml b/android/package/AndroidManifest.xml new file mode 100644 index 0000000000..3b6bc7d047 --- /dev/null +++ b/android/package/AndroidManifest.xml @@ -0,0 +1,15 @@ + + + + + + + + + + \ No newline at end of file diff --git a/android/package/CMakeLists.txt b/android/package/CMakeLists.txt index 16b8469edd..35025b3e8f 100644 --- a/android/package/CMakeLists.txt +++ b/android/package/CMakeLists.txt @@ -1,2 +1,93 @@ -#tbd -add_subdirectory(info_lib) +if(NOT ANDROID_PACKAGE_RELEASE) + set(ANDROID_PACKAGE_RELEASE 1) +endif() + +if(NOT ANDROID_PACKAGE_PLATFORM) + if(ARMEABI_V7A) + if(NEON) + set(ANDROID_PACKAGE_PLATFORM armv7a_neon) + else() + set(ANDROID_PACKAGE_PLATFORM armv7a) + endif() + elseif(ARMEABI_V6) + set(ANDROID_PACKAGE_PLATFORM armv6) + elseif(ARMEABI) + set(ANDROID_PACKAGE_PLATFORM armv5) + elseif(X86) + set(ANDROID_PACKAGE_PLATFORM x86) + elseif(MIPS) + set(ANDROID_PACKAGE_PLATFORM mips) + else() + message(ERROR "Can not automatically determine the value for ANDROID_PACKAGE_PLATFORM") + endif() +endif() + +if(NOT ANDROID_PACKAGE_PLATFORM_NAME) + if(ARMEABI_V7A) + if(NEON) + set(ANDROID_PACKAGE_PLATFORM_NAME "armeabi-v7a with NEON") + else() + set(ANDROID_PACKAGE_PLATFORM_NAME "armeabi-v7a") + endif() + elseif(ARMEABI_V6) + set(ANDROID_PACKAGE_PLATFORM_NAME "armeabi-v6") + elseif(ARMEABI) + set(ANDROID_PACKAGE_PLATFORM_NAME "armeabi") + elseif(X86) + set(ANDROID_PACKAGE_PLATFORM_NAME "x86") + elseif(MIPS) + set(ANDROID_PACKAGE_PLATFORM_NAME "mips") + else() + message(ERROR "Can not automatically determine the value for ANDROID_PACKAGE_PLATFORM_NAME") + endif() +endif() + +if("${ANDROID_NATIVE_API_LEVEL}" MATCHES "[1-9][0-9]*$") + set(ANDROID_SDK_VERSION ${CMAKE_MATCH_0}) +endif() + +if(NOT ANDROID_SDK_VERSION GREATER 7) + set(ANDROID_SDK_VERSION 8) +endif() + +set(PACKAGE_DIR "${OpenCV_BINARY_DIR}/package") + +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/${ANDROID_MANIFEST_FILE}" "${PACKAGE_DIR}/${ANDROID_MANIFEST_FILE}" @ONLY) +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/res/values/strings.xml" "${PACKAGE_DIR}/res/values/strings.xml" @ONLY) +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/res/drawable/icon.png" "${PACKAGE_DIR}/res/drawable/icon.png" COPYONLY) + +set(target_name "OpenCV_${OPENCV_VERSION_MAJOR}.${OPENCV_VERSION_MINOR}.${OPENCV_VERSION_PATCH}_binary_pack_${ANDROID_PACKAGE_PLATFORM}") +get_target_property(opencv_java_location opencv_java LOCATION) + +set(android_proj_target_files ${ANDROID_PROJECT_FILES}) +ocv_list_add_prefix(android_proj_target_files "${PACKAGE_DIR}/") +android_get_compatible_target(android_proj_sdk_target ${ANDROID_SDK_VERSION}) +set(APK_NAME "${PACKAGE_DIR}/bin/${target_name}-release-unsigned.apk") + +file(GLOB camera_wrappers "${OpenCV_SOURCE_DIR}/3rdparty/lib/${ANDROID_NDK_ABI_NAME}/libnative_camera_r*.so") +set(CAMERA_LIB_COMMANDS "") + +foreach(wrapper ${camera_wrappers}) + list(APPEND CAMERA_LIB_COMMANDS COMMAND ${CMAKE_COMMAND} -E copy "${wrapper}" "${PACKAGE_DIR}/libs/${ANDROID_NDK_ABI_NAME}/") +endforeach() + +add_custom_command( + OUTPUT "${APK_NAME}" + COMMAND ${CMAKE_COMMAND} -E remove_directory "${PACKAGE_DIR}/libs" + COMMAND ${CMAKE_COMMAND} -E remove_directory "${PACKAGE_DIR}/bin" + COMMAND ${CMAKE_COMMAND} -E remove_directory "${PACKAGE_DIR}/gen" + COMMAND ${CMAKE_COMMAND} -E remove ${android_proj_target_files} + COMMAND ${CMAKE_COMMAND} -E make_directory "${PACKAGE_DIR}/src" + COMMAND ${CMAKE_COMMAND} -E make_directory "${PACKAGE_DIR}/libs/${ANDROID_NDK_ABI_NAME}/" + ${CAMERA_LIB_COMMANDS} + COMMAND ${CMAKE_COMMAND} -E copy "${opencv_java_location}" "${PACKAGE_DIR}/libs/${ANDROID_NDK_ABI_NAME}/" + COMMAND ${ANDROID_EXECUTABLE} --silent update project --path "${PACKAGE_DIR}" --target "${android_proj_sdk_target}" --name "${target_name}" + COMMAND ${ANT_EXECUTABLE} -q -noinput -k release + COMMAND ${CMAKE_COMMAND} -E touch "${APK_NAME}" + WORKING_DIRECTORY "${PACKAGE_DIR}" + MAIN_DEPENDENCY "${opencv_java_location}" + DEPENDS "${PACKAGE_DIR}/${ANDROID_MANIFEST_FILE}" "${PACKAGE_DIR}/res/values/strings.xml" "${PACKAGE_DIR}/res/drawable/icon.png" ${camera_wrappers} + ) + +add_custom_target(android_package ALL SOURCES "${APK_NAME}" ) +add_dependencies(android_package opencv_java) \ No newline at end of file diff --git a/android/package/info_lib/CMakeLists.txt b/android/package/info_lib/CMakeLists.txt deleted file mode 100644 index 7e9e9fe112..0000000000 --- a/android/package/info_lib/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -#tbd diff --git a/android/package/info_lib/jni/Android.mk b/android/package/info_lib/jni/Android.mk deleted file mode 100644 index 89cc462793..0000000000 --- a/android/package/info_lib/jni/Android.mk +++ /dev/null @@ -1,17 +0,0 @@ -LOCAL_PATH := $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -LOCAL_SRC_FILES := \ - src/info.c - -LOCAL_C_INCLUDES := \ - $(LOCAL_PATH)/include \ - $(TOP)/frameworks/base/core/jni - -LOCAL_PRELINK_MODULE := false - -LOCAL_MODULE := libopencvinfo - -include $(BUILD_SHARED_LIBRARY) diff --git a/android/package/info_lib/jni/Application.mk b/android/package/info_lib/jni/Application.mk deleted file mode 100644 index c1d3a3fe66..0000000000 --- a/android/package/info_lib/jni/Application.mk +++ /dev/null @@ -1,2 +0,0 @@ -APP_ABI := armeabi-v7a x86 -APP_PLATFORM := android-8 \ No newline at end of file diff --git a/android/package/info_lib/jni/include/info.h b/android/package/info_lib/jni/include/info.h deleted file mode 100644 index b9ba35fbaf..0000000000 --- a/android/package/info_lib/jni/include/info.h +++ /dev/null @@ -1,3 +0,0 @@ -// Function return list of shared libs seporated with ";" symbol -// in load order -const char* GetLibraryList(); \ No newline at end of file diff --git a/android/package/info_lib/jni/include/info_jni.h b/android/package/info_lib/jni/include/info_jni.h deleted file mode 100644 index 28df21758a..0000000000 --- a/android/package/info_lib/jni/include/info_jni.h +++ /dev/null @@ -1,31 +0,0 @@ -/* DO NOT EDIT THIS FILE - it is machine generated */ -#include -/* Header for class org_opencv_android_OpenCVLoader */ - -#ifndef _Included_org_opencv_android_OpenCVLoader -#define _Included_org_opencv_android_OpenCVLoader -#ifdef __cplusplus -extern "C" { -#endif -#undef org_opencv_android_OpenCVLoader_Success -#define org_opencv_android_OpenCVLoader_Success 0L -#undef org_opencv_android_OpenCVLoader_NoService -#define org_opencv_android_OpenCVLoader_NoService 1L -#undef org_opencv_android_OpenCVLoader_RestartRequired -#define org_opencv_android_OpenCVLoader_RestartRequired 2L -#undef org_opencv_android_OpenCVLoader_MarketError -#define org_opencv_android_OpenCVLoader_MarketError 3L -#undef org_opencv_android_OpenCVLoader_InitFailed -#define org_opencv_android_OpenCVLoader_InitFailed 255L -/* - * Class: org_opencv_android_OpenCVLoader - * Method: GetLibraryList - * Signature: ()Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL Java_org_opencv_android_StaticHelper_getLibraryList - (JNIEnv *, jclass); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/android/package/info_lib/jni/src/info.c b/android/package/info_lib/jni/src/info.c deleted file mode 100644 index 6d445de8f1..0000000000 --- a/android/package/info_lib/jni/src/info.c +++ /dev/null @@ -1,18 +0,0 @@ -#include "info.h" -#include - -#ifndef LIB_STRING - #define LIB_STRING "libtbb.so;libopencv_java.so" -#endif - -const char* GetLibraryList() -{ - return LIB_STRING; -} - -JNIEXPORT jstring JNICALL Java_org_opencv_android_StaticHelper_getLibraryList(JNIEnv* jenv, jclass clazz) -{ - jstring result = (*jenv)->NewStringUTF(jenv, LIB_STRING); - - return result; -} \ No newline at end of file diff --git a/android/package/res/drawable/icon.png b/android/package/res/drawable/icon.png new file mode 100644 index 0000000000..4e828bafd8 Binary files /dev/null and b/android/package/res/drawable/icon.png differ diff --git a/android/package/res/values/strings.xml b/android/package/res/values/strings.xml new file mode 100644 index 0000000000..c8f59be469 --- /dev/null +++ b/android/package/res/values/strings.xml @@ -0,0 +1,6 @@ + + + + OCV @OPENCV_VERSION_MAJOR@.@OPENCV_VERSION_MINOR@ binary pack for @ANDROID_PACKAGE_PLATFORM_NAME@ + + \ No newline at end of file diff --git a/android/service/engine/jni/NativeService/PackageInfo.h b/android/service/engine/jni/NativeService/PackageInfo.h index ac82d37eb2..d9d93b5213 100644 --- a/android/service/engine/jni/NativeService/PackageInfo.h +++ b/android/service/engine/jni/NativeService/PackageInfo.h @@ -8,7 +8,7 @@ #define ARCH_X64_NAME "x64" #define ARCH_ARMv5_NAME "armv5" #define ARCH_ARMv6_NAME "armv6" -#define ARCH_ARMv7_NAME "armv7" +#define ARCH_ARMv7_NAME "armv7a" #define ARCH_ARMv8_NAME "armv8" #define FEATURES_HAS_VFPv3d16_NAME "vfpv3d16" @@ -26,7 +26,7 @@ class PackageInfo -{ +{ public: PackageInfo(const std::string& version, int platform, int cpu_id); PackageInfo(const std::string& fullname, const std::string& install_path, const std::string& package_version = "0.0"); @@ -38,7 +38,7 @@ public: bool operator==(const PackageInfo& package) const; static const std::map PlatformNameMap; bool IsValid() const; - + protected: static std::map InitPlatformNameMap(); std::string Version; diff --git a/modules/nonfree/CMakeLists.txt b/modules/nonfree/CMakeLists.txt index 873532c3fb..8c7bd0efde 100644 --- a/modules/nonfree/CMakeLists.txt +++ b/modules/nonfree/CMakeLists.txt @@ -1,2 +1,6 @@ +if(BUILD_ANDROID_PACKAGE) + ocv_module_disable(nonfree) +endif() + set(the_description "Functionality with possible limitations on the use") ocv_define_module(nonfree opencv_imgproc opencv_features2d)