A Gradle plugin to report the number of method references in your APK on every build.

Related tags

Plugin hacktoberfest
Overview

Dexcount Gradle Plugin

a chart showing sample methods counts by package

Build Status Android Weekly Android Arsenal

A Gradle plugin to report the number of method references in your APK, AAR, or java module.

This helps you keep tabs on the growth of your app, with an eye to staying under the 65,536 method-reference limit, and avoiding the headache of eliminating methods or enabling multidex.

For more information, please see the website.

Download

The plugin is available from the Gradle Plugin Portal under the ID com.getkeepsafe.dexcount, and from Maven Central under the coordinates com.getkeepsafe.dexcount:dexcount-gradle-plugin:2.0.0.

Snapshot builds are available from the Sonatype Snapshot Repository at https://oss.sonatype.org/content/repositories/snapshots.

Dexcount requires Java 8 or higher, Gradle 6.0 or higher, and Android Gradle Plugin 3.4.0 or higher.

Credits

The Java code from the com.android.dexdeps package is sourced from the Android source tree. Inspired by Mihail Parparita's dex-method-counts project, to whom much credit is due.

Copyright 2015-2020 Keepsafe Software, Inc

Comments
  • Can't use for some reason

    Can't use for some reason

    I get this error: Error:Could not find com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.5.0. Searched in the following locations: file:/C:/Program Files/Android/android-studio/gradle/m2repository/com/getkeepsafe/dexcount/dexcount-gradle-plugin/0.5.0/dexcount-gradle-plugin-0.5.0.pom file:/C:/Program Files/Android/android-studio/gradle/m2repository/com/getkeepsafe/dexcount/dexcount-gradle-plugin/0.5.0/dexcount-gradle-plugin-0.5.0.jar https://maven.fabric.io/public/com/getkeepsafe/dexcount/dexcount-gradle-plugin/0.5.0/dexcount-gradle-plugin-0.5.0.pom https://maven.fabric.io/public/com/getkeepsafe/dexcount/dexcount-gradle-plugin/0.5.0/dexcount-gradle-plugin-0.5.0.jar

    opened by AndroidDeveloperLB 31
  • Does not work with Android Library

    Does not work with Android Library

    it does not work when I place it after apply plugin: 'com.android.library' Error message: No signature of method: java.lang.UNIXProcess.isAlive() is applicable for argument types: () values: [] Possible solutions: split(groovy.lang.Closure), isCase(java.lang.Object)

    opened by ardavank 23
  • Can't count methods in AAR (Java 8)

    Can't count methods in AAR (Java 8)

    Build process was changed from gradle android plugin 2.4.0. If you use some features from Java 8 and minSdk < 26, then it run "desugar" before transforming classes to dex (https://developer.android.com/studio/write/java8-support.html).

    Gradle: 4.1 Gradle Android plugin: 3.0.0-beta7

    library build.gradle:

    android {
        compileSdkVersion 26
        buildToolsVersion '26.0.2'
        defaultConfig {
            minSdkVersion 15
            targetSdkVersion 26
        }
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
    }
    

    Stacktrace:

    Dexcount name:    dexcount-gradle-plugin
    Dexcount version: 0.8.1
    Dexcount input:   /home/dmitry/IdeaProjects/TestLibrary/library/build/outputs/aar/library-release.aar
    Error counting dex methods. Please contact the developer at https://github.com/KeepSafe/dexcount-gradle-plugin/issues
    com.getkeepsafe.dexcount.DexCountException: dx exited with exit code 1
    stderr=Uncaught translation error: com.android.dx.cf.code.SimException: invalid opcode ba (invokedynamic requires --min-sdk-version >= 26)
    1 error; aborting
    
            at com.getkeepsafe.dexcount.DexFile$Companion.extractDexFromAar(DexFile.kt:167)
            at com.getkeepsafe.dexcount.DexFile$Companion.extractDexData(DexFile.kt:101)
            at com.getkeepsafe.dexcount.DexMethodCountTaskBase.generatePackageTree(Tasks.kt:165)
            at com.getkeepsafe.dexcount.DexMethodCountTaskBase.countMethods(Tasks.kt:127)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:498)
            at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
            at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.doExecute(DefaultTaskClassInfoStore.java:141)
            at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:134)
            at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:121)
            at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:731)
            at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:705)
            at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:122)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
            at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:111)
            at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92)
            at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70)
            at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:63)
            at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
            at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
            at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:88)
            at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52)
            at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
            at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
            at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
            at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
            at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:248)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
            at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241)
            at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230)
            at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:124)
            at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:80)
            at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:105)
            at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:99)
            at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:625)
            at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:580)
            at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:99)
            at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
            at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
            at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
            at java.lang.Thread.run(Thread.java:745)
    
    wontfix 
    opened by DeKaN 19
  • Bad <init> method call from inside of a branch

    Bad method call from inside of a branch

    Information:Gradle tasks [:app:assembleDebug]
    :app:preBuild UP-TO-DATE
    :app:preDebugBuild UP-TO-DATE
    :app:checkDebugManifest
    :app:preReleaseBuild UP-TO-DATE
    :app:prepareComAndroidSupportAppcompatV72301Library UP-TO-DATE
    :app:prepareComAndroidSupportRecyclerviewV72301Library UP-TO-DATE
    :app:prepareComAndroidSupportSupportV132301Library UP-TO-DATE
    :app:prepareComAndroidSupportSupportV42301Library UP-TO-DATE
    :app:prepareComCrashlyticsSdkAndroidAnswers132Library UP-TO-DATE
    :app:prepareComCrashlyticsSdkAndroidBeta113Library UP-TO-DATE
    :app:prepareComCrashlyticsSdkAndroidCrashlytics252Library UP-TO-DATE
    :app:prepareComCrashlyticsSdkAndroidCrashlyticsCore235Library UP-TO-DATE
    :app:prepareComGithubChrisbanesPhotoviewLibrary124Library UP-TO-DATE
    :app:prepareComGoogleAndroidGmsPlayServicesBase780Library UP-TO-DATE
    :app:prepareComGoogleAndroidGmsPlayServicesLocation780Library UP-TO-DATE
    :app:prepareComGoogleAndroidGmsPlayServicesMaps780Library UP-TO-DATE
    :app:prepareComMsSquareExpandableTextView014Library UP-TO-DATE
    :app:prepareIoFabricSdkAndroidFabric136Library UP-TO-DATE
    :app:prepareJpCoCyberagentAndroidGpuimageGpuimageLibrary123Library UP-TO-DATE
    :app:prepareMeGrantlandAutofittextview021Library UP-TO-DATE
    :app:prepareOrgApmemToolsLayouts19Library UP-TO-DATE
    :app:prepareDebugDependencies
    :app:compileDebugAidl UP-TO-DATE
    :app:compileDebugRenderscript UP-TO-DATE
    :app:generateDebugBuildConfig UP-TO-DATE
    :app:generateDebugAssets UP-TO-DATE
    :app:mergeDebugAssets UP-TO-DATE
    :app:generateDebugResValues UP-TO-DATE
    :app:generateDebugResources UP-TO-DATE
    :app:mergeDebugResources UP-TO-DATE
    :app:processDebugManifest UP-TO-DATE
    :app:fabricGenerateResourcesDebug
    :app:processDebugResources
    :app:generateDebugSources
    :app:processDebugJavaRes UP-TO-DATE
    :app:compileDebugJavaWithJavac UP-TO-DATE
    :app:compileDebugNdk UP-TO-DATE
    :app:compileDebugSources UP-TO-DATE
    :app:dexDebug UP-TO-DATE
    :app:validateDebugSigning
    :app:packageDebug
    :app:zipalignDebug
    :app:assembleDebug FAILED
    Error:Execution failed for task ':app:assembleDebug'.
    > Bad <init> method call from inside of a branch
    Exception Details:
      Location:
        com/getkeepsafe/dexcount/PackageTree.<init>(Ljava/lang/String;)V @27: invokespecial
      Reason:
        Error exists in the bytecode
      Bytecode:
        0x0000000: b800 214d b800 359a 0006 a700 172a 2b2c
        0x0000010: 1236 3212 022b b900 3c03 00b7 002c a700
        0x0000020: 0f2a 2b2b b800 40b8 0029 b700 2cb1     
      Stackmap Table:
        append_frame(@13,Object[#67])
        same_frame(@33)
        full_frame(@45,{Object[#2],Object[#69],Object[#67]},{})
    Information:BUILD FAILED
    Information:Total time: 27.534 secs
    Information:1 error
    Information:0 warnings
    Information:See complete output in console
    

    Gradle 2.4

    Build time: 2015-05-05 08:09:24 UTC Build number: none Revision: 5c9c3bc20ca1c281ac7972643f1e2d190f2c943c

    Groovy: 2.3.10 Ant: Apache Ant(TM) version 1.9.4 compiled on April 29 2014 JVM: 1.7.0_79 (Oracle Corporation 24.79-b02) OS: Windows 7 6.1 amd64

    opened by kprotasov 17
  • Add AAR support

    Add AAR support

    It would be nice to be able to have the methods count for library projects. This means supporting the examination of the AAR output.

    In contrast to APK archives, AAR archives contain a classes.jar file inside, instead of a classes.dex file.

    To compile JAR files into DEX files, one would use the dx command line tool available in the Android SDK:

    dx --dex --output=classes.dex classes.jar
    

    It would be nice to do this from Java instead of calling an external command line tool to do this conversion. Looking at the source code of the dx tool, the method processOne looks like it would be useful for this.

    enhancement help wanted 
    opened by juandiana 17
  • add support for AAR files

    add support for AAR files

    This is for issue #10

    Adds support for AAR files. Doesn't really give you as valid info as running against an APK but it's useful to watch for deltas in your AAR library. Also added a unit test against a known AAR file to make sure it's counting properly.

    opened by kenkyee 14
  • inputFile does not exist

    inputFile does not exist

    Android Studio 3.0 RC2

    Error:A problem was found with the configuration of task ':app:countDebugDexMethods'.

    File '/Users/mingkangpan/Documents/app/build/outputs/apk/debug/app-debug.apk' specified for property 'inputFile' does not exist.

    am I missing something?

    opened by MinkiPan-zz 13
  • Can't build when renaming apk

    Can't build when renaming apk

    Hi,

    I got issue with version >= 8.0.0. No problem with version 0.7.3

    Error:A problem was found with the configuration of task ':mymodulename:countDebugDexMethods'.
    > File '/my/project/full/path/build/outputs/apk/debug/mymodulename-debug.apk' specified for property 'inputFile' does not exist.
    

    The problem is that I rename the final apk like this (in "mymodulename" build.gradle):

    [...]
    
    android {
        [...]
        android.applicationVariants.all { variant ->
            variant.outputs.all {
                outputFileName = "mymodulename-${variant.name}-${variant.versionName}-${getGitHash()}.apk"
            }
        }
        [...]
    }
    
    [...]
    

    I've found this somewhere on github or strackoverflow, don't remember. Maybe I'm doing it wrong.

    Last part of build with --stacktrace option:

    [...]
    :mymodulename:transformResourcesWithMergeJavaResForDebug
    :mymodulename:packageDebug
    :mymodulename:countDebugDexMethods FAILED
    
    FAILURE: Build failed with an exception.
    
    * What went wrong:
    A problem was found with the configuration of task ':mymodulename:countDebugDexMethods'.
    > File '/my/project/full/path/build/outputs/apk/debug/mymodulename-debug.apk' specified for property 'inputFile' does not exist.
    
    
    * Try:
    Run with --info or --debug option to get more log output.
    
    * Exception is:
    org.gradle.api.tasks.TaskValidationException: A problem was found with the configuration of task ':mymodulename:countDebugDexMethods'.
    	at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:55)
    	at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:88)
    	at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52)
    	at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
    	at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
    	at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    	at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
    	at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:248)
    	at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
    	at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
    	at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
    	at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
    	at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241)
    	at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230)
    	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:124)
    	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:80)
    	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:105)
    	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:99)
    	at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:625)
    	at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:580)
    	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:99)
    	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
    	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
    	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
    Caused by: org.gradle.api.InvalidUserDataException: File '/my/project/full/path/build/outputs/apk/debug/mymodulename-debug.apk' specified for property 'inputFile' does not exist.
    	at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:47)
    	... 23 more
    
    

    Thanks for your help (and thanks for your plugin!),

    Regards.

    opened by Gounlaf 13
  • [AGP 4.2+] java.lang.NoSuchMethodError: 'void com.android.build.api.dsl.ApplicationExtension.onVariantProperties(kotlin.jvm.functions.Function1)'

    [AGP 4.2+] java.lang.NoSuchMethodError: 'void com.android.build.api.dsl.ApplicationExtension.onVariantProperties(kotlin.jvm.functions.Function1)'

    Repro steps:

    git clone https://github.com/jaredsburrows/android-gif-example cd android-gif-example Change the AGP version to 4.2.+ (see versions https://maven.google.com/web/index.html?q=build#com.android.tools.build:gradle) gradlew assembleDebug -s

    Error:

    $ gradlew assembleDebug -s
    
    > Configure project :buildSrc
    WARNING: Unsupported Kotlin plugin version.
    The `embedded-kotlin` and `kotlin-dsl` plugins rely on features of Kotlin `1.4.20` that might work differently than in the requested version `1.4.21-2`.
    Configuration on demand is an incubating feature.
    
    FAILURE: Build failed with an exception.
    
    * Where:
    Build file '/Users/xxx/repo/android-gif-example/app/build.gradle.kts' line: 1
    
    * What went wrong:
    'void com.android.build.api.dsl.ApplicationExtension.onVariantProperties(kotlin.jvm.functions.Function1)'
    
    * Try:
    Run with --info or --debug option to get more log output. Run with --scan to get full insights.
    
    * Exception is:
    java.lang.NoSuchMethodError: 'void com.android.build.api.dsl.ApplicationExtension.onVariantProperties(kotlin.jvm.functions.Function1)'
            at com.getkeepsafe.dexcount.FourOneApplicator$apply$1.execute(Plugin.kt:420)
            at com.getkeepsafe.dexcount.FourOneApplicator$apply$1.execute(Plugin.kt:407)
            at org.gradle.configuration.internal.DefaultUserCodeApplicationContext$CurrentApplication$1.execute(DefaultUserCodeApplicationContext.java:100)
            at org.gradle.api.internal.DefaultCollectionCallbackActionDecorator$BuildOperationEmittingAction$1.run(DefaultCollectionCallbackActionDecorator.java:95)
            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.DefaultCollectionCallbackActionDecorator$BuildOperationEmittingAction.execute(DefaultCollectionCallbackActionDecorator.java:92)
            at org.gradle.api.internal.DefaultMutationGuard$2.execute(DefaultMutationGuard.java:44)
            at org.gradle.api.internal.collections.CollectionFilter$1.execute(CollectionFilter.java:59)
            at org.gradle.api.internal.DefaultDomainObjectCollection.configureEach(DefaultDomainObjectCollection.java:187)
            at com.getkeepsafe.dexcount.FourOneApplicator.apply(Plugin.kt:418)
            at com.getkeepsafe.dexcount.DexMethodCountPlugin.apply(Plugin.kt:142)
            at com.getkeepsafe.dexcount.DexMethodCountPlugin.apply(Plugin.kt:58)
            at org.gradle.api.internal.plugins.ImperativeOnlyPluginTarget.applyImperative(ImperativeOnlyPluginTarget.java:43)
            at org.gradle.api.internal.plugins.RuleBasedPluginTarget.applyImperative(RuleBasedPluginTarget.java:51)
            at org.gradle.api.internal.plugins.DefaultPluginManager.addPlugin(DefaultPluginManager.java:177)
            at org.gradle.api.internal.plugins.DefaultPluginManager.access$100(DefaultPluginManager.java:51)
            at org.gradle.api.internal.plugins.DefaultPluginManager$AddPluginBuildOperation.run(DefaultPluginManager.java:272)
            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.plugins.DefaultPluginManager.lambda$doApply$0(DefaultPluginManager.java:157)
            at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.apply(DefaultUserCodeApplicationContext.java:43)
            at org.gradle.api.internal.plugins.DefaultPluginManager.doApply(DefaultPluginManager.java:156)
            at org.gradle.api.internal.plugins.DefaultPluginManager.apply(DefaultPluginManager.java:136)
            at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.applyType(DefaultObjectConfigurationAction.java:160)
            at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.access$200(DefaultObjectConfigurationAction.java:42)
            at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction$3.run(DefaultObjectConfigurationAction.java:97)
            at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.execute(DefaultObjectConfigurationAction.java:183)
            at org.gradle.api.internal.project.AbstractPluginAware.apply(AbstractPluginAware.java:42)
            at org.gradle.kotlin.dsl.support.CompiledKotlinBuildScript.apply(CompiledKotlinBuildScript.kt)
            at Build_gradle.<init>(build.gradle.kts:1)
            at Program.execute(Unknown Source)
            at org.gradle.kotlin.dsl.execution.Interpreter$ProgramHost.eval(Interpreter.kt:501)
            at org.gradle.kotlin.dsl.execution.Interpreter$ProgramHost.evaluateSecondStageOf(Interpreter.kt:409)
            at Program.execute(Unknown Source)
            at org.gradle.kotlin.dsl.execution.Interpreter$ProgramHost.eval(Interpreter.kt:501)
            at org.gradle.kotlin.dsl.execution.Interpreter.eval(Interpreter.kt:178)
            at org.gradle.kotlin.dsl.provider.StandardKotlinScriptEvaluator.evaluate(KotlinScriptEvaluator.kt:124)
            at org.gradle.kotlin.dsl.provider.KotlinScriptPluginFactory$create$1.invoke(KotlinScriptPluginFactory.kt:51)
            at org.gradle.kotlin.dsl.provider.KotlinScriptPluginFactory$create$1.invoke(KotlinScriptPluginFactory.kt:36)
            at org.gradle.kotlin.dsl.provider.KotlinScriptPlugin.apply(KotlinScriptPlugin.kt:34)
            at org.gradle.configuration.BuildOperationScriptPlugin$1.run(BuildOperationScriptPlugin.java:65)
            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.configuration.BuildOperationScriptPlugin.lambda$apply$0(BuildOperationScriptPlugin.java:62)
            at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.apply(DefaultUserCodeApplicationContext.java:43)
            at org.gradle.configuration.BuildOperationScriptPlugin.apply(BuildOperationScriptPlugin.java:62)
            at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.lambda$applyToMutableState$0(DefaultProjectStateRegistry.java:250)
            at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.fromMutableState(DefaultProjectStateRegistry.java:267)
            at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.applyToMutableState(DefaultProjectStateRegistry.java:249)
            at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:42)
            at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:26)
            at org.gradle.configuration.project.ConfigureActionsProjectEvaluator.evaluate(ConfigureActionsProjectEvaluator.java:35)
            at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject.lambda$run$0(LifecycleProjectEvaluator.java:100)
            at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.lambda$applyToMutableState$0(DefaultProjectStateRegistry.java:250)
            at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.fromMutableState(DefaultProjectStateRegistry.java:267)
            at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.applyToMutableState(DefaultProjectStateRegistry.java:249)
            at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject.run(LifecycleProjectEvaluator.java:91)
            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.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:63)
            at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:721)
            at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:151)
            at org.gradle.execution.TaskPathProjectEvaluator.configure(TaskPathProjectEvaluator.java:41)
            at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:69)
            at org.gradle.execution.DefaultTaskSelector.getSelection(DefaultTaskSelector.java:97)
            at org.gradle.execution.DefaultTaskSelector.getSelection(DefaultTaskSelector.java:78)
            at org.gradle.execution.CompositeAwareTaskSelector.getSelection(CompositeAwareTaskSelector.java:93)
            at org.gradle.execution.commandline.CommandLineTaskParser.parseTasks(CommandLineTaskParser.java:43)
            at org.gradle.execution.TaskNameResolvingBuildConfigurationAction.configure(TaskNameResolvingBuildConfigurationAction.java:46)
            at org.gradle.execution.DefaultBuildConfigurationActionExecuter.configure(DefaultBuildConfigurationActionExecuter.java:55)
            at org.gradle.execution.DefaultBuildConfigurationActionExecuter.access$000(DefaultBuildConfigurationActionExecuter.java:26)
            at org.gradle.execution.DefaultBuildConfigurationActionExecuter$1.proceed(DefaultBuildConfigurationActionExecuter.java:63)
            at org.gradle.execution.DefaultTasksBuildExecutionAction.configure(DefaultTasksBuildExecutionAction.java:45)
            at org.gradle.execution.DefaultBuildConfigurationActionExecuter.configure(DefaultBuildConfigurationActionExecuter.java:55)
            at org.gradle.execution.DefaultBuildConfigurationActionExecuter.access$000(DefaultBuildConfigurationActionExecuter.java:26)
            at org.gradle.execution.DefaultBuildConfigurationActionExecuter$1.proceed(DefaultBuildConfigurationActionExecuter.java:63)
            at org.gradle.execution.ExcludedTaskFilteringBuildConfigurationAction.configure(ExcludedTaskFilteringBuildConfigurationAction.java:48)
            at org.gradle.execution.DefaultBuildConfigurationActionExecuter.configure(DefaultBuildConfigurationActionExecuter.java:55)
            at org.gradle.execution.DefaultBuildConfigurationActionExecuter.lambda$select$0(DefaultBuildConfigurationActionExecuter.java:42)
            at org.gradle.internal.Factories$1.create(Factories.java:31)
            at org.gradle.api.internal.project.DefaultProjectStateRegistry.withMutableStateOfAllProjects(DefaultProjectStateRegistry.java:141)
            at org.gradle.api.internal.project.DefaultProjectStateRegistry.withMutableStateOfAllProjects(DefaultProjectStateRegistry.java:128)
            at org.gradle.execution.DefaultBuildConfigurationActionExecuter.select(DefaultBuildConfigurationActionExecuter.java:40)
            at org.gradle.initialization.DefaultTaskExecutionPreparer.prepareForTaskExecution(DefaultTaskExecutionPreparer.java:38)
            at org.gradle.initialization.BuildOperationFiringTaskExecutionPreparer$CalculateTaskGraph.populateTaskGraph(BuildOperationFiringTaskExecutionPreparer.java:117)
            at org.gradle.initialization.BuildOperationFiringTaskExecutionPreparer$CalculateTaskGraph.run(BuildOperationFiringTaskExecutionPreparer.java:68)
            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.initialization.BuildOperationFiringTaskExecutionPreparer.prepareForTaskExecution(BuildOperationFiringTaskExecutionPreparer.java:56)
            at org.gradle.initialization.DefaultGradleLauncher.prepareTaskExecution(DefaultGradleLauncher.java:233)
            at org.gradle.initialization.DefaultGradleLauncher.doClassicBuildStages(DefaultGradleLauncher.java:167)
            at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:148)
            at org.gradle.initialization.DefaultGradleLauncher.executeTasks(DefaultGradleLauncher.java:124)
            at org.gradle.internal.invocation.GradleBuildController$1.create(GradleBuildController.java:72)
            at org.gradle.internal.invocation.GradleBuildController$1.create(GradleBuildController.java:67)
            at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:213)
            at org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBuildController.java:67)
            at org.gradle.internal.invocation.GradleBuildController.run(GradleBuildController.java:56)
            at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:31)
            at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
            at org.gradle.launcher.exec.BuildOutcomeReportingBuildActionRunner.run(BuildOutcomeReportingBuildActionRunner.java:63)
            at org.gradle.tooling.internal.provider.ValidatingBuildActionRunner.run(ValidatingBuildActionRunner.java:32)
            at org.gradle.tooling.internal.provider.FileSystemWatchingBuildActionRunner.run(FileSystemWatchingBuildActionRunner.java:77)
            at org.gradle.launcher.exec.BuildCompletionNotifyingBuildActionRunner.run(BuildCompletionNotifyingBuildActionRunner.java:41)
            at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:49)
            at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:44)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
            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.call(DefaultBuildOperationRunner.java:62)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:76)
            at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:76)
            at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:44)
            at org.gradle.launcher.exec.InProcessBuildActionExecuter.lambda$execute$0(InProcessBuildActionExecuter.java:54)
            at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:86)
            at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:53)
            at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:29)
            at org.gradle.launcher.exec.BuildTreeScopeLifecycleBuildActionExecuter.lambda$execute$0(BuildTreeScopeLifecycleBuildActionExecuter.java:33)
            at org.gradle.internal.buildtree.BuildTreeState.run(BuildTreeState.java:49)
            at org.gradle.launcher.exec.BuildTreeScopeLifecycleBuildActionExecuter.execute(BuildTreeScopeLifecycleBuildActionExecuter.java:32)
            at org.gradle.launcher.exec.BuildTreeScopeLifecycleBuildActionExecuter.execute(BuildTreeScopeLifecycleBuildActionExecuter.java:27)
            at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:104)
            at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:55)
            at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:64)
            at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:37)
            at org.gradle.tooling.internal.provider.SessionScopeLifecycleBuildActionExecuter.lambda$execute$0(SessionScopeLifecycleBuildActionExecuter.java:54)
            at org.gradle.internal.session.BuildSessionState.run(BuildSessionState.java:67)
            at org.gradle.tooling.internal.provider.SessionScopeLifecycleBuildActionExecuter.execute(SessionScopeLifecycleBuildActionExecuter.java:50)
            at org.gradle.tooling.internal.provider.SessionScopeLifecycleBuildActionExecuter.execute(SessionScopeLifecycleBuildActionExecuter.java:36)
            at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:36)
            at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:25)
            at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:59)
            at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:31)
            at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:55)
            at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:41)
            at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:47)
            at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:31)
            at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:65)
            at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
            at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:39)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
            at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:29)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
            at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:35)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
            at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:78)
            at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:75)
            at org.gradle.util.Swapper.swap(Swapper.java:38)
            at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:75)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
            at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
            at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:63)
            at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
            at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:84)
            at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
            at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:52)
            at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297)
            at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
            at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
            at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
    
    
    * Get more help at https://help.gradle.org
    
    BUILD FAILED in 1s
    
    opened by jaredsburrows 12
  • Renamed APK no longer found after update from 0.8.6 to 1.0.0

    Renamed APK no longer found after update from 0.8.6 to 1.0.0

    I've just updated the plugin from 0.8.6 to 1.0.0. Since then, the build fails with the following message:

    * What went wrong:
    A problem was found with the configuration of task ':<app>:countNormalDebugDexMethods'.
    > File '/Users/<user>/git/<app>-android/<app>/build/outputs/apk/normal/debug/<app>-normal-debug.apk' specified for property 'inputFileProperty' does not exist.
    

    We use the following construct in our Gradle file to rename the APK:

    android {
        applicationVariants.all { variant ->
            variant.outputs.all {
                outputFileName = "<app>-${variant.flavorName}-${variant.buildType.name}-${variant.versionName}.apk"
            }
        }
    }
    

    This works fine in 0.8.6, but seems to no longer be compatible with 1.0.0. I've gone back to 0.8.6 and builds work as expected again.

    opened by markuspfeiffer 12
  • [Feature Request] Fail build on

    [Feature Request] Fail build on "maxMethodCount"

    Question:

    Can we add an integer such as "maxMethodCount" to the https://github.com/KeepSafe/dexcount-gradle-plugin/blob/master/src/main/groovy/com/getkeepsafe/dexcount/DexMethodCountExtension.groovy in order to fail builds that go over a certain number of methods?

    Example:

    dexcount {
      maxMethodCount = 580000
    }
    

    This will help developers that are developing on their local machines not only make better decisions on the code that they write but the libraries they use.

    opened by jaredsburrows 12
  • Consider dropping support for AGP < 4.1

    Consider dropping support for AGP < 4.1

    This would let us clean up some old code, and keep our integration test suite lighter.

    Actually, this may be two separate issues - we could just keep the old code around and stop providing "support", removing those versions from the integration test matrix. Not sure which option is friendlier to our users; folks stuck on those versions probably don't need to upgrade dexcount versions.

    Something to ponder.

    opened by benjamin-bader 0
