Сборка динамической версии не удалась с дублирующимися ресурсами
Я создаю один образец для проверки доставки динамических функций Android. У меня есть структура проекта следующим образом. Приложение базового проекта и одна динамическая функция sample_dynamic_feature. Все настройки, необходимые для доставки динамических функций, выполнены. Проблема возникает, когда я добавляю любой файл макета или XML-файл с тем же именем в базовый модуль, а также в динамический модуль. Я добавил активность_основной.xml как в базовом приложении, так и в динамическом модуле. Я получил следующую ошибку:
Что пошло не так:
Execution failed for task ':app:packageReleaseBundle'.
> java.util.concurrent.ExecutionException: com.android.tools.build.bundletool.exceptions.ValidationException: com.android.tools.build.bundletool.exceptions.ValidationException: Modules 'base' and 'sample_dynamic_feature' contain entry 'res/layout/activity_main.xml' with different content.
Прекрасно работает с:
Above setup works fine in debug mode.
./gradlew assembleDebug
./gradlew assembleRelease
Сбой с:
In case of release mode it gives me above error.
./gradlew bundleDebug
./gradlew bundleRelease
Полная трассировка стека:
Исключение: org.gradle.api.tasks.TaskExecutionException: не удалось выполнить задачу ':app:packageReleaseBundle'. в org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:110) в org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute:gra.grag: at77).api.internal..tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54) в org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute.a.as.gra..SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101) в org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFileProgra.jpg) org.jpg.api.internal..tasks.execution..ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43) в org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34) в org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1. выполнить (EventFiringTaskExecuter.java:51) в org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300) в org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292) в org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174) в org.gradle.internal.operationuOgno в org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31) в org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java.gra.grade.graph) at)..LocalTaskInfoExecutor.execute(LocalTaskInfoExecutor.java:42) в org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:277) в org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:262) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:135) в org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:130) в org.gradle.execution.taskgraph.DefaultTaskexplanExecutor $ Executor.ec org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.executeWithWork(DefaultTaskPlanExecutor.java:191) в org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.rull.grag.tg ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) в org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46) в org.gradle.internal.concurrentImpl:55) Вызывается: org.gradle.internal.UncheckedException: java.util.concurrent.ExecutionException: com.android.tools.build.bundletool.exceptions.ValidationException: модули "base" и "sample_dynamic_feature" содержат запись 'res/layout/activity_main.xml' с другим содержанием. в org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:63) в org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:40) в org.gradle.internal.reflect.JavaMetavaethoin.in:76) в org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:46) в org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.j). org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26) в org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:801) в org.graapi.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:768) в org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:131) в org.graild.NorkButorialOperation.Execute (DefaultBuildOperationExecutor.java:300) по адресу org.gradle.internal.operations.DefaultBuildOperationExecutor $ RunnableBuildOperationWorker.execute (DefaultBuildOperationExecutor.java:292) по адресу org.gradle.internal.operations.DefaultBuildOperationExecutor.execute (DefaultBuildOperationExefaultoo.guo.jup).run(DefaultBuildOperationExecutor.java:90) в org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31) в org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExctions) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:99) ... еще 31 причина: java.util.concurrent.ExecutionException: com.android.tools.build.bundleol. exceptions.ValidationException: модули 'base' и 'sample_dynamic_feature' содержат запись 'res/layout/activity_main.xml' с различным содержанием. на com.android.ide.common.workers.ExecutorServiceAdapter.close(ExecutorServiceAdapter.kt:56) на kotlin.io.CloseableKt.closeFinally(Closeable.kt:53) на com.android.build.gradle.internal.tasks.PackageBundleTask.bundleModules(PackageBundleTask.kt:121) в org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73) ... еще 44 Причина: com.android.tools.build.bundletool.exceptions.ValidationException: Модули "base" и "sample_dynamic_feature" содержат запись "res / layout / activity_main.xml" с различным содержанием. в com.android.tools.build.bundletool.exceptions.ValidationException$Builder.build(ValidationException.java:49) в com.android.tools.build.bundletool.exceptions.ValidationException$Builder.build(ValidationException.java:41) в com.android.tools.build.bundletool.validation.EntryClashValidator.checkEqualEntries(EntryClashValidator.java:66) в com.android.tools.build.bundletool.validation.EntryClashValidator.validateAlljalaval).tools.build.bundletool.validation.ValidatorRunner.common.collect.ImmutableList.forEach(ImmutableList.java:407) в com.android.tools.build.bundletool.validation.ValidatorRunner.validateBundleModules(ValidatorRunner.java:63) в com.android.tools.build.bundto.BundleModulesValidator.validate(BundleModulesValidator.java:101) в com.android.tools.build.bundletool.commands.BuildBundleCommand.validateInput(BuildBundleCommand.java:244) в com.android.tools.build.bundletool.commands.BuildBundleCommand.execute(BuildBundleCom). в com.android.build.gradle.internal.tasks.PackageBundleTask$BundleToolRunnable.run(PackageBundleTask.kt:200) в com.android.ide.common.workers.ExecutorServiceAdapter$ представить $ представление $ 1.run (исполнитель-служба-адвокат):)... еще 48
Что этот пакет имеет значение?
1 ответ
При создании APK с использованием ассемблером или ассемблером, система сборки генерирует разные apk для разных динамических функций. Один для базы и один для каждой динамической функции. Таким образом, нет конфликта ресурсов.
В случае генерации пакета приложения система сборки может столкнуться с конфликтом, поскольку генерируемый артефакт является одним единственным артефактом, который является файлом aab.