build: copy 'android.jar' from SDK for ':subprojects:framework-stubs'

This commit is contained in:
Akash Yadav
2024-01-03 11:57:14 +05:30
parent e285f7ffb9
commit 1155fd8998
6 changed files with 62 additions and 6 deletions
@@ -28,6 +28,7 @@ import com.itsaky.androidide.plugins.tasks.AddFileToAssetsTask
import com.itsaky.androidide.plugins.tasks.DownloadAapt2Task
import com.itsaky.androidide.plugins.tasks.GenerateInitScriptTask
import com.itsaky.androidide.plugins.tasks.GradleWrapperBuilderTask
import com.itsaky.androidide.plugins.util.SdkUtils.getAndroidJar
import downloadVersion
import org.gradle.api.Plugin
import org.gradle.api.Project
@@ -64,7 +65,7 @@ class AndroidIDEAssetsPlugin : Plugin<Project> {
val addAndroidJarTaskProvider = tasks.register("addAndroidJarToAssets",
AddAndroidJarToAssetsTask::class.java) {
sdkDirectory = androidComponentsExtension.sdkComponents.sdkDirectory.get().asFile
androidJar = androidComponentsExtension.getAndroidJar(assertExists = true)
}
androidComponentsExtension.onVariants { variant ->
@@ -18,7 +18,9 @@
package com.itsaky.androidide.plugins.conf
import BuildConfig
import com.android.build.api.variant.AndroidComponentsExtension
import com.android.build.gradle.BaseExtension
import com.itsaky.androidide.plugins.util.SdkUtils.getAndroidJar
import isFDroidBuild
import org.gradle.api.Project
import org.gradle.api.artifacts.Dependency
@@ -44,6 +46,15 @@ fun Project.configureAndroidModule(
"${javaClass.simpleName} can only be applied to Android projects"
}
val androidJar = extensions.getByType(AndroidComponentsExtension::class.java)
.getAndroidJar(assertExists = true)
val frameworkStubsJar = findProject(":subprojects:framework-stubs")!!.file("libs/android.jar")
.also { it.parentFile.mkdirs() }
if (!(frameworkStubsJar.exists() && frameworkStubsJar.isFile)) {
androidJar.copyTo(frameworkStubsJar)
}
extensions.getByType(BaseExtension::class.java).run {
compileSdkVersion(BuildConfig.compileSdk)
@@ -21,6 +21,7 @@ import BuildConfig
import org.gradle.api.DefaultTask
import org.gradle.api.GradleException
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.TaskAction
import java.io.File
@@ -33,10 +34,10 @@ import java.io.File
abstract class AddAndroidJarToAssetsTask : DefaultTask() {
/**
* Path to the Android SDK directory.
* Path to the `android.jar` file.
*/
@get:org.gradle.api.tasks.Internal
internal var sdkDirectory: File? = null
@get:Internal
internal var androidJar: File? = null
/**
* The output directory to copy the `android.jar` file to.
@@ -49,7 +50,7 @@ abstract class AddAndroidJarToAssetsTask : DefaultTask() {
val outFile = outputDirectory.dir("data/common").get().asFile.also { dir -> dir.mkdirs() }
.let { dir -> File(dir, "android.jar") }
val androidJar = sdkDirectory!!.resolve("platforms/android-${BuildConfig.compileSdk}/android.jar")
val androidJar = this.androidJar!!
if (!androidJar.exists() || !androidJar.isFile) {
throw GradleException("File $androidJar does not exist or is not a file.")
}
@@ -0,0 +1,42 @@
/*
* This file is part of AndroidIDE.
*
* AndroidIDE is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* AndroidIDE is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with AndroidIDE. If not, see <https://www.gnu.org/licenses/>.
*/
package com.itsaky.androidide.plugins.util
import BuildConfig
import com.android.build.api.variant.AndroidComponentsExtension
import java.io.File
/**
* @author Akash Yadav
*/
object SdkUtils {
fun AndroidComponentsExtension<*, *, *>.getAndroidJar(assertExists: Boolean = true): File {
val sdkDirectory = sdkComponents.sdkDirectory
val androidJar = File(sdkDirectory.get().asFile,
"platforms/android-${BuildConfig.compileSdk}/android.jar")
if (assertExists) {
check(androidJar.exists() && androidJar.isFile) {
"$androidJar does not exist or is not a file."
}
}
return androidJar
}
}
+2 -1
View File
@@ -1 +1,2 @@
/build
/libs/android.jar
/build
Binary file not shown.