【Android】java中调用JS的方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了【Android】java中调用JS的方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2496字,纯文字阅读大概需要4分钟。
内容图文
最近因为学校换了新的教务系统,想做一个模拟登陆功能,发现登陆的账号和密码有一个js脚本来进行加密
整理了一下java中执行JS的方法
智强教务 账号 密码 加密方法
var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; function encodeInp(input) { var output = ""; var chr1, chr2, chr3 = ""; var enc1, enc2, enc3, enc4 = ""; var i = 0; do { chr1 = input.charCodeAt(i++); chr2 = input.charCodeAt(i++); chr3 = input.charCodeAt(i++); enc1 = chr1 >> 2; enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); enc4 = chr3 & 63; if (isNaN(chr2)) { enc3 = enc4 = 64 } elseif (isNaN(chr3)) { enc4 = 64 } output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4); chr1 = chr2 = chr3 = ""; enc1 = enc2 = enc3 = enc4 = "" } while (i < input.length); return output }
Java
首先需要创建一个接口,接口中的抽象方法要和js中函数名保持一致
public interface Methods { public String encodeInp(String input); }
然后在主函数中使用ScriptEngineManager来加载js
ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("javascript"); FileReader fileReader=new FileReader("F:\\JAVAProject\\src\\conwork.js");//js路径 engine.eval(fileReader); if (engine instanceof Invocable) { Invocable invocable = (Invocable) engine; Methods executeMethod = invocable.getInterface(Methods.class); System.out.println(executeMethod.encodeInp("account")); System.out.println(executeMethod.encodeInp("password")); }
Android
由于安卓中没有ScriptEngineManager ,引入jar包后也无法使用(囧)
故使用J2V8这个第三方库来进行加载
implementation ‘com.eclipsesource.j2v8:j2v8:4.5.0@aar‘
将js文件放在assets文件夹下
然后在Activity中调用
public String encodeNumber() { String result="没有"; InputStream is= null; //获取用户名与密码加密的js代码try { is = getAssets().open("conwork.js"); } catch (IOException e) { e.printStackTrace(); } BufferedReader reader = new BufferedReader(new InputStreamReader(is)); StringBuilder sb = new StringBuilder(); String line = null; try { while ((line = reader.readLine()) != null) { sb.append(line); } V8 runtime = V8.createV8Runtime(); //使用J2V8运行js代码并将编码结果返回final String encodename = runtime.executeStringScript(sb.toString() + "encodeInp(‘account‘);\n"); final String encodepwd=runtime.executeStringScript(sb.toString()+"encodeInp(password‘);\n"); runtime.release(); result=encodename+"%%%"+encodepwd; } catch (IOException e) { e.printStackTrace(); } finally { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } return result; }
原文:https://www.cnblogs.com/robotpaul/p/11165783.html
内容总结
以上是互联网集市为您收集整理的【Android】java中调用JS的方法全部内容,希望文章能够帮你解决【Android】java中调用JS的方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。