java - ProGuard obfuscating classes even after `keep class` flag. Affecting Android WebView behavior -


i'm using proguard obfuscate android app.

i'm using webview show webpage (an html walkthrough page) contains button close webview. there function in javascript calls closewalkthrough() method:

function closefunction() {     myclass.closewalkthrough(); } 

the releated java class looks this:

package com.myclass.android;  import android.app.activity; import android.content.context; import android.webkit.javascriptinterface;  public class javascriptinterface {      context _context;      javascriptinterface(context context) {         _context = context;     }      @javascriptinterface     public void closewalkthrough() {         ((activity) _context).finish();     } } 

i've added following flags in proguard file in hopes won't obfuscate javascriptinterface class because, if understand correctly, javascript method myclass.closewalkthrough() looking closewalkthrough() found in javascriptinterface java class.

... -keepattributes javascriptinterface -keep public class com.myclass.android.javascriptinterface { *; } ... 

however, whenever @ mapping.txt file, see com.myclass.android.javascriptinterface gets obfuscated:

... com.myclass.android.javascriptinterface -> axf:     android.content.context _context -> ... 

i added -keep public class flag file creates webview still doesn't work.

any pointers on might doing wrong?

i should mention when don't use proguard, button works , closes webview.

in case helps, here's complete proguard-project.txt file (i'm using intellij):

# configuration file proguard. # http://proguard.sourceforge.net/index.html#manual/usage.html  -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -verbose  # optimization turned off default. dex not code run # through proguard optimize , preverify steps (and performs # of these optimizations on own). -dontoptimize -dontpreverify # note if want enable optimization, cannot # include optimization flags in own project configuration file; # instead need point # "proguard-android-optimize.txt" file instead of 1 # project.properties file.  -keepattributes *annotation* -keep public class com.google.vending.licensing.ilicensingservice -keep public class com.android.vending.licensing.ilicensingservice  # native methods, see http://proguard.sourceforge.net/manual/examples.html#native -keepclasseswithmembernames class * {     native <methods>; }  # keep setters in views animations can still work. # see http://proguard.sourceforge.net/manual/examples.html#beans -keepclassmembers public class * extends android.view.view {    void set*(***);    *** get*(); }  # want keep methods in activity used in xml attribute onclick -keepclassmembers class * extends android.app.activity {    public void *(android.view.view); }  # enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations -keepclassmembers enum * {     public static **[] values();     public static ** valueof(java.lang.string); }  -keep class * implements android.os.parcelable {   public static final android.os.parcelable$creator *; }  -keepclassmembers class **.r$* {     public static <fields>; }  # support library contains references newer platform versions. # don't warn in case app linking against older # platform version.  know them, , safe. -dontwarn android.support.**  #----------------------------------------------------------- #                   custom defined flags #-----------------------------------------------------------  # note in order log hidden, must have optimization enabled. # source: https://groups.google.com/d/msg/adt-dev/60wpzrk8qmu/-9klgbznis4j -assumenosideeffects class android.util.log {     public static int d(...);     public static int w(...);     public static int v(...); }  #-repackageclasses '' #-allowaccessmodification  -keep class javax.** { *; } -keep class org.** { *; } -keep class twitter4j.** { *; } -keep class org.codehaus.** { *; } -keep class com.facebook.** { *; }  -keepattributes javascriptinterface -keep public class com.myclass.android.javascriptinterface { *; } -keep public class com.myclass.android.walkthroughactivity { *; }  -dontwarn android.support.** -dontwarn com.facebook.** -dontwarn com.google.** -dontwarn com.google.android.gms.** -dontwarn com.google.code.** -dontwarn com.google.common.collect.minmaxpriorityqueue -dontwarn com.google.gdata.**, com.google.common.** -dontwarn com.ibm.icu.text.** -dontwarn com.sun.** -dontwarn demo.** -dontwarn java.awt.** -dontwarn java.awt.**,javax.security.**,java.beans.** -dontwarn java.beans.** -dontwarn java.lang.management.** -dontwarn javax.** -dontwarn javax.swing.** -dontwarn oauth.signpost.** -dontwarn org.apache.** -dontwarn org.apache.commons.codec.binary.** -dontwarn org.apache.commons.logging.** -dontwarn org.apache.log4j.** -dontwarn org.jasypt.encryption.pbe.** -dontwarn org.joda.time.** -dontwarn org.mortbay.** -dontwarn org.slf4j.** -dontwarn org.w3c.dom.bootstrap.** -dontwarn sun.misc.unsafe -dontwarn twitter4j.** -dontwarn org.codehaus.jackson.** 

you can instruct proguard keep annotated methods:

-keepclassmembers class * {     @android.webkit.javascriptinterface <methods>; } 

this should part of default configuration in android sdk.


Comments

Popular posts from this blog

android - Get AccessToken using signpost OAuth without opening a browser (Two legged Oauth) -

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: mockito -

google shop client API returns 400 bad request error while adding an item -