/gradle-dexinfo-plugin

Primary LanguageJavaApache License 2.0Apache-2.0

Android dexinfo plugin

Download Android Arsenal

This Gradle plugin adds a new task to print out the dex method count of your Android projects without having to install separate tools.

Based on https://github.com/mihaip/dex-method-counts

Usage

Modify your build.gradle file to add a dependency to the plugin.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.mutualmobile.gradle.plugins:dexinfo:0.2.0'
    }
}

Apply the plugin after the 'com.android.application' or 'com.android.library' plugins

apply plugin: 'com.android.application'
apply plugin: 'com.mutualmobile.gradle.plugins.dexinfo'

Build your apk

> ./gradlew -q assembleDebug

Run the dexinfo task

> ./gradlew -q dexinfoDebug

Sample output

<root>: 182 
butterknife: 182 
  ButterKnife: 48 
     Action: 1 
     Finder: 22 
        1: 3 
        2: 3 
        3: 3 
     Finder[]: 1 
     Injector: 2 
  ImmutableList: 4 
  InjectView: 1 
  InjectViews: 1 
  OnCheckedChanged: 1 
  OnClick: 1 
  internal: 99 
     Binding: 1 
     ButterKnifeProcessor: 22 
     CollectionBinding: 12 
        Kind: 5 
        Kind[]: 1 
     DebouncingOnClickListener: 7 
        1: 2 
  ...

Overall method count: 182 
  
BUILD SUCCESSFUL

Additional options

Add the following section to your build.gradle file to specify options

dexinfo {
    maxDepth 2
    packageFilter "org.xmlpull"
}

Where:

includeClasses (boolean)
    Treat classes as packages and provide per-class method counts. One use-case is for protocol buffers where all
    generated code in a package ends up in a single class

maxDepth (int)
    Limit how far into package paths (or inner classes, with includeClasses) counts should be reported for.

packageFilter (String)
    Only consider methods whose fullly qualified name starts with this prefix.

filter (String: all|defined_only|referenced_only)
    Whether to count all methods (the default), just those defined in the input file, or just those that are
    referenced in it. Note that referenced methods count against the 64K method limit too.

Debugging

Build and install the plugin to your local maven repository

./gradlew build install

Add mavenLocal() to your Android projects build.gradle

buildscript {
    repositories {
        mavenLocal()
        jcenter()
    }
}

Export debug options to GRADLE_OPTS

export GRADLE_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005

Run gradle in your Android project

./gradlew dexinfoDebug

Create a "Remote" run configuration in IntelliJ and connect to the gradle process