grab / grazel

A tool to migrate Android projects from Gradle to Bazel incrementally and automatically

Home Page:https://grab.github.io/grazel/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

./gradlew migrateToBazel and dynamic modules

meladRaouf opened this issue · comments

Hello,

I have integraded grazel in a multi module project but I got failure when running the gradle task ./gradlew migrateToBazel
this is the stack trace

Caused by: java.util.NoSuchElementException: List contains no element matching the predicate.
        at com.grab.grazel.migrate.android.DefaultAndroidManifestParser.androidManifestFile(AndroidManifestParser.kt:86)
        at com.grab.grazel.migrate.android.DefaultAndroidManifestParser.parsePackageName(AndroidManifestParser.kt:49)
        at com.grab.grazel.migrate.android.DefaultAndroidLibraryDataExtractor.extract(AndroidLibraryDataExtractor.kt:84)
        at com.grab.grazel.migrate.android.DefaultAndroidLibraryDataExtractor.extract(AndroidLibraryDataExtractor.kt:65)
        at com.grab.grazel.migrate.builder.KtAndroidLibTargetBuilder.build(KtAndroidLibTargetBuilder.kt:69)
        at com.grab.grazel.migrate.internal.ProjectBazelFileBuilder.build(ProjectBazelFileBuilder.kt:39)
        at com.grab.grazel.tasks.internal.GenerateBazelScriptsTask.action(GenerateBazelScriptsTask.kt:65)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:104)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:58)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$3.run(ExecuteActionsTaskExecuter.java:555)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:71)
        at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:71)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:540)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:523)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$300(ExecuteActionsTaskExecuter.java:108)


Hello this can happen if there is an Android library module without AndroidManifest.xml present with package name.

Could you please verify if all modules have AndroidManifest with package names present?

We need to run a validation and a descriptive error instead of failing like this.

Hello this can happen if there is an Android library module without AndroidManifest.xml present with package name.

Could you please verify if all modules have AndroidManifest with package names present?

I checked again and all modules has the AndroidManifest with package names present, is there anyway to bypass this problem ?

I converted the module from dynamic feature id("com.android.dynamic-feature")
to android library id("com.android.library")

and now grazel worked fine

Thanks for the update, closing this please reopen if anything comes up.