opencv

Форк
0
/
android_gradle_projects.cmake 
231 строка · 9.7 Кб
1
# https://developer.android.com/studio/releases/gradle-plugin
2
set(ANDROID_GRADLE_PLUGIN_VERSION "7.3.1" CACHE STRING "Android Gradle Plugin version")
3
message(STATUS "Android Gradle Plugin version: ${ANDROID_GRADLE_PLUGIN_VERSION}")
4

5
set(KOTLIN_PLUGIN_VERSION "1.8.20" CACHE STRING "Kotlin Plugin version")
6
message(STATUS "Kotlin Plugin version: ${KOTLIN_PLUGIN_VERSION}")
7

8
if(BUILD_KOTLIN_EXTENSIONS)
9
  set(KOTLIN_PLUGIN_DECLARATION "apply plugin: 'kotlin-android'" CACHE STRING "Kotlin Plugin version")
10
  set(KOTLIN_STD_LIB "implementation 'org.jetbrains.kotlin:kotlin-stdlib:${KOTLIN_PLUGIN_VERSION}'" CACHE STRING "Kotlin Standard Library dependency")
11
else()
12
  set(KOTLIN_PLUGIN_DECLARATION "" CACHE STRING "Kotlin Plugin version")
13
  set(KOTLIN_STD_LIB "" CACHE STRING "Kotlin Standard Library dependency")
14
endif()
15

16
set(GRADLE_VERSION "7.6.3" CACHE STRING "Gradle version")
17
message(STATUS "Gradle version: ${GRADLE_VERSION}")
18

19
set(ANDROID_COMPILE_SDK_VERSION "31" CACHE STRING "Android compileSdkVersion")
20
if(ANDROID_NATIVE_API_LEVEL GREATER 21)
21
  set(ANDROID_MIN_SDK_VERSION "${ANDROID_NATIVE_API_LEVEL}" CACHE STRING "Android minSdkVersion")
22
else()
23
  set(ANDROID_MIN_SDK_VERSION "21" CACHE STRING "Android minSdkVersion")
24
endif()
25
set(ANDROID_TARGET_SDK_VERSION "31" CACHE STRING "Android minSdkVersion")
26

27
set(ANDROID_BUILD_BASE_DIR "${OpenCV_BINARY_DIR}/opencv_android" CACHE INTERNAL "")
28
set(ANDROID_TMP_INSTALL_BASE_DIR "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/install/opencv_android")
29

30
set(ANDROID_INSTALL_SAMPLES_DIR "samples")
31

