android: change ANDROID_STL='c++_shared'

- fixes crashes in face-detector application
- libc++_shared.so is bundled automatically via CMake helper project
pull/15024/head
Alexander Alekhin 5 years ago
parent f663e8f903
commit 95415ac3a5
  1. 10
      modules/java/android_sdk/CMakeLists.txt
  2. 13
      modules/java/android_sdk/android_gradle_lib/build.gradle
  3. 13
      modules/java/android_sdk/build.gradle.in
  4. 4
      modules/java/android_sdk/libcxx_helper/CMakeLists.txt
  5. 1
      modules/java/android_sdk/libcxx_helper/dummy.cpp
  6. 8
      platforms/android/build-tests/test_cmake_build.py
  7. 2
      platforms/android/build_sdk.py

@ -123,6 +123,16 @@ foreach(file ${seed_project_files_rel})
endif() endif()
endforeach() endforeach()
# copy libcxx_helper
set(__base_dir "${CMAKE_CURRENT_SOURCE_DIR}/")
file(GLOB_RECURSE __files_rel RELATIVE "${__base_dir}/" "${__base_dir}/libcxx_helper/*")
foreach(file ${__files_rel})
configure_file("${__base_dir}/${file}" "${OPENCV_JAVA_DIR}/${file}" @ONLY)
list(APPEND depends "${__base_dir}/${file}")
get_filename_component(install_subdir "${file}" PATH)
install(FILES "${OPENCV_JAVA_DIR}/${file}" DESTINATION "${JAVA_INSTALL_ROOT}/../${install_subdir}" COMPONENT java)
endforeach()
list(APPEND depends gen_opencv_java_source "${OPENCV_DEPHELPER}/gen_opencv_java_source") list(APPEND depends gen_opencv_java_source "${OPENCV_DEPHELPER}/gen_opencv_java_source")
ocv_copyfiles_add_target(${the_module}_android_source_copy JAVA_SRC_COPY "Copy Java(Andoid SDK) source files" ${depends}) ocv_copyfiles_add_target(${the_module}_android_source_copy JAVA_SRC_COPY "Copy Java(Andoid SDK) source files" ${depends})
file(REMOVE "${OPENCV_DEPHELPER}/${the_module}_android_source_copy") # force rebuild after CMake run file(REMOVE "${OPENCV_DEPHELPER}/${the_module}_android_source_copy") # force rebuild after CMake run

@ -7,6 +7,13 @@ android {
defaultConfig { defaultConfig {
minSdkVersion @ANDROID_MIN_SDK_VERSION@ minSdkVersion @ANDROID_MIN_SDK_VERSION@
targetSdkVersion @ANDROID_TARGET_SDK_VERSION@ targetSdkVersion @ANDROID_TARGET_SDK_VERSION@
externalNativeBuild {
cmake {
arguments "-DANDROID_STL=@ANDROID_STL@"
targets "opencv_jni_shared"
}
}
} }
buildTypes { buildTypes {
@ -37,6 +44,12 @@ android {
manifest.srcFile 'AndroidManifest.xml' manifest.srcFile 'AndroidManifest.xml'
} }
} }
externalNativeBuild {
cmake {
path (project.projectDir.toString() + '/libcxx_helper/CMakeLists.txt')
}
}
} }
dependencies { dependencies {

@ -99,6 +99,13 @@ android {
defaultConfig { defaultConfig {
minSdkVersion @ANDROID_MIN_SDK_VERSION@ minSdkVersion @ANDROID_MIN_SDK_VERSION@
targetSdkVersion @ANDROID_TARGET_SDK_VERSION@ targetSdkVersion @ANDROID_TARGET_SDK_VERSION@
externalNativeBuild {
cmake {
arguments "-DANDROID_STL=@ANDROID_STL@"
targets "opencv_jni_shared"
}
}
} }
buildTypes { buildTypes {
@ -129,6 +136,12 @@ android {
manifest.srcFile 'java/AndroidManifest.xml' manifest.srcFile 'java/AndroidManifest.xml'
} }
} }
externalNativeBuild {
cmake {
path (project.projectDir.toString() + '/libcxx_helper/CMakeLists.txt')
}
}
} }
dependencies { dependencies {

@ -0,0 +1,4 @@
cmake_minimum_required(VERSION 3.6)
# dummy target to bring libc++_shared.so into packages
add_library(opencv_jni_shared STATIC dummy.cpp)

@ -112,10 +112,10 @@ class TestCmakeBuild(unittest.TestCase):
def suite(workdir, opencv_cmake_path): def suite(workdir, opencv_cmake_path):
abis = { abis = {
"armeabi-v7a": { "ANDROID_ABI": "armeabi-v7a", "ANDROID_TOOLCHAIN": "clang", "ANDROID_STL": "c++_static", 'ANDROID_NATIVE_API_LEVEL': "21" }, "armeabi-v7a": { "ANDROID_ABI": "armeabi-v7a", "ANDROID_TOOLCHAIN": "clang", "ANDROID_STL": "c++_shared", 'ANDROID_NATIVE_API_LEVEL': "21" },
"arm64-v8a": { "ANDROID_ABI": "arm64-v8a", "ANDROID_TOOLCHAIN": "clang", "ANDROID_STL": "c++_static", 'ANDROID_NATIVE_API_LEVEL': "21" }, "arm64-v8a": { "ANDROID_ABI": "arm64-v8a", "ANDROID_TOOLCHAIN": "clang", "ANDROID_STL": "c++_shared", 'ANDROID_NATIVE_API_LEVEL': "21" },
"x86": { "ANDROID_ABI": "x86", "ANDROID_TOOLCHAIN": "clang", "ANDROID_STL": "c++_static", 'ANDROID_NATIVE_API_LEVEL': "21" }, "x86": { "ANDROID_ABI": "x86", "ANDROID_TOOLCHAIN": "clang", "ANDROID_STL": "c++_shared", 'ANDROID_NATIVE_API_LEVEL': "21" },
"x86_64": { "ANDROID_ABI": "x86_64", "ANDROID_TOOLCHAIN": "clang", "ANDROID_STL": "c++_static", 'ANDROID_NATIVE_API_LEVEL': "21" }, "x86_64": { "ANDROID_ABI": "x86_64", "ANDROID_TOOLCHAIN": "clang", "ANDROID_STL": "c++_shared", 'ANDROID_NATIVE_API_LEVEL': "21" },
} }
suite = unittest.TestSuite() suite = unittest.TestSuite()

@ -125,7 +125,7 @@ class ABI:
self.cmake_vars['ANDROID_TOOLCHAIN_NAME'] = toolchain self.cmake_vars['ANDROID_TOOLCHAIN_NAME'] = toolchain
else: else:
self.cmake_vars['ANDROID_TOOLCHAIN'] = 'clang' self.cmake_vars['ANDROID_TOOLCHAIN'] = 'clang'
self.cmake_vars['ANDROID_STL'] = 'c++_static' self.cmake_vars['ANDROID_STL'] = 'c++_shared'
if ndk_api_level: if ndk_api_level:
self.cmake_vars['ANDROID_NATIVE_API_LEVEL'] = ndk_api_level self.cmake_vars['ANDROID_NATIVE_API_LEVEL'] = ndk_api_level
self.cmake_vars.update(cmake_vars) self.cmake_vars.update(cmake_vars)

Loading…
Cancel
Save