Skip to content

Commit 0e80dc0

Browse files
authored
Address PR comments for the new Encode task (#2093)
1 parent 27e9fe9 commit 0e80dc0

File tree

7 files changed

+39
-36
lines changed

7 files changed

+39
-36
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import io.embrace.android.gradle.plugin.tasks.ndk.EncodeSharedObjectFilesTask
1+
import io.embrace.android.gradle.plugin.tasks.ndk.EncodeFileToBase64Task
22

33
plugins {
44
id("java")
@@ -8,13 +8,13 @@ plugins {
88

99
def failBuildOnUploadErrors = (project.findProperty("failBuildOnUploadErrors") ?: "true").toBoolean()
1010

11-
project.tasks.register("testTask", EncodeSharedObjectFilesTask) { task ->
11+
project.tasks.register("testTask", EncodeFileToBase64Task) { task ->
1212
integrationTest.configureEmbraceTask(task)
1313
task.failBuildOnUploadErrors.set(failBuildOnUploadErrors)
14-
task.architecturesToHashedSharedObjectFilesMapJson.set(
14+
task.inputFile.set(
1515
project.layout.projectDirectory.file("architecturesMap.json")
1616
)
17-
task.encodedSharedObjectFilesMap.set(
17+
task.outputFile.set(
1818
project.layout.buildDirectory.file("encoded_map.txt")
1919
)
2020
}
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import org.junit.Assert.assertEquals
66
import org.junit.Rule
77
import org.junit.Test
88

9-
class EncodeSharedObjectFilesTaskIntegrationTest {
9+
class EncodeFileToBase64TaskIntegrationTest {
1010

1111
@Rule
1212
@JvmField

embrace-gradle-plugin/src/main/java/io/embrace/android/gradle/plugin/instrumentation/AsmTaskRegistration.kt

+7-8
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import com.android.build.api.instrumentation.FramesComputationMode
44
import com.android.build.api.instrumentation.InstrumentationScope
55
import io.embrace.android.gradle.plugin.gradle.nullSafeMap
66
import io.embrace.android.gradle.plugin.gradle.tryGetTaskProvider
7-
import io.embrace.android.gradle.plugin.tasks.ndk.EncodeSharedObjectFilesTask
7+
import io.embrace.android.gradle.plugin.tasks.ndk.EncodeFileToBase64Task
88
import io.embrace.android.gradle.plugin.tasks.registration.EmbraceTaskRegistration
99
import io.embrace.android.gradle.plugin.tasks.registration.RegistrationParams
1010
import io.embrace.android.gradle.plugin.util.capitalizedString
@@ -26,7 +26,6 @@ class AsmTaskRegistration : EmbraceTaskRegistration {
2626
variantConfigs.first { it.variantName == variant.name }
2727
}
2828
)
29-
// TODO: why are we passing disabled to ASM, if we could just not use transformClassesWith if behavior is disabled?
3029
params.disabled.set(
3130
project.provider {
3231
behavior.isPluginDisabledForVariant(variant.name) || behavior.isInstrumentationDisabledForVariant(variant.name)
@@ -43,20 +42,20 @@ class AsmTaskRegistration : EmbraceTaskRegistration {
4342

4443
project.afterEvaluate {
4544
// Find the Asm transformation task by name and make it depend on encodeSharedObjectFilesTask
46-
val encodeSharedObjectFilesTask = project.tryGetTaskProvider(
47-
"${EncodeSharedObjectFilesTask.NAME}${data.name.capitalizedString()}",
48-
EncodeSharedObjectFilesTask::class.java
45+
val encodeFileToBase64Task = project.tryGetTaskProvider(
46+
"${EncodeFileToBase64Task.NAME}${data.name.capitalizedString()}",
47+
EncodeFileToBase64Task::class.java
4948
) ?: return@afterEvaluate
5049

5150
val asmTransformationTask = project.tryGetTaskProvider(
5251
"transform${variant.name.capitalizedString()}ClassesWithAsm"
5352
) ?: error("Unable to find ASM transformation task for variant ${variant.name}.")
5453

55-
asmTransformationTask.configure { it.dependsOn(encodeSharedObjectFilesTask) }
54+
asmTransformationTask.configure { it.dependsOn(encodeFileToBase64Task) }
5655

5756
params.encodedSharedObjectFilesMap.set(
58-
encodeSharedObjectFilesTask.nullSafeMap { task ->
59-
task.encodedSharedObjectFilesMap.asFile.orNull?.let { file ->
57+
encodeFileToBase64Task.nullSafeMap { encodeTask ->
58+
encodeTask.outputFile.asFile.orNull?.let { file ->
6059
file.takeIf { it.exists() }
6160
?.bufferedReader()
6261
?.use { it.readText() }

embrace-gradle-plugin/src/main/java/io/embrace/android/gradle/plugin/tasks/il2cpp/Il2CppTaskSource.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package io.embrace.android.gradle.plugin.tasks.il2cpp
22

33
import io.embrace.android.gradle.plugin.gradle.tryGetTaskProvider
44
import io.embrace.android.gradle.plugin.model.AndroidCompactedVariantData
5-
import io.embrace.android.gradle.plugin.tasks.ndk.EncodeSharedObjectFilesTask
5+
import io.embrace.android.gradle.plugin.tasks.ndk.EncodeFileToBase64Task
66
import io.embrace.android.gradle.plugin.util.capitalizedString
77
import org.gradle.api.Project
88
import org.gradle.api.Task
@@ -14,7 +14,7 @@ import org.gradle.api.tasks.TaskProvider
1414
*/
1515
class Il2CppTaskSource {
1616
fun fetchTask(project: Project, variant: AndroidCompactedVariantData): TaskProvider<Task>? {
17-
val taskName = "${EncodeSharedObjectFilesTask.NAME}${variant.name.capitalizedString()}"
17+
val taskName = "${EncodeFileToBase64Task.NAME}${variant.name.capitalizedString()}"
1818
return project.tryGetTaskProvider(taskName)
1919
}
2020
}
+15-11
Original file line numberDiff line numberDiff line change
@@ -14,24 +14,26 @@ import java.util.Base64
1414
import javax.inject.Inject
1515

1616
/**
17-
* Task that encodes in Base64 a map of architectures to hashed shared object files. It reads the map from a JSON file and outputs a base64
18-
* encoded string of the map. This encoded string will be then used by the Embrace SDK for NDK crash reporting.
17+
* Task that reads the contents of an input file, encodes them to Base64, and stores them in an output file.
1918
*
20-
* Input: architecturesToHashedSharedObjectFilesMapJson, a JSON file containing the map of architectures to hashed shared object files.
21-
* Output: encodedSharedObjectFilesMap, a file containing the base64 encoded map.
19+
* This task is currently used to encode a JSON file containing a map of architectures
20+
* to hashed shared object files. This encoded string is then used by the Embrace SDK for NDK crash reporting.
21+
*
22+
* Input: inputFile, the file to be encoded
23+
* Output: outputFile, the file containing the Base64 encoded content
2224
*/
23-
abstract class EncodeSharedObjectFilesTask @Inject constructor(
25+
abstract class EncodeFileToBase64Task @Inject constructor(
2426
objectFactory: ObjectFactory,
2527
) : EmbraceTaskImpl(objectFactory) {
2628

27-
private val logger = Logger(EncodeSharedObjectFilesTask::class.java)
29+
private val logger = Logger(EncodeFileToBase64Task::class.java)
2830

2931
@SkipWhenEmpty
3032
@get:InputFile
31-
val architecturesToHashedSharedObjectFilesMapJson: RegularFileProperty = objectFactory.fileProperty()
33+
val inputFile: RegularFileProperty = objectFactory.fileProperty()
3234

3335
@get:OutputFile
34-
val encodedSharedObjectFilesMap: RegularFileProperty = objectFactory.fileProperty()
36+
val outputFile: RegularFileProperty = objectFactory.fileProperty()
3537

3638
@get:Input
3739
val failBuildOnUploadErrors: Property<Boolean> = objectFactory.property(Boolean::class.java)
@@ -40,9 +42,11 @@ abstract class EncodeSharedObjectFilesTask @Inject constructor(
4042
@TaskAction
4143
fun onRun() {
4244
try {
43-
val jsonContent = architecturesToHashedSharedObjectFilesMapJson.get().asFile.bufferedReader().use { it.readText() }
44-
val encodedContent = Base64.getEncoder().encodeToString(jsonContent.toByteArray())
45-
encodedSharedObjectFilesMap.get().asFile.bufferedWriter().use { it.write(encodedContent) }
45+
inputFile.get().asFile.inputStream().use { inputStream ->
46+
Base64.getEncoder().wrap(outputFile.get().asFile.outputStream()).use { encoder ->
47+
inputStream.copyTo(encoder)
48+
}
49+
}
4650
} catch (exception: Exception) {
4751
logger.error("An error has occurred while encoding shared object files map", exception)
4852
if (failBuildOnUploadErrors.get()) {

embrace-gradle-plugin/src/main/java/io/embrace/android/gradle/plugin/tasks/ndk/NdkUploadTasksRegistration.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -125,20 +125,20 @@ class NdkUploadTasksRegistration(
125125
}
126126

127127
project.registerTask(
128-
EncodeSharedObjectFilesTask.NAME,
129-
EncodeSharedObjectFilesTask::class.java,
128+
EncodeFileToBase64Task.NAME,
129+
EncodeFileToBase64Task::class.java,
130130
data
131131
) { task ->
132132
// TODO: Check why this is needed for 7.5.1. For Gradle 8+ Gradle detects automatically when the other tasks aren't executed
133-
task.onlyIf { task.architecturesToHashedSharedObjectFilesMapJson.asFile.get().exists() }
133+
task.onlyIf { task.inputFile.asFile.get().exists() }
134134

135-
task.architecturesToHashedSharedObjectFilesMapJson.set(
135+
task.inputFile.set(
136136
hashTaskProvider.flatMap { it.architecturesToHashedSharedObjectFilesMap }
137137
)
138138

139139
task.failBuildOnUploadErrors.set(behavior.failBuildOnUploadErrors)
140140

141-
task.encodedSharedObjectFilesMap.set(
141+
task.outputFile.set(
142142
project.layout.buildDirectory.file("intermediates/embrace/ndk/${data.name}/encoded_map.txt")
143143
)
144144

embrace-gradle-plugin/src/test/java/io/embrace/android/gradle/plugin/ndk/NdkUploadTasksRegistrationTest.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import io.embrace.android.gradle.plugin.instrumentation.config.model.UnityConfig
1515
import io.embrace.android.gradle.plugin.instrumentation.config.model.VariantConfig
1616
import io.embrace.android.gradle.plugin.model.AndroidCompactedVariantData
1717
import io.embrace.android.gradle.plugin.tasks.ndk.CompressSharedObjectFilesTask
18-
import io.embrace.android.gradle.plugin.tasks.ndk.EncodeSharedObjectFilesTask
18+
import io.embrace.android.gradle.plugin.tasks.ndk.EncodeFileToBase64Task
1919
import io.embrace.android.gradle.plugin.tasks.ndk.HashSharedObjectFilesTask
2020
import io.embrace.android.gradle.plugin.tasks.ndk.NdkUploadTasksRegistration
2121
import io.embrace.android.gradle.plugin.tasks.ndk.UploadSharedObjectFilesTask
@@ -115,7 +115,7 @@ class NdkUploadTasksRegistrationTest {
115115
assertTaskNotRegistered(CompressSharedObjectFilesTask.NAME, testAndroidCompactedVariantData.name)
116116
assertTaskNotRegistered(HashSharedObjectFilesTask.NAME, testAndroidCompactedVariantData.name)
117117
assertTaskNotRegistered(UploadSharedObjectFilesTask.NAME, testAndroidCompactedVariantData.name)
118-
assertTaskNotRegistered(EncodeSharedObjectFilesTask.NAME, testAndroidCompactedVariantData.name)
118+
assertTaskNotRegistered(EncodeFileToBase64Task.NAME, testAndroidCompactedVariantData.name)
119119
}
120120

121121
@Test
@@ -145,8 +145,8 @@ class NdkUploadTasksRegistrationTest {
145145

146146
// The injection task should not run
147147
val encodingTask = project.tasks.findByName(
148-
"${EncodeSharedObjectFilesTask.NAME}${testAndroidCompactedVariantData.name.capitalizedString()}"
149-
) as EncodeSharedObjectFilesTask
148+
"${EncodeFileToBase64Task.NAME}${testAndroidCompactedVariantData.name.capitalizedString()}"
149+
) as EncodeFileToBase64Task
150150
assertFalse(encodingTask.onlyIf.isSatisfiedBy(encodingTask))
151151
}
152152

@@ -184,7 +184,7 @@ class NdkUploadTasksRegistrationTest {
184184
assertTaskRegistered(CompressSharedObjectFilesTask.NAME, testAndroidCompactedVariantData.name)
185185
assertTaskRegistered(HashSharedObjectFilesTask.NAME, testAndroidCompactedVariantData.name)
186186
assertTaskRegistered(UploadSharedObjectFilesTask.NAME, testAndroidCompactedVariantData.name)
187-
assertTaskRegistered(EncodeSharedObjectFilesTask.NAME, testAndroidCompactedVariantData.name)
187+
assertTaskRegistered(EncodeFileToBase64Task.NAME, testAndroidCompactedVariantData.name)
188188
}
189189

190190
// TODO: Do all Unity projects have a mergeNativeLibs task?

0 commit comments

Comments
 (0)