Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Dagger 2 and Multidex application

I'm Using Dagger 2.11 with Android Injection support. After adding a big amount of dependencies i was forced to enable MultiDex.

The support for Multidex was added, on Android 4.4 works as expected, on Android >=6 works great.

The problem appears only on Android 5 and 5.1 i get the following error:

Caused by: java.lang.ClassNotFoundException: Didn't find class "dagger.internal.Preconditions" on path: DexPathList[[zip file...

I tryed to add the "dagger.internal.Preconditions" to the file i use in multiDexKeepProguard, with no luck.

The build.gradle file

buildscript {
    repositories {
        maven { url 'https://maven.fabric.io/public' }
    }

    dependencies {
        classpath 'io.fabric.tools:gradle:1.+'
    }
}

repositories {
    maven { url 'https://maven.fabric.io/public' }
}
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
apply plugin: 'com.tmiyamon.config'

apply plugin: 'me.tatarka.retrolambda'
apply plugin: 'com.tmiyamon.config'
apply plugin: 'realm-android'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.3"
    defaultConfig {
        applicationId "appId"
        minSdkVersion 19
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        vectorDrawables.useSupportLibrary = true
        multiDexEnabled true

    }
    dexOptions {
        preDexLibraries false
        javaMaxHeapSize "4g"
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    signingConfigs {
        debug {
            storeFile file("path")
            keyAlias "alias"
            storePassword "password"
            keyPassword "password"
        }

        release {
            storeFile file("path")
            keyAlias "alias"
            storePassword "password"
            keyPassword "password"
        }
    }

    buildTypes {
        debug {
            signingConfig signingConfigs.debug
            minifyEnabled false
            zipAlignEnabled false
            testCoverageEnabled false
            multiDexKeepProguard file('multidex-config.pro')
            proguardFiles fileTree(dir: 'proguard').asList().toArray()
        }
        release {
            minifyEnabled true
            multiDexKeepProguard file('multidex-config.pro')
            proguardFiles fileTree(dir: 'proguard').asList().toArray()
            signingConfig signingConfigs.release
        }
    }

    productFlavors {
        local {
            applicationIdSuffix ".local"
            versionNameSuffix " Local " + calculateVersionNameSuffix()
        }

        staging {
            applicationIdSuffix ".staging"
            versionNameSuffix " Staging " + calculateVersionNameSuffix()
        }

        production {

        }
    }
}
dependencies {
long list of dependencies
}

and the Manifest file:

<manifest package="package"
          xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools">

<<   permissions >>
<!--${applicationId}-->
<application
    android:name=".application.MyApplication"
    android:allowBackup="false"
    android:icon="@mipmap/ic_launcher"
    android:label="${launcherAppName}"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme"
    tools:replace="android:label">
    <activity
        android:name=".ui.startup.StartupActivity"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>

rest of the Manifest....
like image 911
Eddy Avatar asked Aug 22 '17 14:08

Eddy


1 Answers

Well, in the end, I found a solution.

I've added also the

multiDexKeepFile file('multidex-config.txt')

into the buildTypes part of the buiild.gradle file.

Now it looks like below:

 release {
        minifyEnabled true
        zipAlignEnabled true
        multiDexKeepFile file('multidex-config.txt')
        multiDexKeepProguard file('multidex-config.pro')
        proguardFiles fileTree(dir: 'proguard').asList().toArray()
        signingConfig signingConfigs.release
        debuggable false
    }

and the multidex-config.txt has the following:

dagger/internal/Preconditions.class
like image 58
Eddy Avatar answered Sep 18 '22 00:09

Eddy