Releases(3.1.0)
  • 3.1.0(Jan 25, 2022)

  • 3.0.1(Sep 20, 2021)

  • 3.0.0(Aug 9, 2021)

    • BREAKING Port plugin from Kotlin to Java for better Gradle compatibility; public extension API changed. (#379)
    • Add support for AGP 7.0.0
    • Preliminary support for AGP 7.1.0 alphas

    The dexcount gradle configuration block now uses Gradle properties exclusively, as opposed to getFoo and setFoo functions. That means that your Groovy configuration code needs to change a bit:

    dexcount {
      // Instead of this,
      runOnEachPackage true
    
      // Do this
      runOnEachPackage = true
    }
    
    Source code(tar.gz)
    Source code(zip)
  • 3.0.0-RC02(Jul 30, 2021)

    • BREAKING Port plugin from Kotlin to Java for better Gradle compatibility; public extension API changed. (#379)
    • Add support for AGP 7.0.0
    • Preliminary support for AGP 7.1.0 alphas
    Source code(tar.gz)
    Source code(zip)
  • 2.1.0-RC01(May 11, 2021)

  • 2.0.0(Oct 15, 2020)

    • BREAKING Raise minimum Gradle version to 6.0
    • BREAKING Raise minimum AGP version to 3.4.0
    • BREAKING Raise minimum JDK version to 1.8
    • BREAKING On AGP 4.1.0 and above, Dexcount tasks do not run automatically during a build and must be manually executed.
    • BREAKING Dexcount output layout on disk has changed; all output files now go in a directory named build/outputs/dexcount/$variant/, where $variant is the name of the variant whose output was analyzed.
    • Added support for AGP 4.1.0 (#305)
    • Added support for counting AAB files, AGP 4.1.0+ only (#309)
    • Fix: Crash in Android Studio 4.0.1 (#353)
    • Fix: JvmStatic methods on Kotlin interface companion objects, in AARs (#311)
    • Fix: Properly publish Gradle Plugin DSL marker artifact (#333)
    Source code(tar.gz)
    Source code(zip)
  • 2.0.0-RC1(Jul 31, 2020)

    A release candidate for 2.0.0; final release is blocked pending the final release of AGP 4.1.0.

    • BREAKING Raise minimum Gradle version to 6.0

    • BREAKING Raise minimum AGP version to 3.4.0

    • BREAKING Raise minimum JDK version to 1.8

    • BREAKING On AGP 4.1.0 and above, Dexcount tasks do not run automatically during a build and must be manually executed.

    • BREAKING Dexcount output layout on disk has changed; all output files now go in a directory named build/outputs/dexcount/$variant/, where $variant is the name of the variant whose output was analyzed.

    • Added support for AGP 4.1.0 (#305)

    • Added support for counting AAB files, AGP 4.1.0+ only (#309)

    • Fix: JvmStatic methods on Kotlin interface companion objects, in AARs (#311)

    • Fix: Properly publish Gradle Plugin DSL marker artifact (#333)

    Source code(tar.gz)
    Source code(zip)
  • 1.0.4(Jul 16, 2020)

    NOTE:

    This is a super janky release. IT IS ONLY AVAILABLE ON THE GRADLE PLUGIN PORTAL. tl;dr Gradle's built-in maven publishing system is terrible and since dexcount 2.0.0 is coming soon, it's not worth the trouble to get it working for this minor hotfix.

    The release itself contains only a hotfix to enable counting AARs using Java8+ features like static methods on interfaces.

    Source code(tar.gz)
    Source code(zip)
  • 0.8.5(Jan 2, 2019)

  • 0.8.4(Oct 3, 2018)

  • v0.8.3(Jun 20, 2018)

  • 0.8.2(Nov 30, 2017)

  • 0.7.1(Jun 22, 2017)

    • Fix: counting variants whose outputs have been re-named (issue #181)
    • Fix: remove uncapitalize(), which doesn't exist in Groovy bundled with Gradle 3.5 and below (issues #179 and #185)
    • Add: add class counts to stdout and summary files (issue #183)
    Source code(tar.gz)
    Source code(zip)
  • 0.7.0(Jun 13, 2017)

    Adds support for Android Studio 3.0.

    BREAKING CHANGES:

    • dexcount tasks now depend on package tasks, not assemble, due to a change in the variant-output API.
    • Instant Run is no longer supported.
    • runOnEachAssemble is deprecated and will be removed in a future version; use runOnEachPackage.

    Details changes:

    • Deprecate runOnEachAssemble configuration property
    • Make Android Gradle plugin a compileOnly dependency (#176)
    • Disable Instant Run support; incompatible with the new build tools
    • Add support for Android Gradle Plugin 3.0.0
    • Add class counts (#164)
    • Fix zip-file-handle leaks (#160)
    Source code(tar.gz)
    Source code(zip)
Owner
Keepsafe
Empowering the average person’s digital privacy we’re innovating on existing privacy, crypto and security technology. Over 50 million users.
Keepsafe
Gradle Replace In Place (GRIP): a gradle plugin to update your documentation or any file with a simple gradle task

GRIP (Gradle Replace In-Place) A gradle tool to update some values in your (documentation) files by running a task. (inspired by Knit) Directives Inse

Grégory Lureau 2 Oct 18, 2022
gradle-android-scala-plugin adds scala language support to official gradle android plugin

gradle-android-scala-plugin gradle-android-scala-plugin adds scala language support to official gradle android plugin. See also sample projects at htt

saturday06 345 Dec 10, 2022
Ownership-gradle-plugin - Gradle code ownership verification plugin

Gradle code ownership verification plugin A gradle plugin that will verify owner

null 4 Dec 15, 2022
Helper to upload Gradle Android Artifacts, Gradle Java Artifacts and Gradle Kotlin Artifacts to Maven repositories (JCenter, Maven Central, Corporate staging/snapshot servers and local Maven repositories).

GradleMavenPush Helper to upload Gradle Android Artifacts, Gradle Java Artifacts and Gradle Kotlin Artifacts to Maven repositories (JCenter, Maven Cen

 Vorlonsoft LLC 21 Oct 3, 2022
CKlib is a gradle plugin that will build and package C/C++/Objective-C code for Kotlin/Native.

C Klib CKlib is a gradle plugin that will build and package C/C++/Objective-C code for Kotlin/Native. The Problem When you want to access C-etc code f

Touchlab 73 Nov 8, 2022
바코드 네트워크에서 제작 및 사용하는 Gradle build plugin 모음입니다. GradlePluginPortal 에 publish 되어 있습니다.

BarcodeGradlePlugins GradlePluginPortal 에 publish 되어 있는 바코드 네트워크의 빌드 플러그인들은 barcodeTasks 스코프 안에서 공통된 인자를 사용하여 실행될 수 있습니다. barcodeTasks { // 바코드 네트워크

Barcode Network 5 Nov 28, 2022
Audio notifications for your Gradle build status

Let me serenade you ?? View Releases and Changelogs ?? Currently only functional on Mac OSX ?? Serenador is a Gradle plugin that utilizes text-to-spee

Thanos Psaridis 7 Jun 27, 2022
BuildPlots-Plugin - PaperMC-Plugin for build contests written in Kotlin.

BuildPlotsPlugin PaperMC-Plugin for build contests. This is my first time using Kotlin and the first plugin I've written after a long time. It is stil

Lukas Heinzl 0 Jan 1, 2022
A Gradle plugin for providing your secrets to your Android project.

Secrets Gradle Plugin for Android A Gradle plugin for providing your secrets securely to your Android project. This Gradle plugin reads secrets from a

Google 560 Jan 8, 2023
An Android Studio / IntelliJ plug-in help you upload your apk or listing to Google Play.

DroidLane An Android Studio / IntelliJ plug-in help you upload your apk or listing to Google Play. Installation Open Android Studio or IntelliJ IDEA O

Jintin 24 Jul 26, 2021
Gradle plugin which downloads and manages your Android SDK.

DEPRECATED This plugin is deprecated and is no longer being developed. Tools and dependencies are automatically downloaded using version 2.2.0 of the

Jake Wharton 1.4k Dec 29, 2022
Add a different ribbon to each of your Android app variants using this gradle plugin. Of course, configure it as you will

Easylauncher gradle plugin for Android Modify the launcher icon of each of your app-variants using simple gradle rules. Add ribbons of any color, over

Mikel 960 Dec 18, 2022
Gradle plugin which validates the licenses of your dependency graph match what you expect

Licensee ?? ?? A Gradle plugin which validates the licenses of your dependency graph match what you expect, or it fails your build! Jump to: Introduct

Cash App 506 Jan 8, 2023
Gradle plugin which helps you analyze the size of your Android apps.

Ruler Ruler is a Gradle plugin which helps you analyze the size of your Android apps. Motivation App size is an important metric which directly correl

Spotify 913 Dec 28, 2022
A powerful Gradle Plugin to help you demonstrate your android app

English | 简体中文 sample-gradle-plugin ?? A powerful Gradle Plugin to help you demonstrate your android app. We often write demo applications that contai

Yoo Zhou 12 Nov 5, 2022
This plugin helps tp build GraphQL applications in Java using the DGS framework

dgs-intellij-plugin This plugin helps tp build GraphQL applications in Java using the DGS framework. The DGS Framework is open sourced by Netflix and

Netflix, Inc. 16 Nov 3, 2022
K6-intellij-plugin - IntelliJ-based Plugin to run k6 tests locally or in the k6 Cloud from your IntelliJ IDE

IntelliJ-based Plugin to run k6 tests locally or in the k6 Cloud from your Intel

Mikhail Bolotov 8 Jan 2, 2023
A Gradle plugin to support the Groovy language for building Android apps

Groovy language support for Android Deprecated: This plugin has been deprecated in favor of Kotlin which has the full support of JetBrains and Google.

Groovy programming language 853 Dec 21, 2022
A Gradle Plugin that removes unused resources in Android projects.

#Lint Cleaner Plugin Removes unused resources reported by Android lint including strings, colors and dimensions. Depracated As of Android Studio 2.0+

Marco RS 705 Nov 25, 2022