启用缩小时处理任务时出现异常
Posted
技术标签:
【中文标题】启用缩小时处理任务时出现异常【英文标题】:Exception while processig task when I enable minify 【发布时间】:2019-06-20 05:13:35 【问题描述】:这个问题很容易解释,我遇到了错误
处理任务时出现异常 java.io.IOException: java.lang.ArrayIndexOutOfBoundsException: 4
在构建 APK 时。起初,我没有启用 minify 并且它有效(但产生了 NoClassFoundError)。这就是我在 build.gradle 文件中启用缩小功能的原因。最初,我收到了很多来自 pro guard 的警告,所以我使用-dontwarn
忽略了所有警告。
忽略所有警告后,我得到了上述异常。我不知道出了什么问题。这里我附上了 gradle 文件和 pro Guard 内容。
build.gradle
android
compileSdkVersion 28
defaultConfig
applicationId "com.plumelabs.air"
minSdkVersion 16
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary true
compileOptions
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
buildTypes
debug
//multiDexKeepProguard file('multidex-config.pro')
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
release
multiDexKeepProguard file('multidex-config.pro')
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
dependencies
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso- core:3.0.2'
implementation 'com.android.support:multidex:1.0.0'
implementation 'com.google.android.gms:play-services-auth:16.0.0'
implementation 'com.google.android.gms:play-services-maps:16.0.0'
implementation 'com.google.android.gms:play-services-places:16.0.0'
implementation 'com.google.android.gms:play-services-location:16.0.0'
// https://mvnrepository.com/artifact/com.github.doctoror.geocoder/library
implementation group: 'com.github.doctoror.geocoder', name: 'library', version: '1.3.0'
implementation group: 'io.fabric.sdk.android', name: 'fabric', version: '1.4.2'
implementation 'io.nlopez.smartlocation:library:3.3.3'
implementation 'com.afollestad.material-dialogs:core:0.9.6.0'
implementation 'com.facebook.android:facebook-core:[4,5)'
implementation 'com.facebook.android:facebook-login:[4,5)'
/*implementation 'com.facebook.android:facebook-share:[4,5)'
implementation 'com.facebook.android:facebook-places:[4,5)'
implementation 'com.facebook.android:facebook-messenger:[4,5)'
implementation 'com.facebook.android:facebook-applinks:[4,5)'*/
implementation 'com.google.firebase:firebase-core:16.0.6'
// implementation 'com.firebaseui:firebase-ui-auth:4.1.0'
implementation 'com.google.firebase:firebase-auth:16.1.0'
implementation 'com.google.firebase:firebase-dynamic-links:16.1.5'
implementation 'com.google.firebase:firebase-messaging:17.3.4'
implementation 'com.google.code.gson:gson:2.8.4'
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
implementation 'com.github.bumptech.glide:glide:3.7.0'
annotationProcessor 'com.github.bumptech.glide:glide:3.7.0'
implementation 'uk.co.chrisjenx:calligraphy:2.3.0'
implementation 'com.github.hotchemi:android-rate:1.0.1'
implementation 'com.romandanylyk:pageindicatorview:1.0.2'
implementation 'com.karumi:dexter:5.0.0'
implementation 'com.getkeepsafe.taptargetview:taptargetview:1.12.0'
implementation group: 'com.squareup.okhttp3', name: 'logging-interceptor', version: '3.10.0'
保护内容
-keep class com.** *;
-dontwarn com.**
-dontwarn retrofit2.**
#-dontwarn okhttp3.**
-dontwarn okio.**
-keepattributes Signature
-keepattributes Annotation
-keep class okhttp3.* *;
-keep interface okhttp3.* *;
-dontwarn okhttp3.
-dontwarn java.nio.file.*
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
-dontwarn com.squareup.okhttp3.**
-keep class com.squareup.okhttp3.** *;
-keep interface com.squareup.okhttp3.* *;
-dontwarn javax.annotation.Nullable
-dontwarn javax.annotation.ParametersAreNonnullByDefault
-dontwarn org.**
【问题讨论】:
【参考方案1】:将-dontwarn
与org.**
域一起使用是很糟糕的,它会忽略您应该避免使用它的各种错误!
您只需添加一些库向我们推荐的 proguard 规则。
但是这个错误意味着obfuscation
中的一些类已经被改变了,你应该找出哪些类有这种情况。然后通过添加以下规则来保留这些:
-keep class packagename.* *;
【讨论】:
以上是关于启用缩小时处理任务时出现异常的主要内容,如果未能解决你的问题,请参考以下文章
Android NFC:使用 transceive() 时出现异常“transceive failed”
activiti流程引擎如果执行serviceTask时出现异常会怎么处理?