mirror of
https://gitee.com/zhangsken/AndroidIDE.git
synced 2026-10-16 07:49:44 +08:00
fix: use prebuilt aapt2 file when building for F-Droid
This commit is contained in:
@@ -1,6 +1,3 @@
|
||||
import org.gradle.api.Project
|
||||
import java.io.File
|
||||
|
||||
/*
|
||||
* This file is part of AndroidIDE.
|
||||
*
|
||||
@@ -18,6 +15,9 @@ import java.io.File
|
||||
* along with AndroidIDE. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import org.gradle.api.Project
|
||||
import java.io.File
|
||||
|
||||
/**
|
||||
* @author Akash Yadav
|
||||
*/
|
||||
@@ -28,6 +28,10 @@ object FDroidConfig {
|
||||
|
||||
var isFDroidBuild: Boolean = false
|
||||
private set
|
||||
get() = hasRead && field
|
||||
|
||||
var fDroidBuildArch: String? = null
|
||||
private set
|
||||
|
||||
var fDroidVersionName: String? = null
|
||||
private set
|
||||
@@ -35,9 +39,14 @@ object FDroidConfig {
|
||||
var fDroidVersionCode: Int? = null
|
||||
private set
|
||||
|
||||
var fDroidAapt2File: String? = null
|
||||
private set
|
||||
|
||||
const val PROP_FDROID_BUILD = "ide.build.fdroid"
|
||||
const val PROP_FDROID_BUILD_ARCH = "ide.build.fdroid.arch"
|
||||
const val PROP_FDROID_BUILD_VERSION = "ide.build.fdroid.version"
|
||||
const val PROP_FDROID_BUILD_VERCODE = "ide.build.fdroid.vercode"
|
||||
const val PROP_FDROID_AAPT2FILE = "ide.build.fdroid.aapt2File"
|
||||
|
||||
fun load(project: Project) {
|
||||
val propsFile = File(project.rootDir, "fdroid.properties")
|
||||
@@ -56,7 +65,9 @@ object FDroidConfig {
|
||||
hasRead = true
|
||||
isFDroidBuild = properties.getProperty(PROP_FDROID_BUILD, null).toBoolean()
|
||||
|
||||
fDroidBuildArch = properties.getProperty(PROP_FDROID_BUILD_ARCH, null)
|
||||
fDroidVersionName = properties.getProperty(PROP_FDROID_BUILD_VERSION, null)
|
||||
fDroidVersionCode = properties.getProperty(PROP_FDROID_BUILD_VERCODE, null)?.toInt()
|
||||
fDroidAapt2File = properties.getProperty(PROP_FDROID_AAPT2FILE, null)
|
||||
}
|
||||
}
|
||||
+74
-15
@@ -18,9 +18,11 @@
|
||||
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
|
||||
@@ -31,6 +33,7 @@ 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.
|
||||
@@ -57,15 +60,7 @@ class AndroidIDEAssetsPlugin : Plugin<Project> {
|
||||
val androidComponentsExtension = extensions.getByType(AndroidComponentsExtension::class.java)
|
||||
val baseExtension = extensions.getByType(BaseExtension::class.java)
|
||||
|
||||
val aapt2Tasks = mutableMapOf<String, TaskProvider<DownloadAapt2Task>>()
|
||||
baseExtension.productFlavors.forEach { flavor ->
|
||||
aapt2Tasks[flavor.name] = tasks.register("downloadAapt2${flavor.name.capitalized()}",
|
||||
DownloadAapt2Task::class.java) {
|
||||
arch.set(flavor.name)
|
||||
checksum.set(AAPT2_CHECKSUMS[flavor.name] ?: throw IllegalStateException(
|
||||
"Checksum for aapt2-${flavor.name} not found!"))
|
||||
}
|
||||
}
|
||||
val aapt2Tasks = getAapt2DownloadTasks(baseExtension)
|
||||
|
||||
val addAndroidJarTaskProvider = tasks.register("addAndroidJarToAssets",
|
||||
AddAndroidJarToAssetsTask::class.java) {
|
||||
@@ -74,9 +69,17 @@ class AndroidIDEAssetsPlugin : Plugin<Project> {
|
||||
|
||||
androidComponentsExtension.onVariants { variant ->
|
||||
|
||||
val downloadAapt2TaskProvider = aapt2Tasks[variant.flavorName]
|
||||
?: throw IllegalStateException(
|
||||
"'aapt2' task not registered for flavor '${variant.flavorName}'")
|
||||
if (aapt2Tasks.isNotEmpty()) {
|
||||
val downloadAapt2TaskProvider = 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!!))
|
||||
}
|
||||
|
||||
val variantNameCapitalized = variant.name.capitalized()
|
||||
|
||||
@@ -86,9 +89,6 @@ class AndroidIDEAssetsPlugin : Plugin<Project> {
|
||||
variant.sources.assets?.addGeneratedSourceDirectory(addAndroidJarTaskProvider,
|
||||
AddAndroidJarToAssetsTask::outputDirectory)
|
||||
|
||||
variant.sources.assets?.addGeneratedSourceDirectory(downloadAapt2TaskProvider,
|
||||
DownloadAapt2Task::outputDirectory)
|
||||
|
||||
// Init script generator
|
||||
val generateInitScript = tasks.register(
|
||||
"generate${variantNameCapitalized}InitScript",
|
||||
@@ -126,5 +126,64 @@ 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(
|
||||
baseExtension: BaseExtension
|
||||
): Map<String, TaskProvider<DownloadAapt2Task>> {
|
||||
|
||||
if (FDroidConfig.isFDroidBuild) {
|
||||
// Do not download AAPT2 when building for F-Droid
|
||||
return emptyMap()
|
||||
}
|
||||
|
||||
val aapt2Tasks = mutableMapOf<String, TaskProvider<DownloadAapt2Task>>()
|
||||
|
||||
baseExtension.productFlavors.forEach { flavor ->
|
||||
|
||||
val task = tasks.register(
|
||||
"downloadAapt2${flavor.name.capitalized()}",
|
||||
DownloadAapt2Task::class.java
|
||||
) {
|
||||
arch.set(flavor.name)
|
||||
checksum.set(AAPT2_CHECKSUMS[flavor.name] ?: throw IllegalStateException(
|
||||
"Checksum for aapt2-${flavor.name} not found!"))
|
||||
}
|
||||
|
||||
aapt2Tasks[flavor.name] = task
|
||||
}
|
||||
|
||||
return aapt2Tasks
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-3
@@ -33,9 +33,7 @@ import projectVersionCode
|
||||
* For example, if the base version code of the IDE is 270 (for v2.7.0), then for arm64-v8a
|
||||
* flavor, the version code will be `100 * 270 + 1` i.e. `2701`
|
||||
*/
|
||||
// IMPORTANT: When changing the configuration here, make sure to update the following file:
|
||||
// - <root>/scripts/setup_fdroid_build.sh
|
||||
private val flavorsAbis = mapOf("arm64-v8a" to 1, "armeabi-v7a" to 2, "x86_64" to 3)
|
||||
internal val flavorsAbis = mapOf("arm64-v8a" to 1, "armeabi-v7a" to 2, "x86_64" to 3)
|
||||
private val disableCoreLibDesugaringForModules = arrayOf(":logsender", ":logger")
|
||||
|
||||
fun Project.configureAndroidModule(
|
||||
|
||||
@@ -41,6 +41,9 @@ buildscript {
|
||||
}
|
||||
|
||||
subprojects {
|
||||
// Always load the F-Droid config
|
||||
FDroidConfig.load(project)
|
||||
|
||||
afterEvaluate {
|
||||
apply { plugin(AndroidIDEPlugin::class.java) }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user