相关疑难解决方法(0)

如何为javascript界面​​配置proguard?

我实现了一个使用JavascriptInterface的Webview.它没有混淆时工作正常,但Proguard立即活跃,它不起作用.我在这里看了其他答案,但我还是无法让它发挥作用.

一些WebView类:

public class Activity_Webview {
private WebView webView;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        webView = (WebView) findViewById(R.id.webview);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.addJavascriptInterface(new JavaScriptInterface (), "HTMLOUT");
        webView.setWebViewClient(mWebViewClient);
    }

    public class JavaScriptInterface implements NonObfuscateable{
        @JavascriptInterface
        public void processHTML(String html) {
        handleFinishFromWebView(html);
    }
}
Run Code Online (Sandbox Code Playgroud)

我在Proguard尝试过的:

-keep public class * implements com.project.NonObfuscateable
-keepclassmembers class * implements NonObfuscateable {
    public void processHTML(java.lang.String);
}
Run Code Online (Sandbox Code Playgroud)

我也试过这个(当没有实现NonObfuscateable接口时:

-keep public class com.project.Activity_Webview.JavaScriptInterface
-keep public class * implements com.project.Activity_Webview.JavaScriptInterface
-keepclassmembers class * implements com.project.Activity_Webview.JavaScriptInterface {
    <fields>;
    <methods>;
}
Run Code Online (Sandbox Code Playgroud)

有人知道可能出现什么问题吗?提前致谢

obfuscation android proguard

23
推荐指数
2
解决办法
1万
查看次数

Javascript界面​​不能与android 4.2一起使用

我正面临着一个严重的android OS Jelly Bean 4.2的错误,在我的程序中,我使用JavaScript来获取网页的高度,它完全适用于Android 2.2到4.1但是当我尝试在android 4.2中使用相同的代码时JavaScript界面​​无法正常工作.

我该如何解决这个问题?

javascript css android webview

21
推荐指数
4
解决办法
2万
查看次数

使用JavascriptInterface时未捕获TypeError

我目前正在webview中以HTML格式向用户显示一堆数据.我在每个条目下面都有一些链接,单击时应该在我的应用程序中调用方法.Android WebView的javascript界面​​似乎是处理这些事情的最佳(唯一?)方式.但是,每当我单击该链接时,都会收到以下错误消息:ERROR/Web Console(6112): Uncaught TypeError: Object [my namespace]@4075ff10 has no method 'edit' at [base URL]:55

我声明了以下接口:

public class JavaScriptInterface {
    Context context;

    JavaScriptInterface(Context c) {
        context = c;
    }

    public void edit(String postid) {
        Log.d("myApp", "EDIT!");
        //do stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我将它添加到我的WebView:

final WebView threadView = (WebView) findViewById(R.id.webViewThread);
threadView.getSettings().setJavaScriptEnabled(true);
threadView.addJavascriptInterface(new JavaScriptInterface(this), "Android");
Run Code Online (Sandbox Code Playgroud)

最后,我在我的HTML中调用它如下:

<div class="post-actions">
    <div class="right">
        <a onClick="Android.edit('4312244');">Edit</a>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

当我通过模拟器或adb连接到我的手机调试我的应用程序时,真正的踢球者就是这一切.当我构建和发布应用程序时,它会中断.

我的智慧结束了.任何帮助或建议将不胜感激!

javascript android android-webview

14
推荐指数
1
解决办法
1万
查看次数

ANDROID/WEBVIEW--未捕获TypeError:对象[object Object]在文件中没有方法'changeActivity':

我正在尝试使用带有输入框的webview,获取字符串,并将其传递给第二个活动.由于某种原因,该按钮没有做任何事情,我收到错误:

未捕获的TypeError:对象[object Object]在file:///android_asset/www/index.js上没有方法'changeActivity':3

所以我的HTML说:

 <input id="name" value="" />&nbsp;&nbsp;&nbsp;
<button onclick="checkMovie()"> Check it! </button>
Run Code Online (Sandbox Code Playgroud)

我的JS说:

    function checkMovie() {
var movieName = document.getElementById('name').value;
webapi.changeActivity(movieName);}
Run Code Online (Sandbox Code Playgroud)

我的Android代码说:

public class MainActivity extends Activity implements OnClickListener {
// Setting up known variables
JavaScriptInterface JSInterface;

Button find;

@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // changing main layout to show the splash first
    setContentView(R.layout.activity_main);
    // Tie my webviews and set up the webview to handle JS
    WebView webView = (WebView) findViewById(R.id.webView);
    webView.getSettings().setJavaScriptEnabled(true);
    // Expecting UI
    webView.setWebChromeClient(new …
Run Code Online (Sandbox Code Playgroud)

javascript android webview

8
推荐指数
2
解决办法
8465
查看次数

Android proguard Javascript接口问题

用proguard混淆后我的项目失败了javascriptinterface

这是与proguard配置的一些建议的链接,但它不适用于我的情况

http://groups.google.com/group/android-developers/browse_thread/thread/f889e846fbf7ec3f?pli=1

所以来自Javascript的调用松散绑定到相关的Java方法

关于那个我的proguard配置

-keep public class com.trans_code.android.JavascriptCallback 
-keep public class * implements com.trans_code.android.JavascriptCallback 
-keepclassmembers class * implements com.trans_code.android.JavascriptCallback { 
    <methods>; 
} 
-keepclassmembers class * implements JavascriptCallback { 
    void on*(***);
} 
-keep public class com.trans_code.** {
  public protected *;
}

-keepclasseswithmembernames class com.MyActivity$JavascriptInterface

-keepclasseswithmembernames class com.MyActivity$JavascriptInterface {
    public protected *;
}
Run Code Online (Sandbox Code Playgroud)

如果有人知道如何配置proguard让它过滤掉相关的方法和类,将帮助我很多

javascript android interface proguard

6
推荐指数
1
解决办法
6891
查看次数

在Android Manifest 17以上的SDK中定位SDK时,Proguard混乱Javascript接口功能

我的android项目中有一个自定义Webview,如下所示:

public class MyWebView extends WebView {

    public MyWebView(Context context) {
        super(context);
    }

   public class JsObject {

        @JavascriptInterface
        public void show() {
            //...
        }

        @JavascriptInterface
        public void hide() {
            //....
        }
}
Run Code Online (Sandbox Code Playgroud)

其中包括JavascriptInterface我用来从JavaScript端到Android端的通信.

在AndroidManifest中,我有以下内容

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="16" />
Run Code Online (Sandbox Code Playgroud)

在项目中,我使用了proguard,声明:

-keepattributes JavascriptInterface

-keepclassmembers class * {
    @android.webkit.JavascriptInterface <methods>;
}
Run Code Online (Sandbox Code Playgroud)

一切都很好.

然而,当我将AndroidManifest更改为android:targetSdkVersion=1819测试18及以上的设备时,proguard似乎在某种程度上混淆了无法访问的JavaScript方法.

如果我回到16或少于17的东西一切正常.此外,这只发生在proguard上.如果我不使用proguard,即使使用android:targetSdkVersion=18或19,一切正常.在清单Android> 17中定位时,任何人都可以帮助它吗?

javascript android proguard webview

6
推荐指数
2
解决办法
4627
查看次数

与Eclipse崩溃的人行横道

我在本教程中添加了Crosswalk eclipse:ClickHere 我完成了教程中的所有操作并且没有错误,但是当我在手机上启动应用程序时,我有这样的:

02-19 13:37:08.147: E/AndroidRuntime(21108): FATAL EXCEPTION: main
02-19 13:37:08.147: E/AndroidRuntime(21108): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.crosswalktest/com.example.crosswalktest.MainActivity}: android.view.InflateException: Binary XML file line #1: Error inflating class org.xwalk.core.XWalkView
02-19 13:37:08.147: E/AndroidRuntime(21108):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2092)
02-19 13:37:08.147: E/AndroidRuntime(21108):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2117)
02-19 13:37:08.147: E/AndroidRuntime(21108):    at android.app.ActivityThread.access$700(ActivityThread.java:134)
02-19 13:37:08.147: E/AndroidRuntime(21108):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1218)
02-19 13:37:08.147: E/AndroidRuntime(21108):    at android.os.Handler.dispatchMessage(Handler.java:99)
02-19 13:37:08.147: E/AndroidRuntime(21108):    at android.os.Looper.loop(Looper.java:137)
02-19 13:37:08.147: E/AndroidRuntime(21108):    at android.app.ActivityThread.main(ActivityThread.java:4867)
02-19 13:37:08.147: E/AndroidRuntime(21108):    at java.lang.reflect.Method.invokeNative(Native Method)
02-19 13:37:08.147: E/AndroidRuntime(21108):    at java.lang.reflect.Method.invoke(Method.java:511)
02-19 13:37:08.147: E/AndroidRuntime(21108):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007) …
Run Code Online (Sandbox Code Playgroud)

eclipse android crosswalk-runtime

6
推荐指数
2
解决办法
2797
查看次数

Android上的JavascriptInterface在发布模式下无法使用APK

我有一个问题,即我在两天前寻找解决方案.在搜索令人沮丧之后,我会在这里发布:

我创建了一个具有webview的示例应用程序,这个webview打开了一个url,它有一个调用android函数的链接.我遵循它:http: //developer.android.com/guide/webapps/webview.html#BindingJavaScript

我正在使用最新的AndroidStudio版本,即时通讯使用galaxy s4 mini进行测试.

当我调试它时,一切正常,并显示吐司.

问题是我用命令生成一个RELEASE应用程序:〜/ Server/gradle-1.8/bin/gradle assembleRelease

应用程序打开,但当我触摸调用我的本机功能的链接时,它不起作用,没有任何反应.但是使用调试模式,它可以工作.

谁能帮我?

要更好地理解的图像:

在此输入图像描述

javascript android webview

4
推荐指数
1
解决办法
2328
查看次数