I've been really trying hard to get the work done in my application. Everything is set and working but once I want to set proguard rules
, my application always crashed. I checked every library one by one and used all the info they give in the proguard-rules.pro
file. Yet, I cannot make it work.
I have 4 activities in total and with these rules only one of them crashes. I can enter and exit other 3.
I enabled debugging because I learnt that if the application works in this mode then it means it is guarded and when I remove it and upload it to play store, it will be decompile-protected. Warn me if I am wrong.
This is my build.gradle:
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
defaultConfig {
multiDexEnabled true
applicationId "com.example.android.rippleblockexplorer"
minSdkVersion 21
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
shrinkResources true
}
debug {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
shrinkResources true
debuggable true
}
}
}
dependencies {
testImplementation 'junit:junit:4.12'
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
implementation fileTree(dir: 'libs', include: ['*.jar'])
androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
implementation 'com.android.support:multidex:1.0.3'
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.android.support:design:27.1.1'
implementation "org.java-websocket:Java-WebSocket:1.3.8"
implementation 'com.github.curioustechizen.android-ago:library:1.4.0'
implementation 'com.facebook.shimmer:shimmer:0.1.0@aar'
implementation 'com.google.code.gson:gson:2.8.0'
implementation 'com.android.support:recyclerview-v7:27.1.1'
implementation "com.android.support:cardview-v7:27.1.1"
implementation 'org.ocpsoft.prettytime:prettytime:4.0.1.Final'
implementation 'com.squareup.okhttp3:okhttp:3.10.0'
}
And this is my proguard-rules.pro:
# Platform calls Class.forName on types which do not exist on Android to determine platform.
-dontnote retrofit2.Platform
# Platform used when running on Java 8 VMs. Will not be used at runtime.
-dontwarn retrofit2.Platform$Java8
# Retain generic type information for use by reflection by converters and adapters.
-keepattributes Signature
# Retain declared checked exceptions for use by a Proxy instance.
-keepattributes Exceptions
-ignorewarnings
-keep class * {
public private *;
}
##---------------Begin: proguard configuration for Gson ----------
# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature
# For using GSON @Expose annotation
-keepattributes *Annotation*
# Gson specific classes
-keep class sun.misc.Unsafe { *; }
#-keep class com.google.gson.stream.** { *; }
# Application classes that will be serialized/deserialized over Gson
#-keep class com.google.gson.examples.android.model.** { *; }
# Prevent proguard from stripping interface information from TypeAdapterFactory,
# JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter)
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer
##---------------End: proguard configuration for Gson ----------
# Retain generated class which implement Unbinder.
-keep public class * implements butterknife.Unbinder { public <init>(**, android.view.View); }
# Prevent obfuscation of types which use ButterKnife annotations since the simple name
# is used to reflectively look up the generated ViewBinding.
-keep class butterknife.*
-keepclasseswithmembernames class * { @butterknife.* <methods>; }
-keepclasseswithmembernames class * { @butterknife.* <fields>; }
-keep class org.ocpsoft.prettytime.i18n.**
#DEBUGGING ENABLER
-keepattributes SourceFile,LineNumberTable
-keep class com.example.android.rippleblockexplorer.model.** { *; }
-dontwarn kotlin.Unit
I am not sure at all what to add or to remove anymore. Explicit debugging shows an error in somewhere but it completely works when I disable proguard. I do not understand why.
FYI, I am using Java thread
(and you know, overriding Runnable
etc.); if this is any of help.
Anyone has a solution or a suggestion, perhaps? Any help is so appreciated.
In debug mode proguard file doesnot work.It works in release mode.You can follow the developer android site for this.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.