2013-07-23 10 views
7

काम करने से WebView में जावास्क्रिप्ट बंद हो जाता है मैं एक वर्ग JSBridge (एक आंतरिक वर्ग) जो एक जावास्क्रिप्ट इंटरफेस है:Proguard

private class JsBridge implements JsCallback { 

    /** 
    * @param handlerName method required 
    * @param jsonData data passed through from javascript 
    * @param jsCallback A callback to trigger when handler specified by handlername has finished, could be null 
    */ 
    @JavascriptInterface 
    public void callHandler(final String handlerName, final String jsonData, final String jsCallback) { 
     Log.d(App.TAG, "Bridge call from JS, received " + handlerName); 
    } 

    @JavascriptInterface 
    public void onPageLoad(final String pageName) { 
     Log.d(App.TAG, "Bridge call from JS, received onPageLoad - we have the page name " + pageName); 
    } 

यह ठीक काम करता है जब तक मैं एक रिलीज ProGuard साथ निर्माण कर रहे हैं। मैंने कुछ अन्य SO उत्तरों का पालन करने का प्रयास किया है और मेरी प्रोजेवार्ड फ़ाइल में निम्न पंक्तियां जोड़ दी हैं, लेकिन इससे मदद नहीं मिली है। परिणाम डीबग संस्करण है जिसे मुझे कॉलबैक मिलते हैं, रिलीज संस्करण मुझे कोई कॉलबैक नहीं मिलता है।

-keep public class * implements com.mixcloud.player.view.JsCallback 

-keepclassmembers class * implements com.mixcloud.player.view.JsCallback { 
    <methods>; 
} 
-keep public class * implements com.mixcloud.player.view.JsCallback 

-keepattributes *Annotation* 
-keepattributes JavascriptInterface 
-keep public class com.mixcloud.player.view.JSRefreshWebView 
-keep public class com.mixcloud.player.view.JSRefreshWebView$JsBridge 
-keep public class * implements com.mixcloud.player.view.JSRefreshWebView$JsBridge 
-keepclassmembers class * implements com.mixcloud.player.view.JSRefreshWebView$JsBridge { 
    <methods>; 
} 

उत्तर

17

अपने जावास्क्रिप्ट इंटरफ़ेस तरीकों @JavascriptInterface साथ एनोटेट रहे हैं, तो आप उन्हें

-keepclassmembers class * { 
    @android.webkit.JavascriptInterface <methods>; 
} 
+0

साथ आह हाँ मुझे लगता है कि मैं दस्तावेज में यह देखा रक्षा कर सकते हैं, भ्रम था, मैंने सोचा कि मैं करने वाला था पैकेज को मेरे वास्तविक जावास्क्रिप्ट इंटरफ़ेस क्लास के साथ रखें। यह पहली बार काम किया! – serenskye

+0

मेरे पास एक अजीब मामला है, मैंने उपरोक्त कॉन्फ़िगरेशन का उपयोग करके अपना ऐप निर्यात किया और यह एंड्रॉइड 2.3.7 में काम किया लेकिन नेक्सस 5 (एंड्रॉइड 4.2) पर नहीं – StarWars

संबंधित मुद्दे