diff --git a/embrace-gradle-plugin/src/main/java/io/embrace/android/gradle/plugin/tasks/ndk/NdkUploadTasksRegistration.kt b/embrace-gradle-plugin/src/main/java/io/embrace/android/gradle/plugin/tasks/ndk/NdkUploadTasksRegistration.kt index a4bfda471e..fc33be4ba2 100644 --- a/embrace-gradle-plugin/src/main/java/io/embrace/android/gradle/plugin/tasks/ndk/NdkUploadTasksRegistration.kt +++ b/embrace-gradle-plugin/src/main/java/io/embrace/android/gradle/plugin/tasks/ndk/NdkUploadTasksRegistration.kt @@ -152,7 +152,7 @@ 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 } @@ -160,18 +160,21 @@ class NdkUploadTasksRegistration( } } - 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 { + 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 { diff --git a/embrace-gradle-plugin/src/test/java/io/embrace/android/gradle/plugin/ndk/NdkUploadTasksRegistrationTest.kt b/embrace-gradle-plugin/src/test/java/io/embrace/android/gradle/plugin/ndk/NdkUploadTasksRegistrationTest.kt index 466198d835..b3b4e23d1d 100644 --- a/embrace-gradle-plugin/src/test/java/io/embrace/android/gradle/plugin/ndk/NdkUploadTasksRegistrationTest.kt +++ b/embrace-gradle-plugin/src/test/java/io/embrace/android/gradle/plugin/ndk/NdkUploadTasksRegistrationTest.kt @@ -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 = 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