mirror of
https://gitee.com/zhangsken/AndroidIDE.git
synced 2026-10-16 07:49:44 +08:00
build: fix build failure when cleaning project and fDroidAapt2File does not exist
This commit is contained in:
+12
-56
@@ -18,14 +18,12 @@
|
||||
package com.itsaky.androidide.plugins
|
||||
|
||||
import BuildConfig
|
||||
import FDroidConfig
|
||||
import VersionUtils
|
||||
import com.android.build.api.variant.AndroidComponentsExtension
|
||||
import com.android.build.gradle.BaseExtension
|
||||
import com.itsaky.androidide.plugins.conf.flavorsAbis
|
||||
import com.itsaky.androidide.plugins.tasks.AddAndroidJarToAssetsTask
|
||||
import com.itsaky.androidide.plugins.tasks.AddFileToAssetsTask
|
||||
import com.itsaky.androidide.plugins.tasks.DownloadAapt2Task
|
||||
import com.itsaky.androidide.plugins.tasks.SetupAapt2Task
|
||||
import com.itsaky.androidide.plugins.tasks.GenerateInitScriptTask
|
||||
import com.itsaky.androidide.plugins.tasks.GradleWrapperBuilderTask
|
||||
import com.itsaky.androidide.plugins.util.SdkUtils.getAndroidJar
|
||||
@@ -34,7 +32,6 @@ import org.gradle.api.Plugin
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.tasks.TaskProvider
|
||||
import org.gradle.configurationcache.extensions.capitalized
|
||||
import java.io.File
|
||||
|
||||
/**
|
||||
* Handles asset copying and generation.
|
||||
@@ -61,7 +58,7 @@ class AndroidIDEAssetsPlugin : Plugin<Project> {
|
||||
val androidComponentsExtension = extensions.getByType(AndroidComponentsExtension::class.java)
|
||||
val baseExtension = extensions.getByType(BaseExtension::class.java)
|
||||
|
||||
val aapt2Tasks = getAapt2DownloadTasks(baseExtension)
|
||||
val aapt2Tasks = getAapt2SetupTasks(baseExtension)
|
||||
|
||||
val addAndroidJarTaskProvider = tasks.register("addAndroidJarToAssets",
|
||||
AddAndroidJarToAssetsTask::class.java) {
|
||||
@@ -70,17 +67,12 @@ class AndroidIDEAssetsPlugin : Plugin<Project> {
|
||||
|
||||
androidComponentsExtension.onVariants { variant ->
|
||||
|
||||
if (aapt2Tasks.isNotEmpty()) {
|
||||
val downloadAapt2TaskProvider = aapt2Tasks[variant.flavorName]
|
||||
?: throw IllegalStateException(
|
||||
"'aapt2' task not registered for flavor '${variant.flavorName}'")
|
||||
val aapt2SetupTaskProvider = aapt2Tasks[variant.flavorName]
|
||||
?: throw IllegalStateException(
|
||||
"'aapt2' task not registered for flavor '${variant.flavorName}'")
|
||||
|
||||
variant.sources.assets?.addGeneratedSourceDirectory(downloadAapt2TaskProvider,
|
||||
DownloadAapt2Task::outputDirectory)
|
||||
} else {
|
||||
variant.sources.assets?.addStaticSourceDirectory(
|
||||
getStaticFDroidAapt2Dir(variant.flavorName!!))
|
||||
}
|
||||
variant.sources.assets?.addGeneratedSourceDirectory(aapt2SetupTaskProvider,
|
||||
SetupAapt2Task::outputDirectory)
|
||||
|
||||
val variantNameCapitalized = variant.name.capitalized()
|
||||
|
||||
@@ -128,53 +120,17 @@ class AndroidIDEAssetsPlugin : Plugin<Project> {
|
||||
}
|
||||
}
|
||||
|
||||
private fun Project.getStaticFDroidAapt2Dir(flavorName: String): String {
|
||||
val fdroidArch = FDroidConfig.fDroidBuildArch!!
|
||||
val fdroidAapt2 = FDroidConfig.fDroidAapt2File!!
|
||||
|
||||
require(fdroidArch in flavorsAbis.keys) {
|
||||
"F-Droid arch '${fdroidArch}' is not supported!"
|
||||
}
|
||||
|
||||
|
||||
val inFile = File(fdroidAapt2)
|
||||
require(inFile.exists() && inFile.isFile) {
|
||||
"F-Droid AAPT2 file does not exist or is not a file: $inFile"
|
||||
}
|
||||
|
||||
val assetDir = project.layout.buildDirectory.dir("intermediates/fdroid-aapt2-${flavorName}")
|
||||
.get().asFile
|
||||
|
||||
if (assetDir.exists()) {
|
||||
assetDir.deleteRecursively()
|
||||
}
|
||||
|
||||
assetDir.mkdirs()
|
||||
|
||||
val outFile = File(assetDir, "data/$flavorName/aapt2")
|
||||
outFile.parentFile.mkdirs()
|
||||
|
||||
inFile.copyTo(outFile, overwrite = true)
|
||||
|
||||
return assetDir.absolutePath
|
||||
}
|
||||
|
||||
private fun Project.getAapt2DownloadTasks(
|
||||
private fun Project.getAapt2SetupTasks(
|
||||
baseExtension: BaseExtension
|
||||
): Map<String, TaskProvider<DownloadAapt2Task>> {
|
||||
): Map<String, TaskProvider<SetupAapt2Task>> {
|
||||
|
||||
if (FDroidConfig.isFDroidBuild) {
|
||||
// Do not download AAPT2 when building for F-Droid
|
||||
return emptyMap()
|
||||
}
|
||||
|
||||
val aapt2Tasks = mutableMapOf<String, TaskProvider<DownloadAapt2Task>>()
|
||||
val aapt2Tasks = mutableMapOf<String, TaskProvider<SetupAapt2Task>>()
|
||||
|
||||
baseExtension.productFlavors.forEach { flavor ->
|
||||
|
||||
val task = tasks.register(
|
||||
"downloadAapt2${flavor.name.capitalized()}",
|
||||
DownloadAapt2Task::class.java
|
||||
"setupAapt2${flavor.name.capitalized()}",
|
||||
SetupAapt2Task::class.java
|
||||
) {
|
||||
arch.set(flavor.name)
|
||||
checksum.set(AAPT2_CHECKSUMS[flavor.name] ?: throw IllegalStateException(
|
||||
|
||||
+26
-6
@@ -24,11 +24,12 @@ import org.gradle.api.provider.Property
|
||||
import org.gradle.api.tasks.Input
|
||||
import org.gradle.api.tasks.OutputDirectory
|
||||
import org.gradle.api.tasks.TaskAction
|
||||
import java.io.File
|
||||
|
||||
/**
|
||||
* @author Akash Yadav
|
||||
*/
|
||||
abstract class DownloadAapt2Task : DefaultTask() {
|
||||
abstract class SetupAapt2Task : DefaultTask() {
|
||||
|
||||
/**
|
||||
* The CPU architecture for which the `aapt2` should be downloaded.
|
||||
@@ -49,6 +50,12 @@ abstract class DownloadAapt2Task : DefaultTask() {
|
||||
@get:Input
|
||||
abstract val checksum: Property<String>
|
||||
|
||||
/**
|
||||
* The path of the static `aapt2` file which should be used instead of downloading it from GitHub.
|
||||
*/
|
||||
@get:Input
|
||||
abstract val staticAapt2: Property<String>
|
||||
|
||||
/**
|
||||
* The output directory.
|
||||
*/
|
||||
@@ -56,24 +63,37 @@ abstract class DownloadAapt2Task : DefaultTask() {
|
||||
abstract val outputDirectory: DirectoryProperty
|
||||
|
||||
init {
|
||||
@Suppress("LeakingThis")
|
||||
version.convention(DEFAULT_VERSION)
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
private const val DEFAULT_VERSION = "34.0.4"
|
||||
private val AAPT2_DOWNLOAD_URL = "https://github.com/AndroidIDEOfficial/platform-tools/releases/download/v%1\$s/aapt2-%2\$s"
|
||||
private const val AAPT2_DOWNLOAD_URL = "https://github.com/AndroidIDEOfficial/platform-tools/releases/download/v%1\$s/aapt2-%2\$s"
|
||||
}
|
||||
|
||||
@TaskAction
|
||||
fun downloadAapt2() {
|
||||
fun setupAapt2() {
|
||||
val file = outputDirectory.file("data/$arch/aapt2").get().asFile
|
||||
file.parentFile.deleteRecursively()
|
||||
file.parentFile.mkdirs()
|
||||
|
||||
if (staticAapt2.isPresent) {
|
||||
val aapt2 = File(staticAapt2.get())
|
||||
|
||||
require(aapt2.exists() && aapt2.isFile) {
|
||||
"F-Droid AAPT2 file does not exist or is not a file: $aapt2"
|
||||
}
|
||||
|
||||
aapt2.copyTo(file, overwrite = true)
|
||||
return
|
||||
}
|
||||
|
||||
val arch = this.arch.get()
|
||||
val version = this.version.get()
|
||||
val expectedChecksum = this.checksum.get()
|
||||
|
||||
val file = outputDirectory.file("data/$arch/aapt2").get().asFile
|
||||
file.parentFile.mkdirs()
|
||||
|
||||
val remoteUrl = AAPT2_DOWNLOAD_URL.format(version, arch)
|
||||
|
||||
DownloadUtils.doDownload(file, remoteUrl, expectedChecksum, logger)
|
||||
Reference in New Issue
Block a user