Android学习笔记_32_通过WebView实现JS代码与Java代码互相通信

Android逆向实战:解密Cocos2d-js游戏so文件与Frida动态Hook网络加密 在移动应用安全与协议分析领域,理解应用如何保护其核心逻辑与通信数据是基础课题。许多应用,特别是使用Cocos2d-js等混合引擎开发的游戏,会将JavaScript业务逻辑编译为字节码并封装在原生动态库(如libcocos2djs.so)中,同时实施网络通信加密,这构成了逆向分析的主要挑战。其原理在于通过代码混淆与数据加密,增加静态分析的难度,以保护知识产权和防止协议篡改。掌握Hook技术,尤其是利用Frida框架进行动态代码插桩,具有极高的技术价值,它允许分析者在应用运行时实时拦截函数调用、修改内存与参数 阅读详情

1、要实现JS代码与Java代码互相通信,需要通过Android的WebView控件,在视图布局界面引入该控件,代码如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
    />
</RelativeLayout>

2、准备html界面:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
    function show(jsondata){
        var jsonobjs = eval(jsondata);
        var table=document.getElementById("personTable");
        for(var y=0;y<jsonobjs.length;y++){
            var tr = table.insertRow(table.rows.length);
            var td1=tr.insertCell(0);
            td1.align="center";
            var td2=tr.insertCell(1);
            td2.align="center";
            
            td1.innerHTML=jsonobjs[y].name;
            td2.innerHTML="<a href='javascript:contact.call(\""+jsonobjs[y].phone+"\")'>"+jsonobjs[y].phone+"</a>";
        }
    }

</script>
</head>
<body onload="javascript:contact.showContacts()">
    <table border="0" cellspacing="0" id="personTable" width="100%">
        <tr>
            <td width="35%" align="right">姓名</td><td align="center">电话</td>
        </tr>
    </table>
    <a href="javascript:window.location.reload()">刷新</a>
</body>
</html>

  在上述代码中类似"javascript:contact.showContacts()"这样的写法,它代表的意思是调用javascript对象contact的showContacts方法。而对象contact就要从后台java代码中获取。

3、在java代码中创建javascript对象:

package com.example.html;

import java.util.List;

import org.json.JSONArray;
import org.json.JSONObject;

import com.example.service.ContactService;

import android.net.Uri;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.webkit.WebView;

public class MainActivity extends Activity {
    private WebView webView;
    private ContactService contactService;

    @SuppressLint({ "JavascriptInterface", "SetJavaScriptEnabled" })
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        webView = (WebView) this.findViewById(R.id.webView);
        webView.loadUrl("file:///android_asset/contact.html");// 加载html文件
        webView.getSettings().setJavaScriptEnabled(true);// 启用javascript

