我正在使用Android Studio,我的项目有5个模块。

运行签名混淆apk时,出现以下错误
无法实例化应用程序com ..... FTApplication:java.lang.ClassNotFoundException:在路径:DexPathList [[zip文件“ /data/app/app.apk”]上找不到类“ com .... FTApplication” 。

这是我的配置

DexGuard6.1.03
com.android.tools.build:gradle:1.0.0-依赖关系
应用程序从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>


顶级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()
    }
}


模块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')
}

最佳答案

感谢@John的评论。

这是带有Dexguard的MultiDex解决方案:

1)正确应用默认的MultiDex规则。有关正确的选项,请参见my another post

2)修改build.gradledexguard-project.txt文件。

build.gradle:仅对调试版本将multiDexEnabled设置为true。 Dexguard将在发布版本中处理它。

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:不要忘记在此处添加multidex选项!

-multidex

关于android - 运行签名的APK时出现Dexguard错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32242233/

10-11 22:22