forked from icerockdev/moko-resources
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCopyExecutableResourcesToApp.kt
More file actions
59 lines (50 loc) · 1.99 KB
/
Copy pathCopyExecutableResourcesToApp.kt
File metadata and controls
59 lines (50 loc) · 1.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/*
* Copyright 2022 IceRock MAG Inc. Use of this source code is governed by the Apache 2.0 license.
*/
package dev.icerock.gradle.tasks
import dev.icerock.gradle.data.ExtractingBaseLibraryImpl
import dev.icerock.gradle.utils.toKonanFile
import org.gradle.api.DefaultTask
import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.tasks.Classpath
import org.gradle.api.tasks.InputFiles
import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.TaskAction
import org.jetbrains.kotlin.library.KotlinLibraryLayout
import org.jetbrains.kotlin.library.impl.KotlinLibraryLayoutImpl
import java.io.File
import java.io.FileFilter
abstract class CopyExecutableResourcesToApp : DefaultTask() {
@get:InputFiles
@get:Classpath
abstract val klibs: ConfigurableFileCollection
@get:OutputDirectory
abstract val outputDirectory: DirectoryProperty
init {
group = "moko-resources"
}
@TaskAction
fun copyResources() {
val outputDir: File = outputDirectory.get().asFile
klibs
.filter { library -> library.extension == "klib" }
.filter(File::exists)
.forEach { inputFile ->
val klibKonan: org.jetbrains.kotlin.konan.file.File = inputFile.toKonanFile()
val klib = KotlinLibraryLayoutImpl(klib = klibKonan, component = "default")
val layout: KotlinLibraryLayout = ExtractingBaseLibraryImpl(klib)
// extracting bundles
layout
.resourcesDir
.absolutePath
.let(::File)
.listFiles(FileFilter { it.extension == "bundle" })
// copying bundles to app
?.forEach {
logger.info("${it.absolutePath} copying to $outputDir")
it.copyRecursively(target = File(outputDir, it.name), overwrite = true)
}
}
}
}