169 lines
5.8 KiB
Kotlin
169 lines
5.8 KiB
Kotlin
/**
|
|
* Paddle OCR (https://github.com/PaddlePaddle/PaddleOCR) build script (Kotlin DSL).
|
|
*
|
|
* Created by TonyJiangWJ (https://github.com/TonyJiangWJ) on Aug 7, 2023.
|
|
* Modified by TonyJiangWJ (https://github.com/TonyJiangWJ) as of Aug 11, 2023.
|
|
* Modified by SuperMonster003 as of Sep 4, 2023.
|
|
* Transformed by SuperMonster003 on Sep 30, 2025.
|
|
*/
|
|
|
|
plugins {
|
|
id("org.autojs.build.utils")
|
|
id("org.autojs.build.properties")
|
|
id("org.autojs.build.jvm-convention")
|
|
id("com.android.library")
|
|
id("org.jetbrains.kotlin.android")
|
|
}
|
|
|
|
ext {
|
|
set("projectName", "Paddle OCR")
|
|
}
|
|
|
|
val versionMap = mapOf(
|
|
"MIN_SDK" to props["MIN_SDK"].toInt(),
|
|
"COMPILE_SDK" to props["COMPILE_SDK"].toInt(),
|
|
"TARGET_SDK" to props["TARGET_SDK"].toInt(),
|
|
"NDK" to props["PADDLE_OCR/NDK"],
|
|
"CMAKE" to props["PADDLE_OCR/CMAKE"],
|
|
"OPENCV" to props["PADDLE_OCR/OPENCV"],
|
|
)
|
|
|
|
val nameMap = mapOf(
|
|
"PROJECT" to extensions.extraProperties.get("projectName") as String,
|
|
"OPENCV" to "OpenCV",
|
|
"NDK" to "NDK",
|
|
"CMAKE" to "Cmake",
|
|
)
|
|
|
|
val libsToDeploy = listOf(
|
|
// @Hint by TonyJiangWJ (https://github.com/TonyJiangWJ) on Aug 7, 2023.
|
|
// ! 下载 OpenCV 源码包 (默认为 4.2.0).
|
|
// ! 和 Auto.js 中的版本 (如 4.8.0) 不匹配会产生冲突,
|
|
// ! 可按需修改 version.properties 中对应内容.
|
|
// ! en-US (translated by SuperMonster003 on Oct 22, 2024):
|
|
// ! Download the archive for source code of OpenCV (defaults to 4.2.0).
|
|
// ! Not matching the version in Auto.js (e.g., 4.8.0) will cause conflicts.
|
|
// ! Adjust the corresponding content in version.properties as needed.
|
|
utils.newLibDeployer(
|
|
project,
|
|
nameMap["OPENCV"] as String,
|
|
"https://github.com/opencv/opencv/releases/download/${versionMap["OPENCV"]}/opencv-${versionMap["OPENCV"]}-android-sdk.zip",
|
|
).apply {
|
|
setSourceDir("/OpenCV-android-sdk/sdk/native/")
|
|
setDestDir("/src/sdk/native/")
|
|
}
|
|
)
|
|
|
|
val argsMap = mapOf(
|
|
// @Hint by LZX284 (https://github.com/LZX284) on Sep 30, 2023.
|
|
// ! "ANDROID_PLATFORM" 默认为 "android-23", 这里修改为与 AutoJs6 最低 SDK 版本一致的 `versionMap.MIN_SDK`.
|
|
// ! en-US (translated by SuperMonster003 on Oct 22, 2024):
|
|
// ! "ANDROID_PLATFORM" with default value "android-23" was changed to `versionMap.MIN_SDK`
|
|
// ! to align with the min SDK version of AutoJs6.
|
|
"ANDROID_PLATFORM" to "android-${versionMap["MIN_SDK"]}",
|
|
"ANDROID_STL" to "c++_shared",
|
|
"ANDROID_ARM_NEON" to "TRUE",
|
|
)
|
|
|
|
// @Hint by SuperMonster003 on Nov 12, 2023.
|
|
// ! Do not add a space (nbsp) after "-D".
|
|
// ! Reference: https://stackoverflow.com/questions/14887438/spacing-in-d-option-in-cmake
|
|
// ! zh-CN:
|
|
// ! 在 "-D" 后不要添加空格 (不间断空格).
|
|
// ! 参阅: https://stackoverflow.com/questions/14887438/spacing-in-d-option-in-cmake
|
|
val args = argsMap.entries.map { (k, v) -> "-D$k=$v" }
|
|
|
|
utils.configureLibraryLifecycleHooks(
|
|
project,
|
|
nameMap["PROJECT"] as String,
|
|
listOf("OPENCV", "NDK", "CMAKE").map { "${nameMap[it]}: ${versionMap[it]}" },
|
|
libsToDeploy,
|
|
"isCleanupPaddleOcr",
|
|
listOf(".cxx")
|
|
)
|
|
|
|
android {
|
|
namespace = "com.baidu.paddle.lite.ocr"
|
|
|
|
ndkVersion = versionMap["NDK"] as String
|
|
compileSdk = versionMap["COMPILE_SDK"] as Int
|
|
|
|
defaultConfig {
|
|
minSdk = versionMap["MIN_SDK"] as Int
|
|
|
|
externalNativeBuild {
|
|
cmake {
|
|
val cppFlagsMap = mapOf(
|
|
"-std" to "c++11"
|
|
)
|
|
val cppListFlags = mapOf(
|
|
"-f" to listOf("rtti", "exceptions"),
|
|
"-W" to "no-format"
|
|
)
|
|
|
|
// 组装等价于 Groovy 脚本中的拼接逻辑
|
|
val cppFlagsJoined = buildString {
|
|
append(
|
|
cppFlagsMap.entries.joinToString(" ") { (k, v) -> "$k=$v" }
|
|
)
|
|
append(" ")
|
|
append(
|
|
cppListFlags.entries.joinToString(" ") { (k, v) ->
|
|
when (v) {
|
|
is List<*> -> v.joinToString(" ") { opt -> k + opt }
|
|
else -> "$k$v"
|
|
}
|
|
}
|
|
)
|
|
}.trim()
|
|
|
|
cppFlags += cppFlagsJoined
|
|
arguments += args
|
|
}
|
|
}
|
|
|
|
ndk {
|
|
// @Hint by SuperMonster003 on Jan 2, 2024.
|
|
// ! Supported architectures: arm-v7, arm-v8.
|
|
// ! References:
|
|
// ! https://github.com/PaddlePaddle/Paddle-Lite/blob/develop/lite/tools/build_android.sh#L7
|
|
// ! https://github.com/PaddlePaddle/Paddle-Lite/issues/80
|
|
// ! zh-CN:
|
|
// ! 支持的架构: arm-v7, arm-v8.
|
|
// ! 参阅:
|
|
// ! https://github.com/PaddlePaddle/Paddle-Lite/blob/develop/lite/tools/build_android.sh#L7
|
|
// ! https://github.com/PaddlePaddle/Paddle-Lite/issues/80
|
|
// noinspection ChromeOsAbiSupport
|
|
abiFilters += listOf("arm64-v8a", "armeabi-v7a")
|
|
@Suppress("DEPRECATION")
|
|
ldLibs?.add("jnigraphics")
|
|
}
|
|
}
|
|
|
|
buildTypes {
|
|
release {
|
|
isMinifyEnabled = false
|
|
}
|
|
debug {
|
|
isMinifyEnabled = false
|
|
}
|
|
}
|
|
|
|
externalNativeBuild {
|
|
cmake {
|
|
path = file("src/main/cpp/CMakeLists.txt")
|
|
version = versionMap["CMAKE"] as String
|
|
}
|
|
}
|
|
|
|
lint {
|
|
targetSdk = versionMap["TARGET_SDK"] as Int
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
implementation(fileTree(mapOf("include" to listOf("*.jar"), "dir" to "libs")))
|
|
implementation(project(mapOf("path" to ":libs:org-opencv-${versionMap["OPENCV"]}".replace(".", "_"))))
|
|
implementation(libs.core.ktx)
|
|
implementation(libs.preference.ktx)
|
|
} |