2015-08-27 5 views
0

Я использую Android Studio, мой проект имеет 5 модулей.Ошибка Dexguard во время работы подписана apk

При запуске подписанного запутанного apk я получаю следующую ошибку Невозможно создать экземпляр приложения com ..... FTApplication: java.lang.ClassNotFoundException: Не нашел класс «com .... FTApplication» на пути: DexPathList [[zip-файл "/data/app/app.apk"].

Это моя конфигурация

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:[email protected]' 
    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') 
} 
+0

опубликуйте файл 'manifest.xml' и' gradle.build' –

+0

После декомпиляции я нашел файл класса приложения. –

+0

Проблема возникла из-за MultidexApplication. Но все равно я не мог решить проблему. Мне нужно использовать поддержку multidex, так как я использую некоторые библиотеки и получаю индекс метода из связанного исключения –

ответ

3

Благодаря @John для комментария.

Вот решение для MultiDex с Dexguard:

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 
Смежные вопросы