0

アプリケーションで Javascript インターフェイスを使用しています。

デバイス (Galaxy 3) でデバッグを実行すると、問題なく完全に実行されますが、リリース apk ファイルを作成すると、JavaScript が実行されていない可能性があります。

これはJavaScriptInterfaceクラスです:

public class StreamingMediaPlayer{

    public class JavaScriptInterface {
        Context mContext;

        JavaScriptInterface(Context c) {
             mContext = c;
        }

        @JavascriptInterface
        public void FinishExtract(String url) {

        }
   }
}

これは、proguard ファイルが原因だと思います。

# To enable ProGuard in your project, edit project.properties
# to define the proguard.config property as described in that file.
#
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in ${sdk.dir}/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the ProGuard
# include property in project.properties.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# Add any project specific keep options here:

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}

-dontwarn org.apache.commons.codec.binary.**
-dontwarn com.commonsware.cwac.sacklist.**
-dontwarn com.commonsware.cwac.tlv.**
-dontwarn com.nineoldandroids.**
-dontwarn com.apps.model.**

-keep class com.millennialmedia.android.** {*;}
-keep public class cmn.Proguard$KeepMembers 
-keep public class * implements cmn.Proguard$KeepMembers
-keepclassmembers class * implements cmn.Proguard$KeepMembers { 
   <methods>; 
}
-keepattributes *Annotation*
-dontwarn android.webkit.JavascriptInterface

-keep class com.apps.model.** { *; } 
-keepattributes *Annotation*

proguardファイルに何かを追加する必要がありましたか? 問題は別のものでしたか?

4

1 に答える 1

1

問題は、プロガードが FinishExtract メソッドを難読化することです。次に、名前がまだ「FinishExtract」であると想定しているため、JavaScriptはそれを見つけることができません

それを修正するには、コードを次のように変更します。

public class JavaScriptInterface  implements cmn.Proguard.KeepMembers {

proguard 構成は、KeepMembers を実装するクラスが難読化されないように指定します。

于 2013-11-20T21:15:40.467 に答える