dependency-analysis-gradle-plugin icon indicating copy to clipboard operation
dependency-analysis-gradle-plugin copied to clipboard

Bug: Throws exception in Android project with `localTest` and `local` build types

Open jbduncan opened this issue 1 year ago • 4 comments

Build scan link

https://scans.gradle.com/s/iz5db3a77i22g

Plugin version

1.15.0

Gradle version

7.4.2

(Optional) Android Gradle Plugin (AGP) version

4.2.2

Describe the bug

When importing this plugin into an Android project with two custom buildTypes, localTest and local, doing anything Gradle-related like syncing the project in Android Studio or running ./gradlew tasks causes this error message to be reported.

A problem occurred configuring project ':app'.
> Failed to notify project evaluation listener.
   > com.android.build.gradle.internal.crash.ExternalApiUsageException: org.gradle.api.internal.tasks.DefaultTaskContainer$DuplicateTaskException: Cannot add task 'artifactsReportLocalTest' as a task with that name already exists.
   > KotlinJvmAndroidCompilation with name 'local' not found.

The associated exception stack trace can be found in the Gradle Build Scan link above.

To Reproduce Steps to reproduce the behavior:

  1. Open the latest Android Studio (Android Studio Dolphin | 2021.3.1 Patch 1, at time of writing).
  2. Go to "File" > "New" > "New Project..."
  3. Select the "Phone and Tablet" > "No Activity" template and click "OK".
  4. Click "Finish", accepting the default project settings.
  5. In the root build.gradle, add the following line:
plugins {
    // ...
    id "com.autonomousapps.dependency-analysis" version "1.15.0"
}
  1. In app/build.gradle, add the following lines to the android > buildTypes section:
// ...

android {
    // ...

    buildTypes {
        // ...

        localTest {}

        local {}
    }

    // ...
}

// ...
  1. Tap Ctrl+Ctrl and enter gradle tasks. Alternatively, run ./gradlew tasks from the terminal.

Expected behavior

The list of tasks for this project should appear.

Additional context

I was trying to apply this plugin to our proprietary Android app's Gradle build, where I first saw the error message and stack trace mentioned above. We have a number of Android build types, including local and localType, which would be impractical to remove or adjust.

jbduncan avatar Nov 21 '22 13:11 jbduncan

Could you provide the reproducer? Either zip or git project would work. I'm not going to go through those manual steps. I know this plugin works with custom build types because lots of Android projects have custom build types (including mine) and the plugin works. So, something else is going on here.

autonomousapps avatar Nov 26 '22 01:11 autonomousapps

Sure, no worries. You may find a reproducer at the following GitHub repo: https://github.com/jbduncan/dependency-analysis-android-gradle-plugin-bug-repro.

jbduncan avatar Nov 28 '22 18:11 jbduncan

Ohh haha the issue is due to the names of your buildTypes. Because you have a buildType is named "localTest", the plugin tries to create a task with the slug LocalTest. However, you also have a buildType named "local", which means the unit test analysis for the "local unit test" source will have the slug LocalTest—identical to the other slug.

The simplest solution is to not use the suffix "test" in any of your build types. You could also rename the "local" buildType to something else.

It's unlikely that I will fix this in the plugin any time soon.

autonomousapps avatar Nov 28 '22 21:11 autonomousapps

Ahh, gotcha!

I'll discuss this with my team, as I'm not sure of the consequences of renaming these build types, or if we even need them. Regardless, we could always temporarily rename them whilst trying out this plugin, and we have a couple of other apps that don't have build types like these, so we'd still benefit from this plugin, I imagine.

Many thanks for looking into this, and for all your time and effort with this plugin and the other tools you maintain. I'm acutely aware how time-consuming open source work is, having contributed to open source on and off over the years. :)

I'll keep this issue open in case you ever find the time to fix it.

jbduncan avatar Nov 28 '22 21:11 jbduncan