feat(rename-artifacts): add support for obfuscation mapping files

This commit is contained in:
Harsh Shandilya 2022-10-24 18:48:03 +05:30
parent 531234e036
commit cc55687292
No known key found for this signature in database
4 changed files with 28 additions and 4 deletions

2
android/.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
/apk/
/bundle/

View file

@ -5,6 +5,7 @@ import com.android.build.api.variant.ApplicationAndroidComponentsExtension
import com.android.build.api.variant.VariantOutputConfiguration import com.android.build.api.variant.VariantOutputConfiguration
import dev.msfjarvis.aps.gradle.artifacts.CollectApksTask import dev.msfjarvis.aps.gradle.artifacts.CollectApksTask
import dev.msfjarvis.aps.gradle.artifacts.CollectBundleTask import dev.msfjarvis.aps.gradle.artifacts.CollectBundleTask
import java.util.Locale
import org.gradle.api.Plugin import org.gradle.api.Plugin
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.kotlin.dsl.getByType import org.gradle.kotlin.dsl.getByType
@ -17,21 +18,24 @@ class RenameArtifactsPlugin : Plugin<Project> {
project.pluginManager.withPlugin("com.android.application") { project.pluginManager.withPlugin("com.android.application") {
project.extensions.getByType<ApplicationAndroidComponentsExtension>().run { project.extensions.getByType<ApplicationAndroidComponentsExtension>().run {
onVariants { variant -> onVariants { variant ->
project.tasks.register<CollectApksTask>("collect${variant.name.capitalize()}Apks") { val taskPrefix = "collect${variant.name.capitalize(Locale.ROOT)}"
project.tasks.register<CollectApksTask>("${taskPrefix}Apks") {
variantName.set(variant.name) variantName.set(variant.name)
apkFolder.set(variant.artifacts.get(SingleArtifact.APK)) apkFolder.set(variant.artifacts.get(SingleArtifact.APK))
mappingFile.set(variant.artifacts.get(SingleArtifact.OBFUSCATION_MAPPING_FILE))
builtArtifactsLoader.set(variant.artifacts.getBuiltArtifactsLoader()) builtArtifactsLoader.set(variant.artifacts.getBuiltArtifactsLoader())
outputDirectory.set(project.layout.projectDirectory.dir("outputs")) outputDirectory.set(project.layout.projectDirectory.dir("apk"))
} }
project.tasks.register<CollectBundleTask>("collect${variant.name.capitalize()}Bundle") { project.tasks.register<CollectBundleTask>("${taskPrefix}Bundle") {
val mainOutput = val mainOutput =
variant.outputs.single { variant.outputs.single {
it.outputType == VariantOutputConfiguration.OutputType.SINGLE it.outputType == VariantOutputConfiguration.OutputType.SINGLE
} }
variantName.set(variant.name) variantName.set(variant.name)
versionName.set(mainOutput.versionName) versionName.set(mainOutput.versionName)
mappingFile.set(variant.artifacts.get(SingleArtifact.OBFUSCATION_MAPPING_FILE))
bundleFile.set(variant.artifacts.get(SingleArtifact.BUNDLE)) bundleFile.set(variant.artifacts.get(SingleArtifact.BUNDLE))
outputDirectory.set(project.layout.projectDirectory.dir("outputs")) outputDirectory.set(project.layout.projectDirectory.dir("bundle"))
} }
} }
} }

View file

@ -6,9 +6,11 @@ import java.nio.file.Paths
import java.nio.file.StandardCopyOption import java.nio.file.StandardCopyOption
import org.gradle.api.DefaultTask import org.gradle.api.DefaultTask
import org.gradle.api.file.DirectoryProperty import org.gradle.api.file.DirectoryProperty
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.provider.Property import org.gradle.api.provider.Property
import org.gradle.api.tasks.CacheableTask import org.gradle.api.tasks.CacheableTask
import org.gradle.api.tasks.Input import org.gradle.api.tasks.Input
import org.gradle.api.tasks.InputFile
import org.gradle.api.tasks.InputFiles import org.gradle.api.tasks.InputFiles
import org.gradle.api.tasks.Internal import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.OutputDirectory import org.gradle.api.tasks.OutputDirectory
@ -21,6 +23,10 @@ import org.gradle.api.tasks.TaskAction
abstract class CollectApksTask : DefaultTask() { abstract class CollectApksTask : DefaultTask() {
@get:InputFiles @get:PathSensitive(PathSensitivity.NONE) abstract val apkFolder: DirectoryProperty @get:InputFiles @get:PathSensitive(PathSensitivity.NONE) abstract val apkFolder: DirectoryProperty
@get:InputFile
@get:PathSensitive(PathSensitivity.NONE)
abstract val mappingFile: RegularFileProperty
@get:Input abstract val variantName: Property<String> @get:Input abstract val variantName: Property<String>
@get:Internal abstract val builtArtifactsLoader: Property<BuiltArtifactsLoader> @get:Internal abstract val builtArtifactsLoader: Property<BuiltArtifactsLoader>
@ -40,5 +46,10 @@ abstract class CollectApksTask : DefaultTask() {
StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.REPLACE_EXISTING,
) )
} }
Files.copy(
mappingFile.get().asFile.toPath(),
outputDir.resolve("mapping.txt").toPath(),
StandardCopyOption.REPLACE_EXISTING,
)
} }
} }

View file

@ -14,6 +14,8 @@ import org.gradle.api.tasks.TaskAction
abstract class CollectBundleTask : DefaultTask() { abstract class CollectBundleTask : DefaultTask() {
@get:InputFile abstract val bundleFile: RegularFileProperty @get:InputFile abstract val bundleFile: RegularFileProperty
@get:InputFile abstract val mappingFile: RegularFileProperty
@get:Input abstract val variantName: Property<String> @get:Input abstract val variantName: Property<String>
@get:Input abstract val versionName: Property<String> @get:Input abstract val versionName: Property<String>
@ -29,5 +31,10 @@ abstract class CollectBundleTask : DefaultTask() {
outputDir.resolve("Claw-${variantName.get()}-${versionName.get()}.aab").toPath(), outputDir.resolve("Claw-${variantName.get()}-${versionName.get()}.aab").toPath(),
StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.REPLACE_EXISTING,
) )
Files.copy(
mappingFile.get().asFile.toPath(),
outputDir.resolve("mapping.txt").toPath(),
StandardCopyOption.REPLACE_EXISTING,
)
} }
} }