From 133b91a0269c0483412364be56d3c996a06fae7d Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Wed, 26 Apr 2017 13:58:35 +0300 Subject: [PATCH] android: build fixes - eliminate CMake 3.5+ warnings - removed usage of dropped "OPENCV_CAMERA_MODULES" variable - partial support for Android NDK 11+ --- cmake/templates/OpenCV.mk.in | 2 ++ modules/java/android_lib/jni/Android.mk | 1 - platforms/android/android.toolchain.cmake | 10 ++++++--- .../android/build-tests/test_ndk_build.py | 21 +++++++++++-------- samples/android/face-detection/jni/Android.mk | 1 - 5 files changed, 21 insertions(+), 14 deletions(-) diff --git a/cmake/templates/OpenCV.mk.in b/cmake/templates/OpenCV.mk.in index e99b1ad8bd..addde3a268 100644 --- a/cmake/templates/OpenCV.mk.in +++ b/cmake/templates/OpenCV.mk.in @@ -94,6 +94,8 @@ LOCAL_CFLAGS += $(OPENCV_LOCAL_CFLAGS) ifeq ($(OPENCV_INSTALL_MODULES),on) LOCAL_$(OPENCV_LIB_TYPE)_LIBRARIES += $(foreach mod, $(OPENCV_LIBS), opencv_$(mod)) else + $(call __ndk_info,OpenCV: You should ignore warning about 'non-system libraries in linker flags' and 'opencv_java' library.) + $(call __ndk_info, 'OPENCV_INSTALL_MODULES:=on' can be used to build APK with included OpenCV binaries) LOCAL_LDLIBS += -L$(call host-path,$(LOCAL_PATH)/$(OPENCV_LIBS_DIR)) $(foreach lib, $(OPENCV_LIBS), -lopencv_$(lib)) endif diff --git a/modules/java/android_lib/jni/Android.mk b/modules/java/android_lib/jni/Android.mk index 72418c893f..129f567a6d 100644 --- a/modules/java/android_lib/jni/Android.mk +++ b/modules/java/android_lib/jni/Android.mk @@ -2,7 +2,6 @@ LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) -OPENCV_CAMERA_MODULES := off include OpenCV.mk LOCAL_MODULE := opencv_java diff --git a/platforms/android/android.toolchain.cmake b/platforms/android/android.toolchain.cmake index 1d69b7504a..6d64f92148 100644 --- a/platforms/android/android.toolchain.cmake +++ b/platforms/android/android.toolchain.cmake @@ -1150,8 +1150,10 @@ if( APPLE ) endif() # Force set compilers because standard identification works badly for us -include( CMakeForceCompiler ) -CMAKE_FORCE_C_COMPILER( "${CMAKE_C_COMPILER}" GNU ) +if( CMAKE_VERSION VERSION_LESS 3.5.0 ) + include( CMakeForceCompiler ) + CMAKE_FORCE_C_COMPILER( "${CMAKE_C_COMPILER}" GNU ) +endif() if( ANDROID_COMPILER_IS_CLANG ) set( CMAKE_C_COMPILER_ID Clang ) endif() @@ -1163,7 +1165,9 @@ else() endif() set( CMAKE_C_HAS_ISYSROOT 1 ) set( CMAKE_C_COMPILER_ABI ELF ) -CMAKE_FORCE_CXX_COMPILER( "${CMAKE_CXX_COMPILER}" GNU ) +if( CMAKE_VERSION VERSION_LESS 3.5.0 ) + CMAKE_FORCE_CXX_COMPILER( "${CMAKE_CXX_COMPILER}" GNU ) +endif() if( ANDROID_COMPILER_IS_CLANG ) set( CMAKE_CXX_COMPILER_ID Clang) endif() diff --git a/platforms/android/build-tests/test_ndk_build.py b/platforms/android/build-tests/test_ndk_build.py index 60b76e7df7..cbc2b7c6ab 100644 --- a/platforms/android/build-tests/test_ndk_build.py +++ b/platforms/android/build-tests/test_ndk_build.py @@ -73,12 +73,12 @@ class TestNDKBuild(unittest.TestCase): p = [] if self.libtype == "static": p.append("OPENCV_LIB_TYPE := STATIC") - elif self.libtype == "shared_debug": - p.append("OPENCV_LIB_TYPE := SHARED") - p.append("OPENCV_CAMERA_MODULES:=on") - p.append("OPENCV_INSTALL_MODULES:=on") elif self.libtype == "shared": p.append("OPENCV_LIB_TYPE := SHARED") + p.append("OPENCV_INSTALL_MODULES:=on") + elif self.libtype == "shared_opencv_manager": + p.append("OPENCV_LIB_TYPE := SHARED") + p.append("OPENCV_INSTALL_MODULES:=off") p.append("include %s" % os.path.join(self.opencv_mk_path, "OpenCV.mk")) return TEMPLATE_ANDROID_MK.format(cut = "\n".join(p), cpp1 = self.cpp1, cpp2 = self.cpp2) @@ -115,14 +115,17 @@ class TestNDKBuild(unittest.TestCase): def suite(workdir, opencv_mk_path): abis = ["armeabi", "armeabi-v7a", "x86", "mips"] ndk_path = os.environ["ANDROID_NDK"] - with open(os.path.join(ndk_path, "RELEASE.TXT"), "r") as f: - s = f.read() - if re.search(r'r10[b-e]', s): - abis.extend(["arm64-v8a", "x86", "x86_64"]) + if os.path.exists(os.path.join(ndk_path, "RELEASE.TXT")): + with open(os.path.join(ndk_path, "RELEASE.TXT"), "r") as f: + s = f.read() + if re.search(r'r10[b-e]', s): + abis.extend(["arm64-v8a", "x86_64"]) + if os.path.exists(os.path.join(ndk_path, "source.properties")): # Android NDK 11+ + abis.extend(["arm64-v8a", "x86_64"]) abis.append("all") suite = unittest.TestSuite() - for libtype in ["static", "shared", "shared_debug"]: + for libtype in ["static", "shared", "shared_opencv_manager"]: for abi in abis: suite.addTest(TestNDKBuild(abi, libtype, opencv_mk_path, workdir)) return suite diff --git a/samples/android/face-detection/jni/Android.mk b/samples/android/face-detection/jni/Android.mk index 0686b22d86..e882cac0c1 100644 --- a/samples/android/face-detection/jni/Android.mk +++ b/samples/android/face-detection/jni/Android.mk @@ -2,7 +2,6 @@ LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) -#OPENCV_CAMERA_MODULES:=off #OPENCV_INSTALL_MODULES:=off #OPENCV_LIB_TYPE:=SHARED ifdef OPENCV_ANDROID_SDK