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ì?
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? –
@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
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. –