Android dexinfo plugin
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