2015-08-27 30 views
0

我正在使用Android Studio,我的項目有5個模塊。運行簽名apk時出現Dexguard錯誤

運行簽名混淆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.But仍然無法解決問題。我必須使用multidex支持,因爲我正在使用某些庫,並且得到了方法索引,例外 –

回答

3

感謝@約翰的評論。

這裏是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