Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -152,26 +152,29 @@ class NdkUploadTasksRegistration(
return projectType.flatMap { projectType: ProjectType ->
project.tasks.named("merge${data.name.capitalizedString()}NativeLibs").flatMap { mergeNativeLibsTask ->
when (projectType) {
ProjectType.UNITY -> project.provider { getUnitySharedObjectFiles(project, data) }
ProjectType.UNITY -> getUnitySharedObjectFiles(project, data)
ProjectType.NATIVE -> getNativeSharedObjectFiles(project, mergeNativeLibsTask)
else -> project.provider { File("") } // this shouldn't happen
}
}
}
}

private fun getUnitySharedObjectFiles(project: Project, data: AndroidCompactedVariantData): File {
// TODO: Verify if errors should be thrown if the directories or SO files are not found. Improve error messaging.
val sharedObjectsDirectory = unitySymbolsDir.orNull ?: error("Unity shared objects directory not found")

val decompressedObjectsDirectory = project.layout.buildDirectory
.dir("/intermediates/embrace/unity/${getMappingFileFolder(data)}")
.get() // this won't be null as we are using a constant string

return UnitySymbolFilesManager.of()
.getSymbolFiles(sharedObjectsDirectory, decompressedObjectsDirectory)
.firstOrNull()
?: error("Unity shared object files not found")
private fun getUnitySharedObjectFiles(project: Project, data: AndroidCompactedVariantData): Provider<File> {
return unitySymbolsDir.flatMap { sharedObjectsDirectory ->
if (sharedObjectsDirectory.isDirPresent()) {
project.layout.buildDirectory
.dir("/intermediates/embrace/unity/${getMappingFileFolder(data)}")
.map { decompressedObjectsDirectory ->
UnitySymbolFilesManager.of()
.getSymbolFiles(sharedObjectsDirectory, decompressedObjectsDirectory)
.firstOrNull()
?: error("Unity shared object files not found")
}
} else {
error("Unity shared object files not found")
}
}
}

private fun getNativeSharedObjectFiles(project: Project, task: Task): Provider<File> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -212,32 +212,6 @@ class NdkUploadTasksRegistrationTest {
assertEquals("Task with name 'mergeVariantNameNativeLibs' not found in root project 'test'.", exception.cause?.message)
}

@Test
fun `an error is thrown when unitySymbolsDir provider returns null for a unity project`() {
// Given a unity project where unitySymbolsDir provider returns null
val unitySymbolsDirProvider: Provider<UnitySymbolsDir> = project.provider { null }
val projectTypeProvider = project.provider { ProjectType.UNITY }
val variantName = testAndroidCompactedVariantData.name.capitalizedString()

// When NDK upload tasks are registered
val registration = createNdkUploadTasksRegistration(
unitySymbolsDir = unitySymbolsDirProvider,
projectType = projectTypeProvider
)
registration.register(testRegistrationParams)
registerTestTask(project, "merge${variantName}NativeLibs")

// Then an exception is thrown when trying to access architecturesDirectory
val compressionTask = project.tasks.findByName(
"${CompressSharedObjectFilesTask.NAME}$variantName"
) as CompressSharedObjectFilesTask

val exception = assertThrows(PropertyQueryException::class.java) {
compressionTask.architecturesDirectory.get()
}
assertEquals("Unity shared objects directory not found", exception.cause?.message)
}

@Test
fun `an error is thrown when getSymbolFiles doesn't find any file`() {
// Given a Unity project with an empty UnitySymbolsDir
Expand Down
Loading