Raji A C
Raji A C

Reputation: 2351

Dexguard error while running signed apk

I am using Android Studio,my project has 5 modules.

While running signed obfuscated apk I am getting the following error Unable to instantiate application com.....FTApplication: java.lang.ClassNotFoundException: Didn't find class "com....FTApplication" on path: DexPathList[[zip file "/data/app/app.apk"].

This is my configuration

DexGuard6.1.03 com.android.tools.build:gradle:1.0.0 - dependency Application extends from MultiDexApplication.

Manifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.project.package">
    <uses-permission android:name="android.permission.WRITE_CONTACTS" />

    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

    <application
        android:name="com.project.package.FTApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />



        <activity
            android:name=".ui.activity.FTSplashActivity"
            android:label="@string/app_name"
            android:noHistory="true"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>


    </application>

</manifest>

top-level build.gradle

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

module build.grade

apply plugin: 'com.android.application'
apply plugin: 'dexguard'

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

buildscript {
    repositories {
        mavenCentral()
        flatDir { dirs '../../DexGuard6.1.03/lib' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.0'
        classpath ':dexguard:'
    }
}

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.project.package"
        minSdkVersion 17
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
        multiDexEnabled = true
    }
    buildTypes {

        debug {
            proguardFile getDefaultDexGuardFile('dexguard-debug.pro')
            proguardFile 'dexguard-project.txt'
        }
        release {
            proguardFile getDefaultDexGuardFile('dexguard-release.pro')
            proguardFile 'dexguard-project.txt'
        }

//        release {
//            minifyEnabled false
//            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
//        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile project(':materialdialogs')
    compile project(':AndroidKit')
    compile 'com.joanzapata.pdfview:android-pdfview:1.0.4@aar'
    compile files('libs/disklrucache-2.0.1.jar')
    compile 'com.android.support:multidex:1.0.1'
    compile 'com.jakewharton:disklrucache:2.0.2'
    compile files('libs/commons-httpclient-3.0.jar')
    compile files('libs/httpclientandroidlib-1.2.1.jar')
}

Upvotes: 2

Views: 7478

Answers (1)

Devrim
Devrim

Reputation: 15533

Thanks to @John for the comment.

Here is the solution for MultiDex with Dexguard:

1) Apply default MultiDex rules correctly. See my another post for correct options.

2) Modify build.gradle and dexguard-project.txt files.

build.gradle : Set multiDexEnabled true only for debug builds. Dexguard is going to handle it at release build.

defaultConfig {
    applicationId "com.sample"
    minSdkVersion 14
    targetSdkVersion 22
    versionCode 1
    versionName "1.0"

    // NOTE 1 : Remove multiDexEnabled setting from here 
}

buildTypes {
    debug {
        // NOTE 2 : By default, debug builds don't need Dexguard. So set multiDexEnabled here.

        multiDexEnabled true
    }
    release {
        // NOTE 3 : Multidex is handled at dexguard-project.txt. So remove multiDexEnabled setting if exists.

        proguardFiles getDefaultDexGuardFile('dexguard-release.pro'),'dexguard-project.txt'
    }
}

dexguard-project.txt : Do not forget to add multidex option here!

-multidex 

Upvotes: 6

Related Questions