IT_Programming/Android_Java

Android proguard Javascript Interface problem

JJun ™ 2013. 12. 16. 14:34

 


 출처: http://jinifactory.tistory.com/11


 

Android에서 Hybrid Application 개발시 흔히 Webview에 addJavascriptInterface로 Java Object를

연결하여 Javascript - Java 사이의 브릿지 객체로 이용하곤 한다. 

빌드하고 테스트 해보면 Javascript에서 바인딩 된 Java 객체를 잘 호출하는 것을 확인할수 있다. 


문제는 릴리즈를 위해 빌드시 proguard 를 사용하면 발생한다.

 

04-23 00:23:35.914: E/Web Console(2689): Uncaught TypeError: Object [패키지이름].n@40776dd0 has no method '[메서드이름]' at [페이지URL]

해당 Java 객체의 메서드를 호출하는 곳에서 이런 류의 오류가 발생하는 것이다. 
proguard에서 객체 이름을 암호화 했기 때문이다.... ㅡㅡㅋ

해결 방법은 proguard-project.txt에서 해당 객체는 암호화 하지 않도록 지정하는 것이다.
아래와 같이 proguard-project.txt를 수정하면 된다.

 

-keep public class YOURPACKAGENAMEHERE.JavascriptCallback
-keep public class * implements YOURPACKAGENAMEHERE.JavascriptCallback
-keepclassmembers class * implements YOURPACKAGENAMEHERE.JavascriptCallback {
    <methods>;
}

ProguardJavaScript2.zip
1.14MB
ProguardJavaScript1.zip
1.09MB