安卓开发学习之解决JS不能调用Android方法

news/2024/7/19 13:40:16 标签: Android开发, js

背景

这两天在做划词搜索时,需要让前端的js调用后端的Android方法,但总是调不成,经过搜索,问题解决,现记录成文。

 

解决方案

1、确定调用了webView.addJavascriptInterface()方法并且webView支持js

webView支持js是前提,设置方法:webView.getSettings().setJavascriptEnabled(true)

webView.addJavascriptInterface(object, string)方法用来给webview的网页绑定安卓端的对象。object就是安卓端的对象,string是这个对象在前端的名字

 

2、确定要调用的方法加了@JavascriptInterface注解,而且访问修饰符是public

如果js要调安卓端的某个方法,必须在安卓端的这个方法前加上@JavascriptInterface注解,而且,如果targetSdkVersion >= 17的话,还要加上@SuppressLint("JavascriptInterface")注解,而且要保证这些方法是公有的

 

3、考虑代码混淆

如果项目用了代码混淆,则要在项目的proguard-project.txt文件里声明下面几句话,保证混淆时@JavascriptInterface注解不被去掉

-keepattributes *JavascriptInterface*

-keep class com.example.szc.TextSelectionHelper
-keep class com.example.szc.TextSelectionHelper {public *;}

第一行表示保留JavascriptInterface注解

第二行是保持TextSelectionHelper类,因为我是在这个类里使用JavascriptInterface注解的

第三行表示保持这个类里所有公有字段,因为使用JavascriptInterface注解的方法只有是公有的,才有效

 

结语

解决思路就如上所示,我是通过第三步解决的,坑了一天才完事。


http://www.niftyadmin.cn/n/1771964.html

相关文章

LeetCode #739 每日温度

739. 每日温度 请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。 例如,给定一个列表 temperatures [73, 74…

安卓开发学习之LruCache源码阅读

背景 LruCache是最近最久未使用的缓存&#xff0c;是安卓系统里常见的缓存策略之一。 源码阅读 LruCache类里定义的属性如下 private final LinkedHashMap<K, V> map; // 内存对象&#xff0c;哈希链表private int size; // 目前使用的内存数private int maxSize; // 最…

LeetCode #518 零钱兑换 II——每日一题

518. 零钱兑换 II 给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。 示例 1: 输入: amount 5, coins [1, 2, 5] 输出: 4 解释: 有四种方式可以凑成总金额: 55 5221 52111 511111示例 2: 输入: amount 3, coin…

LeetCode #852 山脉数组的峰顶索引

852. 山脉数组的峰顶索引 符合下列属性的数组 arr 称为 山脉数组 &#xff1a; arr.length > 3存在 i&#xff08;0 < i < arr.length - 1&#xff09;使得&#xff1a; arr[0] < arr[1] < ... arr[i-1] < arr[i]arr[i] > arr[i1] > ... > arr[ar…

安卓系统启动之Zygote进程启动过程

背景 安卓系统启动时首先启动init进程&#xff0c;而后init进程会创建zygote进程&#xff0c;zygote进程则会fork出来SystemServer进程。在安卓开发学习之SystemServer启动过程一文中记录了阅读SystemServer启动的过程&#xff0c;现在就记录一下Zygote进程的启动过程 源码阅读…

安卓开发学习之异步任务源码阅读

背景 异步任务AsyncTask是Android里自带的异步处理任务(网络请求等)的工具类&#xff0c;使用起来很方便&#xff0c;如今记录一下我对它的源码的阅读过程。 源码取自Android8.0 使用 常见的使用方式之一如下&#xff1a; AsyncTask<String, Void, String> asyncTask …

算法学习之实现二叉树结点及其层数的非递归输出

背景 这半年在准备考研&#xff0c;所以没有对技术栈进行更新或复习&#xff0c;博客也没有更新……但上周学院宣布毕业设计&#xff08;企业实习&#xff09;开题了&#xff0c;要找老师找单位&#xff0c;这才不得不牺牲晚上下军棋的时间&#xff0c;复习或学习编程的知识……

算法学习之实现二维矩阵的顺时针遍历

背景 有这么一道面试题&#xff0c;让顺时针输出一个二维矩阵。 思路 记录开始行开始列和结束行结束列&#xff0c;做为输出的边界 除了要输出的矩阵&#xff0c;我还设置了一个状态矩阵&#xff0c;用来记录矩阵中某一个元素输出与否&#xff0c;没有输出过的元素&#xff…