2015-12-28 10 views
6

私は65kの制限を避けるためにMultidexを有効にするアプリケーションを開発しています。 Jarタイプ(iPay Jar SDKなど)で外部ライブラリを追加したい私はGradleを同期して成功しましたが、プロジェクトを実行できませんでした。デバッグMulti Dexコンポーネントを縮小します。 Can not Read dir/allclasses.jar

私は外部のライブラリのこのタイプ(すなわちiPayジャーを追加する前に

Error:Execution failed for task ':app:shrinkDebugMultiDexComponents'. 

java.io.IOException: Can't read [/[dir]/app/build/intermediates/multi-dex/debug/allclasses.jar] (Can't process class [com/ipay/IpayAcitivity.class] (Unknown verification type [14] in stack map frame))

の下のように表示されるエラーメッセージは、これは私のGradleコード

apply plugin: 'com.android.application' 
apply plugin: 'android-apt' 
def AAVersion = '3.2' 

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4' 
    } 
} 

repositories { 
    mavenCentral() 
    mavenLocal() 
} 

apt { 
    arguments { 
     androidManifestFile variant.outputs[0].processResources.manifestFile 
     resourcePackageName '[My Package]' 
    } 
} 

dependencies { 
    apt "org.androidannotations:androidannotations:$AAVersion" 
    compile "org.androidannotations:androidannotations-api:$AAVersion" 

    compile fileTree(dir: 'libs', include: ['*.jar']) 
    //Libs folder contains: org.apache.http.legacy.jar 
    //and ipay88_androidv7.jar 

    compile 'com.loopj.android:android-async-http:1.4.5' 
    compile 'com.github.rey5137:material:1.2.1' 
    compile 'com.jpardogo.materialtabstrip:library:1.0.9' 
    compile 'com.android.support:appcompat-v7:23.0.1' 
    compile 'com.android.support:recyclerview-v7:23.0.1' 

    compile 'com.google.android.gms:play-services:8.1.0' 
    compile 'com.facebook.android:facebook-android-sdk:4.7.0' 
    compile 'com.android.support:multidex:1.0.1' 
    compile 'com.github.chrisbanes.actionbarpulltorefresh:library:+' 
} 

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.1" 

    useLibrary 'org.apache.http.legacy' 

    defaultConfig { 
     applicationId "[My Application Id]" 
     minSdkVersion 16 
     targetSdkVersion 23 
     versionCode 1 
     versionName "1.0" 
     multiDexEnabled = true 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 

    sourceSets { 
     main { 
      manifest.srcFile 'src/main/AndroidManifest.xml' 
      java.srcDirs = ['src/main/java', 'build/source/apt/debug'] 
      resources.srcDirs = ['src/main/res'] 
      res.srcDirs = ['src/main/res'] 
      assets.srcDirs = ['src/main/assets'] 
     } 

     beta { 
      resources.srcDirs = ['app/src/beta/res'] 
      res.srcDirs = ['app/src/beta/res'] 
     } 
    } 
    signingConfigs { 
     release { 
      ... 
     } 
    } 
} 

ですSDK)、アプリケーションが正常に実行されていました。しかし、私はiPay Jar SDK(2番目のJarライブラリ)を追加した後に問題が発生しました。

詳細については、私はすでにこのガイドに従っていましたhttps://developer.android.com/tools/building/multidex.html しかし、私のプロジェクトはうまくいきませんでした。

このエラーを修正するにはどうすればよいですか?

+0

を再生見つけることができますcompile 'com.android.support:multidex:1.0.1'

これは明らかにあります削除iPay SDKの問題、特に 'com/ipay/IpayAcitivity.class'の問題です。 SDKは公開されていないため、実際には自分で確認することはできません。あなたはiPayのサポートに連絡しようとしましたか? –

+0

@AlexLipov はい、私はIPayのサポートチームに連絡しています。しかし、彼らは答えを与えていない。他の新しいプロジェクト(サードパーティライブラリのないマルチプレックスなし)でSDKを実装しようとすると、プロジェクトはエラーなく実行できます。 – Izzuddiin

+0

この例外はProguard(app:shrinkDebugMultiDexComponentsタスクは内部的にProguardを呼び出します。私の答え[ここ](http://stackoverflow.com/a/27207969/1233652)を参照してください)。したがって、2番目のプロジェクトで 'minifyEnabled'をtrueに設定すると、おそらく同じエラーが発生します。 –

答えて

0

これを試してみてください:

public class MyApplication extends MultiDexApplication 
{ 
    @Override 
    protected void attachBaseContext(Context base) 
    { 
     super.attachBaseContext(base); 
    } 

    @Override 
    public void onCreate() 
    { 
     MultiDex.install(getTargetContext()); 
     super.onCreate(); 
    } 

} 
+0

私はそのクラスを実装しました。しかし、まだ動作していません。: '( – Izzuddiin

+0

はその後、これを試してください。 アンドロイド{ buildTypes { リリース{ proguardFiles getDefaultProguardFile(' ProGuardの-android.txtを ')、 '' proguard-rules.pro が真minifyEnabled // shrinkResources真の行を追加します/ /この行を追加してください } } } – oalpayli

+0

あなたの答えをありがとうございますが、まだ動作していません。サー。結果同じエラーメッセージ – Izzuddiin

0

あなたのライブラリがMultidexに対応していないようです。したがって、ライブラリを最新のバージョンに更新してください(アップデートが利用可能な場合)。または、アプリケーションで必要なGoogle PlayサービスAPIのみを使用してMultidexを削除してください。あなたはこの

compile 'com.google.android.gms:play-services-ads:8.1.0' (library only for ads) 

ようなあなたのアプリで使う何かを

compile 'com.google.android.gms:play-services:8.1.0' (the whole library) 

これを交換し、あなたはすべてGoogleがここにサービスのAPI https://developers.google.com/android/guides/setup#add_google_play_services_to_your_project

関連する問題