gradle/src/main/kotlin/com/lagradost/cloudstream3/gradle/configuration/ApkConfigurationProvider.kt

46 lines
1.6 KiB
Kotlin

package com.lagradost.cloudstream3.gradle.configuration
import com.lagradost.cloudstream3.gradle.ApkInfo
import com.lagradost.cloudstream3.gradle.createProgressLogger
import com.lagradost.cloudstream3.gradle.download
import com.lagradost.cloudstream3.gradle.getCloudstream
import com.googlecode.d2j.dex.Dex2jar
import com.googlecode.d2j.reader.BaseDexFileReader
import com.googlecode.d2j.reader.MultiDexFileReader
import groovy.json.JsonSlurper
import org.gradle.api.Project
import org.gradle.api.artifacts.Dependency
import java.lang.Integer.parseInt
import java.net.URL
import java.nio.file.Files
class ApkConfigurationProvider : IConfigurationProvider {
override val name: String
get() = "apk"
override fun provide(project: Project, dependency: Dependency) {
val extension = project.extensions.getCloudstream()
val apkinfo = ApkInfo(extension, dependency.version ?: "pre-release")
extension.apkinfo = apkinfo
apkinfo.cache.mkdirs()
if (!apkinfo.apkFile.exists()) {
project.logger.lifecycle("Downloading apk")
val url = URL(apkinfo.url)
url.download(apkinfo.apkFile, createProgressLogger(project, "Download apk"))
}
if (!apkinfo.jarFile.exists()) {
project.logger.lifecycle("Converting apk to jar")
val reader: BaseDexFileReader = MultiDexFileReader.open(Files.readAllBytes(apkinfo.apkFile.toPath()))
Dex2jar.from(reader).topoLogicalSort().skipDebug(false).noCode(true).to(apkinfo.jarFile.toPath())
}
project.dependencies.add("compileOnly", project.files(apkinfo.jarFile))
}
}