Skip to content

Commit ea923b9

Browse files
authored
Merge pull request #211 from einsitang/dev-android-enhance
Android Plugin custom arch support
2 parents fcbf12d + d13a1a6 commit ea923b9

File tree

2 files changed

+49
-17
lines changed

2 files changed

+49
-17
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ void main() {
161161

162162
see [example](https://github.com/rainyl/opencv_dart/tree/main/example)
163163

164-
~~More examples are on the way...~~see [opencv_dart.examples](https://github.com/rainyl/opencv_dart.examples) and share yours
164+
~~More examples are on the way...~~ see [awesome-opencv_dart](https://github.com/rainyl/awesome-opencv_dart) and share yours
165165

166166
### TODO
167167

android/build.gradle

Lines changed: 48 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -68,38 +68,70 @@ android {
6868
}
6969

7070
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
7374
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"
8097
}
81-
src(SRC_URLS)
82-
dest CACHE_DIR
83-
overwrite false
8498
}
8599

86-
ARCHS.each { arch ->
100+
ABI_ALL.each { arch ->
87101
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+
}
88107
task(extractTaskName, type: Copy) {
89-
def targetDir = new File("${SOURCE_DIR}/src/main/jniLibs/${arch}")
90108
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}..."
92113
}
93114
from tarTree(resources.gzip("${CACHE_DIR}/libopencv_dart-android-${arch}.tar.gz"))
94115
into targetDir
95116
}
96117
}
97118

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+
98129
task extractLibs(dependsOn: downloadLibs) {
99130
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}"
102133
}
134+
103135
doLast {
104136
println "[opencv_dart] Extract finished."
105137
}

0 commit comments

Comments
 (0)