2015-12-28 18 views
6

Tôi đang phát triển một ứng dụng cho phép Multidex để tránh giới hạn 65k. Tôi muốn thêm một thư viện bên ngoài trong loại Jar (ví dụ: iPay Jar SDK). Tôi đã đồng bộ hóa Gradle và thành công nhưng tôi không thể chạy dự án.Shrink Debug Multi Dex Component; Không thể đọc dir/allclasses.jar

Các lỗi được đưa ra như dưới đây

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))

Đây là Mã Gradle tôi

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 { 
      ... 
     } 
    } 
} 

Trước khi tôi thêm loại này của thư viện bên ngoài (ví dụ iPay Jar SDK), ứng dụng đang chạy thành công. Nhưng vấn đề phát sinh sau khi tôi đã thêm iPay Jar SDK (thư viện Jar thứ hai).

Để biết thêm thông tin, tôi đã làm theo hướng dẫn này trên https://developer.android.com/tools/building/multidex.html Nhưng nó không hoạt động dự án của tôi.

Đề xuất của bạn để khắc phục lỗi này là gì?

+0

Rõ ràng có một vấn đề với iPay SDK, và cụ thể hơn với 'com/ipay/IpayAcitivity.class'. Vì SDK không có sẵn công khai, tôi không thể tự mình kiểm tra. Bạn đã thử liên hệ với bộ phận hỗ trợ của iPay chưa? –

+0

@AlexLipov Có, tôi đã liên hệ với nhóm hỗ trợ của IPay. Nhưng, họ đã không đưa ra câu trả lời. Khi tôi cố triển khai SDK trên một dự án mới khác (không có multidex, không có lib của bên thứ 3), dự án có thể chạy mà không có lỗi. – Izzuddiin

+0

Ngoại lệ này xuất phát từ Proguard (ứng dụng: shrinkDebugMultiDexComponents nhiệm vụ nội bộ gọi Proguard - xem câu trả lời của tôi [ở đây] (http://stackoverflow.com/a/27207969/1233652)). Do đó, nếu bạn đặt 'minifyEnabled' thành true trong dự án thứ hai, thì hầu hết có thể bạn sẽ có cùng một lỗi. –

Trả lời

0

Hãy thử điều này:

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

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

} 
+0

Tôi đã triển khai lớp đó. Nhưng vẫn không hoạt động.: '( – Izzuddiin

+0

thử này sau đó; android { buildTypes { phát hành { proguardFiles getDefaultProguardFile (' Proguard-android.txt '), 'proguard-rules.pro' minifyEnabled đúng // Thêm dòng này shrinkResources đúng// Thêm dòng này } } } – oalpayli

+0

Cảm ơn câu trả lời của bạn, nhưng nó vẫn không hoạt động, thưa bạn. – Izzuddiin

0

Dường như thư viện của bạn không tương thích với Multidex. Vì vậy, bạn nên cập nhật thư viện lên phiên bản mới nhất (nếu có bản cập nhật). Hoặc chỉ sử dụng API dịch vụ Google Play bắt buộc trong ứng dụng của bạn và loại bỏ Multidex. Thay

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

này với một cái gì đó bạn sử dụng trong ứng dụng của bạn như thế này

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

và loại bỏ này compile 'com.android.support:multidex:1.0.1'

Bạn có thể tìm thấy tất cả các Google Play dịch vụ API đây https://developers.google.com/android/guides/setup#add_google_play_services_to_your_project

Các vấn đề liên quan