32
set(ANDROID_BUILD_ABI_FILTER "
33
reset()
34
include '${ANDROID_ABI}'
35
")
36

37
set(ANDROID_INSTALL_ABI_FILTER "
38
//reset()
39
//include 'armeabi-v7a'
40
//include 'arm64-v8a'
41
//include 'x86'
42
//include 'x86_64'
43
")
44
if(NOT INSTALL_CREATE_DISTRIB)
45
  set(ANDROID_INSTALL_ABI_FILTER "${ANDROID_BUILD_ABI_FILTER}")
46
endif()
47

48
# BUG: Ninja generator generates broken targets with ANDROID_ABI_FILTER name (CMake 3.11.2)
49
#set(__spaces "                        ")
50
#string(REPLACE "\n" "\n${__spaces}" ANDROID_ABI_FILTER "${__spaces}${ANDROID_BUILD_ABI_FILTER}")
51
#string(REPLACE REGEX "[ ]+$" "" ANDROID_ABI_FILTER "${ANDROID_ABI_FILTER}")
52
set(ANDROID_ABI_FILTER "${ANDROID_BUILD_ABI_FILTER}")
53
set(ANDROID_STRICT_BUILD_CONFIGURATION "true")
54
configure_file("${OpenCV_SOURCE_DIR}/samples/android/build.gradle.in" "${ANDROID_BUILD_BASE_DIR}/build.gradle" @ONLY)
55

56
set(ANDROID_ABI_FILTER "${ANDROID_INSTALL_ABI_FILTER}")
57
set(ANDROID_STRICT_BUILD_CONFIGURATION "false")
58
configure_file("${OpenCV_SOURCE_DIR}/samples/android/build.gradle.in" "${ANDROID_TMP_INSTALL_BASE_DIR}/${ANDROID_INSTALL_SAMPLES_DIR}/build.gradle" @ONLY)
59
install(FILES "${ANDROID_TMP_INSTALL_BASE_DIR}/${ANDROID_INSTALL_SAMPLES_DIR}/build.gradle" DESTINATION "${ANDROID_INSTALL_SAMPLES_DIR}" COMPONENT samples)
60

61
configure_file("${OpenCV_SOURCE_DIR}/platforms/android/gradle-wrapper/gradle/wrapper/gradle-wrapper.properties.in" "${ANDROID_BUILD_BASE_DIR}/gradle/wrapper/gradle-wrapper.properties" @ONLY)
62
install(FILES "${ANDROID_BUILD_BASE_DIR}/gradle/wrapper/gradle-wrapper.properties" DESTINATION "${ANDROID_INSTALL_SAMPLES_DIR}/gradle/wrapper" COMPONENT samples)
63

64
set(GRADLE_WRAPPER_FILES
65
    "gradle/wrapper/gradle-wrapper.jar"
66
    "gradlew.bat"
67
    "gradlew"
68
    "gradle.properties"
69
)
70
foreach(fname ${GRADLE_WRAPPER_FILES})
71
  get_filename_component(__dir "${fname}" DIRECTORY)
72
  set(__permissions "")
73
  set(__permissions_prefix "")
74
  if(fname STREQUAL "gradlew")
75
    set(__permissions FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
76
  endif()
77
  file(COPY "${OpenCV_SOURCE_DIR}/platforms/android/gradle-wrapper/${fname}" DESTINATION "${ANDROID_BUILD_BASE_DIR}/${__dir}" ${__permissions})
78
  string(REPLACE "FILE_PERMISSIONS" "PERMISSIONS" __permissions "${__permissions}")
79
  if("${__dir}" STREQUAL "")
80
    set(__dir ".")
81
  endif()
82
  install(FILES "${OpenCV_SOURCE_DIR}/platforms/android/gradle-wrapper/${fname}" DESTINATION "${ANDROID_INSTALL_SAMPLES_DIR}/${__dir}" COMPONENT samples ${__permissions})
83
endforeach()
84

85
# set build.gradle namespace
86
if(NOT (ANDROID_GRADLE_PLUGIN_VERSION VERSION_LESS "7.3.0"))
87
  ocv_update(OPENCV_ANDROID_NAMESPACE_DECLARATION "namespace 'org.opencv'")
88
else()
89
  ocv_update(OPENCV_ANDROID_NAMESPACE_DECLARATION "")
90
endif()
91

92
if(NOT (ANDROID_GRADLE_PLUGIN_VERSION VERSION_LESS "8.0.0"))
93
  # AGP-8.0 requires a minimum JDK version of JDK17
94
  ocv_update(ANDROID_GRADLE_JAVA_VERSION_INIT "17")
95
else()
96
  ocv_update(ANDROID_GRADLE_JAVA_VERSION_INIT "1_8")
97
endif()
98

99
set(ANDROID_GRADLE_JAVA_VERSION "${ANDROID_GRADLE_JAVA_VERSION_INIT}" CACHE STRING "Android Gradle Java version")
100
message(STATUS "Android Gradle Java version: ${ANDROID_GRADLE_JAVA_VERSION}")
101

102
# force reusing of the same CMake version
103
if(NOT OPENCV_SKIP_ANDROID_FORCE_CMAKE)
104
  if(NOT DEFINED _CMAKE_INSTALL_DIR)
105
    get_filename_component(_CMAKE_INSTALL_DIR "${CMAKE_ROOT}" PATH)
106
    get_filename_component(_CMAKE_INSTALL_DIR "${_CMAKE_INSTALL_DIR}" PATH)
107
  endif()
108
  ocv_update_file("${ANDROID_BUILD_BASE_DIR}/local.properties" "cmake.dir=${_CMAKE_INSTALL_DIR}\nndk.dir=${ANDROID_NDK}")
109
endif()
110

111
file(WRITE "${ANDROID_BUILD_BASE_DIR}/settings.gradle" "
112
gradle.ext {
113
    // possible options: 'maven_central', 'maven_local', 'sdk_path'
114
    opencv_source = 'sdk_path'
115
}
116

117
include ':opencv'
118
")
119

120
file(WRITE "${ANDROID_TMP_INSTALL_BASE_DIR}/settings.gradle" "
121
rootProject.name = 'opencv_samples'
122

123
gradle.ext {
124
    // possible options: 'maven_central', 'maven_local', 'sdk_path'
125
    opencv_source = 'sdk_path'
126
}
127

128
if (gradle.opencv_source == 'maven_local') {
129
    gradle.ext {
130
        opencv_maven_path = '<path_to_maven_repo>'
131
    }
132
}
133

134
if (gradle.opencv_source == 'sdk_path') {
135
    def opencvsdk = '../'
136
    //def opencvsdk='/<path to OpenCV-android-sdk>'
137
    //println opencvsdk
138
    include ':opencv'
139
    project(':opencv').projectDir = new File(opencvsdk + '/sdk')
140
}
141
")
142

143
ocv_check_environment_variables(OPENCV_GRADLE_VERBOSE_OPTIONS)
144
ocv_update(OPENCV_GRADLE_VERBOSE_OPTIONS "-i")
145
separate_arguments(OPENCV_GRADLE_VERBOSE_OPTIONS UNIX_COMMAND "${OPENCV_GRADLE_VERBOSE_OPTIONS}")
146

147
macro(add_android_project target path)
148
  get_filename_component(__dir "${path}" NAME)
149

150
  set(OPENCV_ANDROID_CMAKE_EXTRA_ARGS "")
151
  if(DEFINED ANDROID_TOOLCHAIN)
152
    set(OPENCV_ANDROID_CMAKE_EXTRA_ARGS "${OPENCV_ANDROID_CMAKE_EXTRA_ARGS},\n\"-DANDROID_TOOLCHAIN=${ANDROID_TOOLCHAIN}\"")
153
  endif()
154
  if(DEFINED ANDROID_STL)
155
    set(OPENCV_ANDROID_CMAKE_EXTRA_ARGS "${OPENCV_ANDROID_CMAKE_EXTRA_ARGS},\n\"-DANDROID_STL=${ANDROID_STL}\"")
156
  endif()
157

158
  #
159
  # Build
160
  #
161
  set(ANDROID_SAMPLE_JNI_PATH "${path}/jni")
162
  set(ANDROID_SAMPLE_JAVA_PATH "${path}/src")
163
  set(ANDROID_SAMPLE_RES_PATH "${path}/res")
164
  set(ANDROID_SAMPLE_MANIFEST_PATH "${path}/gradle/AndroidManifest.xml")
165

166
  set(ANDROID_ABI_FILTER "${ANDROID_BUILD_ABI_FILTER}")
167
  set(ANDROID_PROJECT_JNI_PATH "../../")
168

169
  string(REPLACE ";" "', '" ANDROID_SAMPLE_JAVA_PATH "['${ANDROID_SAMPLE_JAVA_PATH}']")
170
  string(REPLACE ";" "', '" ANDROID_SAMPLE_RES_PATH "['${ANDROID_SAMPLE_RES_PATH}']")
171
  configure_file("${path}/build.gradle.in" "${ANDROID_BUILD_BASE_DIR}/${__dir}/build.gradle" @ONLY)
172

173
  file(APPEND "${ANDROID_BUILD_BASE_DIR}/settings.gradle" "
174
include ':${__dir}'
175
")
176

177
  if (BUILD_ANDROID_EXAMPLES)
178
    # build apk
179
    set(APK_FILE "${ANDROID_BUILD_BASE_DIR}/${__dir}/build/outputs/apk/release/${__dir}-${ANDROID_ABI}-release-unsigned.apk")
180
    add_custom_command(
181
        OUTPUT "${APK_FILE}" "${OPENCV_DEPHELPER}/android_sample_${__dir}"
182
        COMMAND ./gradlew ${OPENCV_GRADLE_VERBOSE_OPTIONS} "${__dir}:assemble"
183
        COMMAND ${CMAKE_COMMAND} -E touch "${OPENCV_DEPHELPER}/android_sample_${__dir}"
184
        WORKING_DIRECTORY "${ANDROID_BUILD_BASE_DIR}"
185
        DEPENDS ${depends} opencv_java_android
186
        COMMENT "Building OpenCV Android sample project: ${__dir}"
187
    )
188
  else()  # install only
189
    # copy samples
190
    add_custom_command(
191
        OUTPUT "${OPENCV_DEPHELPER}/android_sample_${__dir}"
192
        COMMAND ${CMAKE_COMMAND} -E touch "${OPENCV_DEPHELPER}/android_sample_${__dir}"
193
        WORKING_DIRECTORY "${ANDROID_BUILD_BASE_DIR}"
194
        DEPENDS ${depends} opencv_java_android
195
        COMMENT "Copying OpenCV Android sample project: ${__dir}"
196
    )
197
  endif()
198

199
  file(REMOVE "${OPENCV_DEPHELPER}/android_sample_${__dir}")  # force rebuild after CMake run
200

201
  add_custom_target(android_sample_${__dir} ALL DEPENDS "${OPENCV_DEPHELPER}/android_sample_${__dir}" SOURCES "${ANDROID_SAMPLE_MANIFEST_PATH}")
202

203
  #
204
  # Install
205
  #
206
  set(ANDROID_SAMPLE_JNI_PATH "jni")
207
  set(ANDROID_SAMPLE_JAVA_PATH "src")
208
  set(ANDROID_SAMPLE_RES_PATH "res")
209
  set(ANDROID_SAMPLE_MANIFEST_PATH "AndroidManifest.xml")
210

211
  install(DIRECTORY "${path}/res" DESTINATION "${ANDROID_INSTALL_SAMPLES_DIR}/${__dir}" COMPONENT samples OPTIONAL)
212
  install(DIRECTORY "${path}/src" DESTINATION "${ANDROID_INSTALL_SAMPLES_DIR}/${__dir}" COMPONENT samples)
213
  install(DIRECTORY "${path}/jni" DESTINATION "${ANDROID_INSTALL_SAMPLES_DIR}/${__dir}" COMPONENT samples OPTIONAL)
214

215
  install(FILES "${path}/gradle/AndroidManifest.xml" DESTINATION "${ANDROID_INSTALL_SAMPLES_DIR}/${__dir}" COMPONENT samples)
216

217
  set(ANDROID_ABI_FILTER "${ANDROID_INSTALL_ABI_FILTER}")
218
  set(ANDROID_PROJECT_JNI_PATH "native/jni")
219

220
  string(REPLACE ";" "', '" ANDROID_SAMPLE_JAVA_PATH "['${ANDROID_SAMPLE_JAVA_PATH}']")
221
  string(REPLACE ";" "', '" ANDROID_SAMPLE_RES_PATH "['${ANDROID_SAMPLE_RES_PATH}']")
222
  configure_file("${path}/build.gradle.in" "${ANDROID_TMP_INSTALL_BASE_DIR}/${__dir}/build.gradle" @ONLY)
223
  install(FILES "${ANDROID_TMP_INSTALL_BASE_DIR}/${__dir}/build.gradle" DESTINATION "${ANDROID_INSTALL_SAMPLES_DIR}/${__dir}" COMPONENT samples)
224

225
  file(APPEND "${ANDROID_TMP_INSTALL_BASE_DIR}/settings.gradle" "
226
include ':${__dir}'
227
")
228

229
endmacro()
230

231
install(FILES "${ANDROID_TMP_INSTALL_BASE_DIR}/settings.gradle" DESTINATION "${ANDROID_INSTALL_SAMPLES_DIR}" COMPONENT samples)
232

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.