        // 第一个参数在javascript中的一个对象,第二个参数在javascript中当前对象的变量
        webView.addJavascriptInterface(new JSObject(), "contact");
        contactService = new ContactService();

    }

    private final class JSObject {
        // 显示联系人列表
        @SuppressWarnings("unused")
        public void showContacts() {
            try {
                List<ContactService.Contact> contacts = contactService.getContacts();
                JSONArray jsonArray = new JSONArray();
                for (ContactService.Contact contact : contacts) {
                    JSONObject object = new JSONObject();
                    object.put("name", contact.getUsername());
                    object.put("phone", contact.getPhone());
                    jsonArray.put(object);
                }
                String json = jsonArray.toString();
                // 后台调用前台html文件中javascript的方法show
                webView.loadUrl("javascript:show('" + json + "')");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        // 打电话
        @SuppressWarnings("unused")
        public void call(String phone) {
            Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phone));
            startActivity(intent);
        }
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

  3.1 javascript调用java方法:

  上面的内部类JSObject 可以看成是javascript的对象,而contact可以看成是该对象的名称,内部的方法showContacts可以看成javascript对象的方法。因此对于在上述代码中"javascript:contact.showContacts()"的写法表示,执行内部类JSObject

中的方法showContacts。

  3.2 java调用javascript方法:

  可以通过WebView控件调用,例如:webView.loadUrl("javascript:show('" + json + "')")则表示,调用javascript中的show方法。

Android应用集成GeckoView浏览器内核:从原理到实践 在移动应用开发中,WebView是实现混合应用架构的核心组件,它允许原生应用内嵌网页内容,实现动态更新与跨平台代码复用。其原理是基于浏览器渲染引擎,在应用内创建独立的渲染上下文来解析HTML、CSS并执行JavaScript。这项技术的核心价值在于平衡了开发效率与用户体验,既能利用Web技术的快速迭代优势,又能通过原生桥接调用设备能力。在需要高一致性、强隐私保护或深度定制网络请求与渲染流程的企业级应用、金融应用等场景中,系统WebView可能无法满足需求。此时,集成独立的浏览器内核成为高级解决方案。本文以M 阅读详情

相关推荐

安卓原生影视App对接苹果CMS全链路实战

影视类Android App开发涉及前端播放体验、后端内容管理与API对接等核心环节。苹果CMS作为主流PHP影视CMS系统,其RESTful接口需通过OkHttp/Retrofit进行标准化调用,配合ExoPlayer实现硬解播放、防盗链处理与离线缓存。本文围绕安卓原生开发(非WebView套壳)展开,解析苹果CMS API逆向工程、双Token登录鉴权、播放器深度定制及真机兼容性适配等关键技术,覆盖从HTTP通信、权限控制到灰度发布的完整交付链路,适用于具备Android中级开发能力、熟悉HTTP与PH

weixin_34178244的博客 421

android html5 点击事件监听,Android平台以Widget方式集成HTML5+SDK打包后事件监听异常...

Android平台以Widget方式集成HTML5+SDK搜寻车辆(function($, doc) {$.init({swipeBack:false //启用右滑关闭功能});$.plusReady(function() {var settingPage = $.preload({'url':'../settings.html','id': 'settings'});// 省略部分documen...

weixin_42503264的博客 351

PyQt5 + HFSS:给你的仿真脚本做个专属GUI界面(零基础搭建指南)

本文详细介绍了如何使用PyQt5为HFSS仿真脚本创建专属GUI界面,适合零基础用户快速上手。通过Python二次开发,实现参数可视化调整、进度实时监控等功能,大幅提升团队协作效率。文章涵盖环境配置、界面设计、HFSS集成到打包部署的全流程,是仿真工程师提升工作效率的实用指南。

weixin_42535720的博客 185

android程序加载过程,Android应用程序启动但无法加载数据并且加载过程会一直持续...

当我在启动画面之后点击其中一个按钮时,加载将永远持续进行,并且无法在屏幕上显示数据。我已经使用各种库进行构建,并没有错误,因为应用程序启动,但这里是加载屏幕的屏幕截图,它没有给出显示加载数据的期望输出。 我logcat的是:真正的 “结果”:Android应用程序启动但无法加载数据并且加载过程会一直持续 11-15 11:37:17.509: I/dalvikvm(20419): Could n...

weixin_39669761的博客 1356

高德地图+Three.js实战:手把手教你打造数字农场3D可视化大屏(附完整源码)

本文详细介绍了如何利用高德地图JS API与Three.js技术栈,构建一个功能强大的数字农场3D可视化大屏。文章从技术选型、架构设计出发,深入讲解了坐标对齐、图层管理、性能优化等核心工程实践,并提供了完整的模块化代码示例,旨在为智慧农业及类似场景的3D地理可视化项目提供一套可复用的解决方案。

k8s6orchestrator的博客 890

Android 13 录音APK在后台无数据的处理

未获取到录音数据

chenchen4310的博客 1183

jxbrowser java代码直接调用js代码

https://blog.youkuaiyun.com/shuaizai88/article/details/73743669 final Browser browser = new Browser(); BrowserView browserView = new BrowserView(browser); JFrame frame = new JFrame...

weixin_30235225的博客 870

ArcGIS Pro新手避坑:从OpenStreetMap导入路网到创建拓扑关系全流程

本文详细解析了ArcGIS Pro中从OpenStreetMap导入路网数据到创建拓扑关系的全流程,涵盖OSM数据特性、几何完整性检查、属性强化及拓扑关系构建等关键步骤。特别针对路网数据预处理、网络数据集配置和常见问题提供了实用解决方案,帮助GIS新手高效完成网络分析任务。

weixin_33670786的博客 514

Android—WebView与JS交互

Html文件: WebView与JS交互方式: 1. 前提: WebSettings webSettings = webView.getSettings(); // 设置与Js交互的权限 webSettings.setJavaScriptEnabled(true); webView.setWebChromeClient(new WebChromeClient(){ @Override public boolean onJsAlert(WebView view, String u

#请假条的博客 3212

腾讯地图自定义瓦片地图开发实战:从坐标定位到图层融合

本文详细介绍了腾讯地图自定义瓦片地图开发的全流程,从坐标定位到图层融合的实战技巧。通过具体代码示例和常见问题解决方案,帮助开发者快速掌握腾讯地图API的自定义瓦片功能,实现室内外地图的无缝衔接和特殊图层的叠加展示。

weixin_42526015的博客 171

2026.3.10:最新claude code完美解决方案,跳过登录界面,使用国内deepseek-v4-pro进行计费

本文介绍了一种绕过Claude登录界面直接使用国内DeepSeek-V4-Pro服务的解决方案。通过npm全局安装@anthropic-ai/claude-code包,并配置5个关键环境变量:API认证令牌、基础URL(指向DeepSeek服务)、指定模型为deepseek-v4-pro、禁用非必要流量等。文中提供了4张配图辅助说明配置过程,但未展示具体内容。该方案可实现直接计费使用,无需通过官方登录流程。

拥抱具身智能,昇腾Ascend C 6511

Android通过WebView调用 JS 代码

Android通过WebView调用 JS 代码 1 a.  webView.loadUrl("javascript:callJS()"); b.  setWebChromeClient响应弹窗 1.布局 1 2 3 4 5 6 7 8 9 10 11 ...

bolang789的博客 286

SAP UI5 主题设置全解析:从启动参数到运行时切换、跨域白名单与事件监听

SAP UI5主题体系深度解析:从配置到切换的完整指南 摘要:SAP UI5主题机制远不止CSS换肤,其工程化实践涵盖启动配置、运行时API切换、跨库路径映射及安全管控等关键环节。通过bootstrap标签或URL参数设置初始主题,运行时可用Theming.setTheme无刷新切换。自定义主题需配置theme-roots路径,跨域加载需声明sap-allowed-theme-origins白名单。主题切换完成后会触发applied事件,适合执行视觉同步操作。该体系支持多品牌适配、集中式主题管理,在Fior

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 327

android更新本地xml文件(Webview)

一.Activity中使用 1.创建html文件(可以放在assest中) <!doctype html> <html> <head> <!-- 设置当前HTML文件的字符编码 --> <meta charset="utf-8"> <!-- 设置浏览器的兼容模式版本 (让IE使用最新的渲...

weixin_30840253的博客 703

2025华为OD面试手撕代码真题目录、八股文真题目录以及面试技巧

1. **华为OD面试技术面准备指南** 2. **华为OD面试技术面常见问题解答** 3. **华为OD面试技术面经验分享** 4. **华为OD面试技术面注意事项** 5. **华为OD面试技术面攻略** 6. **华为OD面试技术面模拟题目与解析** 7. **华为OD面试技术面知识点梳理** 8. **华为OD面试技术面常考**

算法大师! 3万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

java 中http通信_Java的HTTP通信

在Android中,HTTP通信可以用Volley,在Java中不能使用Volley,只能使用DefaultHttpClient,HttpPost和HttpResponse。/** 向服务器发送数据,并接受返回的数据*/public static String send2Server(String url, List params){String res = null;// 建立HTTPPost...

weixin_32825467的博客 278

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

简单了解 WebView 页面

在 Android 中,WebView 本质上是一个用于显示网页内容的视图组件。要在 WebView 中绘制 UI 元素,你需要编写 HTML、CSS 和 JavaScript 代码,然后将这些代码加载到 WebView 中。以下是一个简单的示例:首先,在 Android 项目的 assets 文件夹中创建一个 HTML 文件,例如 my_webview_content.html,并添加一些 UI...

文摘资讯 257

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Android PhoneGap简析

前言 (转自) 上周研究了一下PhoneGap这个技术,主要是对它的API和插件机制的学习,总体来看这种技术还是有一定的市场,特别是对BS为主的开发来讲确实有很多吸引,当然,这种技术也有严重的短板,比如效率和调试。当然这些都是一个概括性的认识,今天打算在仔细的研究一下,把PhoneGap的jar包反编译了一下,在自己的疑问下,借助互联网的帮助,简单的分析了一下PhoneGap的内部实现和依靠

开发简记 7763

Android原生应用集成CocosCreator游戏:环境配置、通信与性能优化实战

在移动应用开发中,混合开发模式因其能融合原生应用稳定性和跨平台内容灵活性而备受青睐。其核心原理在于通过桥接技术,实现不同运行时环境(如原生Java/Kotlin与JavaScript引擎)间的通信与资源共享。这种技术方案的价值在于,它允许开发者在现有App中无缝嵌入游戏或交互式内容模块,无需用户单独下载,从而提升用户粘性并实现功能的动态更新。典型的应用场景包括电商App内嵌促销小游戏、社交平台集成轻量级互动应用等。本文聚焦于将CocosCreator开发的游戏项目集成到Android原生工程这一具体实践,详

weixin_30911451的博客 346

Android WebView和JavaScript交互

  JavaScript在现在的网页设计中用得很多,Android 的WebView可以载入网页,WebView也设计了与JavaScript通信的桥梁。这篇主要介绍一下WebViewk控件如何和JavaScript进行交互。 WebView:   WebView和网页相关的主要有一下几个方法:        setWebViewClient();       setWebChro...

weixin_30868855的博客 79

Flare 性能调优方法论:GPU 图测量、基准测试与瓶颈定位实战指南

Flare 是面向 NVIDIA SM120/SM121 GPU 的本地推理服务器,用 Python(Ignition)准备模型、用 Rust(Helios)通过捕获的 CUDA 图提供服务。本文围绕 **Flare 性能调优**这一主题,完整拆解项目内置的方法论:如何测量整张 GPU 图、如何用 Nsight 做瓶颈定位、如何用冻结工作负载跑基准测试,以及如何给调度开销设定硬性上限——全部基于仓

gitblog_00016的博客 533

webview给前端页面传递数据_Android WebView交互传递json字符串并解析

{"optioninfo":{"dynamic":"true","static":"true"},"simplifiedDisplay":"newSimpleInfoCard","newCard":[],"card":[],"search":[],"infoCard":[{"bannerTitle":"移动研发平台 EMAS,爆款产品0元试用","bannerContent":"一站式研发平台快速...

weixin_39719727的博客 1071

UniApp安卓原生插件开发指南与实战技巧

原生插件开发是跨平台框架中解决性能瓶颈和功能扩展的关键技术。通过原生代码与JavaScript的桥接,开发者可以突破Web容器的限制,直接调用平台特有API。这种技术特别适用于需要高性能计算或硬件交互的场景,如蓝牙通信、传感器数据采集等。UniApp作为基于Vue.js的跨平台解决方案,其原生插件机制支持Module和Component两种模式,分别对应功能扩展和原生UI嵌入。在实际开发中,合理处理线程通信、内存管理以及性能优化是保证插件质量的重点。本指南详细介绍了从环境搭建到插件发布的完整流程,并提供了蓝

weixin_34116110的博客 418

android 之互联网应用(socket,url,http,httpurlconnection,apache http,webview)

android 之互联网应用   1&gt; socket; 2&gt; url; 3&gt; http; 4&gt; httpurlconnection; 5&gt; apache http; 6&gt; webview &amp; javascript; 7&gt; wifi无线传输; 8&gt; 蓝牙无线传输.     1&gt; socket介绍,用法 Sock...

weixin_33878457的博客 179
上一篇: Android学习笔记_31_通过后台代码生成View对象以及动态加载XML布局文件到LinearLayout
下一篇: Android学习笔记_33_Widget时钟(MetaData)
乐由心起
博客等级 码龄16年 61粉丝 295原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值