Files
AutoJs6/libs/paddleocr/build.gradle

155 lines
4.5 KiB
Groovy

import java.security.MessageDigest
/**
* PaddleOCR (https://github.com/PaddlePaddle/PaddleOCR) build script (Groovy).
*
* 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.
*/
plugins {
id "com.android.library"
}
def versions = new Versions("$rootDir/version.properties")
def versionOpencv = versions.opencv
def versionNdk = versions.ndk
def versionCmake = versions.cmake
def zipArchives = [
// @Hint by TonyJiangWJ on Aug 7, 2023.
// ! 下载 OpenCV 源码包 (默认为 4.2.0).
// ! 和 Auto.js 中的版本 (如 4.5.5) 不匹配会产生冲突, 可按需修改.
[
"src" : "https://github.com/opencv/opencv/releases/download" +
"/${versionOpencv}/opencv-${versionOpencv}-android-sdk.zip",
"dest": "OpenCV",
],
]
android {
namespace = "com.baidu.paddleocr"
ndkVersion versionNdk
compileSdk 33
defaultConfig {
minSdkVersion 24
targetSdkVersion 31
externalNativeBuild {
cmake {
cppFlags "-std=c++11 -frtti -fexceptions -Wno-format"
arguments "-DANDROID_PLATFORM=android-23", "-DANDROID_STL=c++_shared", "-DANDROID_ARM_NEON=TRUE"
}
}
ndk {
abiFilters "arm64-v8a", "armeabi-v7a"
ldLibs "jnigraphics"
}
}
buildTypes {
release {
minifyEnabled false
}
}
externalNativeBuild {
cmake {
path "src/main/cpp/CMakeLists.txt"
version versionCmake
}
}
}
dependencies {
implementation fileTree(include: ["*.jar"], dir: "libs")
implementation project(path: ":libs:org.opencv-${versionOpencv}")
}
ext {
versions.showInfo()
}
// @Hint by TonyJiangWJ on Aug 7, 2023.
// ! 首次导入最好手动运行一下这个 task 下载依赖的包.
tasks.register("downloadAndExtractArchives", DefaultTask) {
doFirst {
println "Downloading and extracting archives including libs and models"
}
doLast {
// Prepare cache folder for archives
String cachePath = "cache"
if (!file("${cachePath}").exists()) {
mkdir "${cachePath}"
}
zipArchives.each { archive ->
MessageDigest messageDigest = MessageDigest.getInstance("MD5")
messageDigest.update(archive.src.bytes)
String cacheName = new BigInteger(1, messageDigest.digest()).toString(32)
// Download the target archive if not exists
boolean copyFiles = !file("${archive.dest}").exists()
if (!file("${cachePath}/${cacheName}.zip").exists()) {
ant.get(src: archive.src, dest: file("${cachePath}/${cacheName}.zip"))
// force to copy files from the latest archive files
copyFiles = true
}
// Extract the target archive if its dest path does not exists
if (copyFiles) {
copy {
from zipTree("${cachePath}/${cacheName}.zip")
into "${archive.dest}"
}
}
}
}
}
preBuild.dependsOn downloadAndExtractArchives
class Versions {
String opencv
String ndk
String cmake
Versions(String filePath) {
File file = new File(filePath)
if (!file.canRead()) {
throw FileNotFoundException("Can't read file '$filePath'")
}
Properties properties = new Properties()
properties.load(new FileInputStream(file))
opencv = properties["OPENCV_VERSION"] as String
ndk = properties["NDK_VERSION"] as String
cmake = properties["CMAKE_VERSION"] as String
}
void showInfo() {
def title = "Version information for paddleocr library"
def infoOpencv = "OpenCV version: $opencv"
def infoNdk = "NDK version: $ndk"
def infoCmake = "CMake version: $cmake"
def maxLength = maxOf([title, infoOpencv, infoNdk, infoCmake].collect { it.length() })
[
"=".repeat(maxLength),
title,
"-".repeat(maxLength),
infoOpencv,
infoNdk,
infoCmake,
"=".repeat(maxLength),
"",
].each { println(it) }
}
private static int maxOf(List<Integer> integers) {
int max = 0
integers.each { max = Math.max(max, it) }
return max
}
}