@@ -68,38 +68,70 @@ android {
68
68
}
69
69
70
70
def SOURCE_DIR = project. buildscript. sourceFile. parentFile
71
- def CACHE_DIR = SOURCE_DIR . parentFile
72
- def CVD_VERSION = new File (" ${ project.buildscript.sourceFile.parentFile.parentFile} /binary.version" ). text
71
+ def ROOT_DIR = SOURCE_DIR . parentFile
72
+ def CACHE_DIR = new File (" ${ ROOT_DIR} /.dart_tool/.cache" )
73
+ def CVD_VERSION = new File (" ${ ROOT_DIR} /binary.version" ). text
73
74
def CVD_LIB_URL_BASE = " https://github.com/rainyl/opencv_dart/releases/download"
74
- def ARCHS = [' x86_64' , ' arm64-v8a' , ' armeabi-v7a' ]
75
-
76
- task downloadLibs (type : Download ) {
77
- println " [opencv_dart] Downloading libraries..."
78
- def SRC_URLS = ARCHS . collect { ARCH ->
79
- " ${ CVD_LIB_URL_BASE} /v${ CVD_VERSION} /libopencv_dart-android-${ ARCH} .tar.gz"
75
+ def ABI_ALL = [' x86_64' , ' arm64-v8a' , ' armeabi-v7a' ]
76
+ def ABI_ACCEPTED = [' x86_64' , ' arm64-v8a' , ' armeabi-v7a' ]
77
+
78
+ def OPENCV_DART_ANDROID_ENABLED_ABI = System . env. OPENCV_DART_ANDROID_ENABLED_ABI ?: null
79
+ if (OPENCV_DART_ANDROID_ENABLED_ABI != null ){
80
+ println " [opencv_dart] detected OPENCV_DART_ANDROID_ENABLED_ABI: $OPENCV_DART_ANDROID_ENABLED_ABI "
81
+ def enabledABI = OPENCV_DART_ANDROID_ENABLED_ABI . split(" ," )
82
+ def acceptedABI = []
83
+ enabledABI. each { abi ->
84
+ if (ABI_ALL . contains(abi)){
85
+ println " [opencv_dart] add abi: ${ abi} "
86
+ acceptedABI. add(abi)
87
+ } else {
88
+ println " [opencv_dart] invalid abi: ${ abi} , ignored"
89
+ }
90
+ }
91
+ println " [opencv_dart] accepted abi: $acceptedABI "
92
+ if (acceptedABI){
93
+ ABI_ACCEPTED = acceptedABI
94
+ } else {
95
+ println " [opencv_dart] invalid OPENCV_DART_ANDROID_ENABLED_ABI: $OPENCV_DART_ANDROID_ENABLED_ABI "
96
+ println " [opencv_dart] will enable all supported ABI: $ABI_ACCEPTED "
80
97
}
81
- src(SRC_URLS )
82
- dest CACHE_DIR
83
- overwrite false
84
98
}
85
99
86
- ARCHS . each { arch ->
100
+ ABI_ALL . each { arch ->
87
101
def extractTaskName = " opencv_dart_extract_libs_${ arch} "
102
+ def targetDir = new File (" ${ SOURCE_DIR} /src/main/jniLibs/${ arch} " )
103
+ if (targetDir. exists() && ! ABI_ACCEPTED . contains(arch)) {
104
+ println " [opencv_dart] Deleting libraries for ${ arch} ..."
105
+ delete targetDir
106
+ }
88
107
task(extractTaskName, type : Copy ) {
89
- def targetDir = new File (" ${ SOURCE_DIR} /src/main/jniLibs/${ arch} " )
90
108
onlyIf {
91
- ! file(" ${ targetDir} /libopencv_dart.so" ). exists()
109
+ ABI_ACCEPTED . contains(arch) && ! file(" ${ targetDir} /libopencv_dart.so" ). exists()
110
+ }
111
+ doFirst {
112
+ println " [opencv_dart] Extracting libraries for ${ arch} ..."
92
113
}
93
114
from tarTree(resources. gzip(" ${ CACHE_DIR} /libopencv_dart-android-${ arch} .tar.gz" ))
94
115
into targetDir
95
116
}
96
117
}
97
118
119
+ task downloadLibs (type : Download ) {
120
+ println " [opencv_dart] Downloading libraries..."
121
+ def SRC_URLS = ABI_ACCEPTED . collect { ARCH ->
122
+ " ${ CVD_LIB_URL_BASE} /v${ CVD_VERSION} /libopencv_dart-android-${ ARCH} .tar.gz"
123
+ }
124
+ src(SRC_URLS )
125
+ dest CACHE_DIR
126
+ overwrite false
127
+ }
128
+
98
129
task extractLibs (dependsOn : downloadLibs) {
99
130
println " [opencv_dart] Extracting libraries..."
100
- ARCHS . each { arch ->
101
- finalizedBy " opencv_dart_extract_libs_${ arch} "
131
+ ABI_ALL . each { arch ->
132
+ dependsOn " opencv_dart_extract_libs_${ arch} "
102
133
}
134
+
103
135
doLast {
104
136
println " [opencv_dart] Extract finished."
105
137
}
0 commit comments