我正在使用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.gradle
和dexguard-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/