gradle/src/main/kotlin/com/lagradost/cloudstream3/gradle/tasks/Tasks.kt

133 lines
4.7 KiB
Kotlin
Raw Normal View History

2022-08-04 11:30:09 +00:00
package com.lagradost.cloudstream3.gradle.tasks
import com.lagradost.cloudstream3.gradle.getCloudstream
import com.lagradost.cloudstream3.gradle.entities.PluginManifest
2022-08-07 19:04:52 +00:00
import com.lagradost.cloudstream3.gradle.makeManifest
2022-08-04 11:30:09 +00:00
import com.android.build.gradle.BaseExtension
import com.android.build.gradle.tasks.ProcessLibraryManifest
import groovy.json.JsonBuilder
2022-08-08 07:40:35 +00:00
import groovy.json.JsonGenerator
2022-08-04 11:30:09 +00:00
import org.gradle.api.Project
import org.gradle.api.tasks.AbstractCopyTask
import org.gradle.api.tasks.bundling.Zip
import org.gradle.api.tasks.compile.AbstractCompile
2022-08-06 13:34:15 +00:00
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
2022-08-04 11:30:09 +00:00
const val TASK_GROUP = "cloudstream"
fun registerTasks(project: Project) {
val extension = project.extensions.getCloudstream()
val intermediates = project.buildDir.resolve("intermediates")
if (project.rootProject.tasks.findByName("makePluginsJson") == null) {
project.rootProject.tasks.register("makePluginsJson", MakePluginsJsonTask::class.java) {
it.group = TASK_GROUP
it.outputs.upToDateWhen { false }
it.outputFile.set(it.project.buildDir.resolve("plugins.json"))
}
}
2022-08-04 11:30:09 +00:00
project.tasks.register("genSources", GenSourcesTask::class.java) {
it.group = TASK_GROUP
}
val pluginClassFile = intermediates.resolve("pluginClass")
val compileDex = project.tasks.register("compileDex", CompileDexTask::class.java) {
it.group = TASK_GROUP
it.pluginClassFile.set(pluginClassFile)
2022-08-06 13:34:15 +00:00
val kotlinTask = project.tasks.findByName("compileDebugKotlin") as KotlinCompile?
if (kotlinTask != null) {
it.dependsOn(kotlinTask)
it.input.from(kotlinTask.destinationDirectory)
}
val javacTask = project.tasks.findByName("compileDebugJavaWithJavac") as AbstractCompile?
if (javacTask != null) {
it.dependsOn(javacTask)
it.input.from(javacTask.destinationDirectory)
2022-08-04 11:30:09 +00:00
}
it.outputFile.set(intermediates.resolve("classes.dex"))
}
2022-08-09 16:04:41 +00:00
val compileResources = project.tasks.register("compileResources", CompileResourcesTask::class.java) {
it.group = TASK_GROUP
val processManifestTask = project.tasks.getByName("processDebugManifest") as ProcessLibraryManifest
it.dependsOn(processManifestTask)
val android = project.extensions.getByName("android") as BaseExtension
it.input.set(android.sourceSets.getByName("main").res.srcDirs.single())
it.manifestFile.set(processManifestTask.manifestOutputFile)
it.outputFile.set(intermediates.resolve("res.apk"))
it.doLast { _ ->
val resApkFile = it.outputFile.asFile.get()
if (resApkFile.exists()) {
project.tasks.named("make", AbstractCopyTask::class.java) {
it.from(project.zipTree(resApkFile)) { copySpec ->
copySpec.exclude("AndroidManifest.xml")
}
}
}
}
}
2022-08-04 11:30:09 +00:00
project.afterEvaluate {
project.tasks.register("make", Zip::class.java) {
val compileDexTask = compileDex.get()
it.dependsOn(compileDexTask)
val manifestFile = intermediates.resolve("manifest.json")
it.from(manifestFile)
it.doFirst {
if (extension.pluginClassName == null) {
if (pluginClassFile.exists()) {
extension.pluginClassName = pluginClassFile.readText()
}
}
manifestFile.writeText(
2022-08-08 09:54:17 +00:00
JsonBuilder(project.makeManifest(),
2022-08-08 07:40:35 +00:00
JsonGenerator.Options()
.excludeNulls()
.build()
).toString()
2022-08-04 11:30:09 +00:00
)
}
it.from(compileDexTask.outputFile)
val zip = it as Zip
2022-08-09 16:04:41 +00:00
if (extension.requiresResources) {
zip.dependsOn(compileResources.get())
}
2022-08-04 11:30:09 +00:00
zip.isPreserveFileTimestamps = false
zip.archiveBaseName.set(project.name)
zip.archiveExtension.set("cs3")
2022-08-04 11:30:09 +00:00
zip.archiveVersion.set("")
zip.destinationDirectory.set(project.buildDir)
it.doLast { task ->
extension.fileSize = task.outputs.files.singleFile.length()
2022-08-04 11:30:09 +00:00
task.logger.lifecycle("Made Cloudstream package at ${task.outputs.files.singleFile}")
}
}
}
project.tasks.register("cleanCache", CleanCacheTask::class.java) {
it.group = TASK_GROUP
}
2022-08-04 13:53:32 +00:00
project.tasks.register("deployWithAdb", DeployWithAdbTask::class.java) {
it.group = TASK_GROUP
it.dependsOn("make")
}
2022-08-04 11:30:09 +00:00
}