I implemented multidexing after getting 65k method limit. After implementing multidexing I am able to run application. But now i am getting the error NoClasDefFoundError for one of the class I used from external jar.
Here is my gradle file--
dependencies {
compile project(':pull-to-refresh')
compile fileTree(dir: 'libs', include: '*.jar')
compile project(':gson-2.2.2')
compile files('libs/android-support-multidex.jar')
compile 'com.android.support:appcompat-v7:21.0.0'
compile 'com.google.android.gms:play-services:6.1.71'
compile 'com.android.support:support-v4:21.0.0'
}
android {
compileSdkVersion 21
buildToolsVersion '21.1.1'
packagingOptions {
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
// Move the tests to tests/java, tests/res, etc...
instrumentTest.setRoot('tests')
// Move the build types to build-types/<type>
// For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
// This moves them out of them default location under src/<type>/... which would
// conflict with src/ being used by the main source set.
// Adding new build types or product flavors should be accompanied
// by a similar customization.
debug.setRoot('build-types/debug')
release.setRoot('build-types/release')
}
dexOptions {
preDexLibraries = false
}
afterEvaluate {
tasks.matching {
it.name.startsWith('dex')
}.each { dx ->
if (dx.additionalParameters == null) {
dx.additionalParameters = ['--multi-dex']
} else {
dx.additionalParameters += '--multi-dex'`enter code here`
}
}
}
}
This happened in one of our Android projects that is multi-dex enabled and that was already properly set up (it calls MultiDex.install after super.attachBaseContext(...) as it is supposed to).
It was tracked down to a private static inner class that we were using to implement the initialization-on-demand holder idiom design pattern (lazy loaded singleton). Apparently that class was not being included in the primary dex file which resulted in the NoClassDefFoundError.
We ended up just making the singleton class an enum.