混合开发

article/2025/10/8 19:44:48

一、原生语言:

苹果手机:ios系统,由swift和c++/object-c语言编写,后缀名为 ipa(ios开发的安装包的后缀名) swift语言是一种开源的语言

安卓手机:android系统,由java(android)语言编写,后缀名为apk
开源的
wp手机:windowphone系统,由c#语言编写, 一般说到混合开发不考虑这个版本

二、混合开发:

原生语言开发+js的开发

缘由:

js无法调动系统的原生功能(拍照、短信、打电话、通讯录),但是原生(android、ios、wp)可以

原生有很大的适配问题(特别是android),js可以很好的解决这个问题

术语:

hybridapp ---- js+ android/ios写的 — 可以安装至手机应用

webapp m站 touch端项目 手机网站 ---- 纯js写的 – 浏览器上访问的

nativeapp – 纯android/ios编写的程序 — 可以安装至手机应用

三、android + js的开发模式

准备工具:

java jdk — 前端的node,没有node,name你就玩不了vue以及react等

链接:https://pan.baidu.com/s/1_LsDWTLTa7Hnj3PtRFzkGg
提取码:b2ke

jdk配置文档

https://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html

android-studio

intellij编辑器插件扩展而来(intellij在13-14年之前特别火爆,直到现在还被很多人青睐)

链接:https://pan.baidu.com/s/1bFXhgpC2XNJqLdZsmyBLtg
提取码:rzv6

安装教程

https://www.runoob.com/android/android-studio-install.html

数据线

四、代码分析

image
image
image
image

代码展示为java文件夹下为控制文件,相当于js文件,res文件相当于资源文件以及布局文件

image
image
image
image
image
image

如需需要给页面添加一个网页

wv.loadUrl("file:///android_asset/index.html");   ///加载本地的页面       ----- 代码在手机,更新需要下载替换
wv.loadUrl("https://h5.m.taobao.com/#index"); /// 加载远程的页面  -----  更新无需下载

如果现实无网络,需要添加权限

<uses-permission android:name="android.permission.INTERNET" />

默认的webviw浏览器是纯洁的,不支持js

/**
* webView目前还不具备真正浏览器的功能
*/
webView.getSettings().setJavaScriptEnabled(true);//相当于google浏览器中的内容设置中的js的设置

//默认情况下,点击webview中的链接,会使用Android系统自带的浏览器打开这个链接。

//如果希望点击链接继续在我们自己的Browser中响应,必须覆盖 webview的WebViewClient对象:

//新建两个对象MWebViewClient 和 MWebChromeClient,他们分别继承自WebViewClient和WebChromeClient
/* Android WebView 做为承载网页的载体控件,他在网页显示的过程中会产生一些事件,
并回调给我们的应用程序,以便我们在网页加载过程中做应用程序想处理的事情。
比如说客户端需要显示网页加载的进度、网页加载发生错误等等事件。

WebView提供两个事件回调类给应用层,分别为WebViewClient,WebChromeClient开发者可以继承这两个类,接手相应事件处理。

WebViewClient 主要提供网页加载各个阶段的通知,比如网页开始加载onPageStarted,网页结束加载onPageFinished等;
WebChromeClient主要提供网页加载过程中提供的数据内容,比如返回网页的title,favicon等。*/

//处理页面加载各个阶段
MWebViewClient mWebViewClient = new MWebViewClient(webView, getApplicationContext());
webView.setWebViewClient(mWebViewClient);
//提供网页加载过程中提供的数据内容
MWebChromeClient mWebChromeClient = new MWebChromeClient( getApplicationContext());
webView.setWebChromeClient(mWebChromeClient);
MWebViewClient.java
public class MWebViewClient extends WebViewClient {private WebView webView;private Context context;public MWebViewClient(WebView webView) {super();this.webView = webView;}public MWebViewClient(WebView webView, Context context) {super();this.webView = webView;this.context = context;}@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {webView.loadUrl(url);return true;}@Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon) {super.onPageStarted(view, url, favicon);}@Overridepublic void onPageFinished(WebView view, String url) {super.onPageFinished(view, url);}@Overridepublic void onLoadResource(WebView view, String url) {super.onLoadResource(view, url);}@Overridepublic void onReceivedSslError(WebView view,SslErrorHandler handler, SslError error) {super.onReceivedSslError(view, handler, error);}
}
MWebChromeClient.javapublic class MWebChromeClient extends WebChromeClient {private Context context;public MWebChromeClient(Context context) {super();this.context = context;}@Overridepublic boolean onJsAlert(WebView view, String url, String message,JsResult result) {return super.onJsAlert(view, url, message, result);}@Overridepublic void onReceivedTitle(WebView view, String title) {super.onReceivedTitle(view, title);}@Overridepublic boolean onJsConfirm(WebView view, String url, String message,JsResult result) {return super.onJsConfirm(view, url, message, result);}@Overridepublic boolean onJsPrompt(WebView view, String url, String message,String defaultValue, JsPromptResult result) {return super.onJsPrompt(view, url, message, defaultValue, result);}
}

假设你现在需要调用系统的拍照功能,android工程师会为你提供一个对象和他对应的方法
WebViewTakePhoto为对象,takePhoto为拍照的方法,

webView.addJavascriptInterface(new MJavascriptInterface1(getApplicationContext()), "WebViewTakePhoto");

通过这样的形式将地址传递给前端,testParams方法由前端定义

webView.loadUrl(“javascript:testParams(http://img4.imgtn.bdimg.com/it/u=103061881,2842093305&fm=26&gp=0.jpg’)”);

MJavascriptInterface1
class MJavascriptInterface1{private Context context;public MJavascriptInterface1(Context context) {// TODO Auto-generated constructor stubthis.context = context;}@JavascriptInterfacepublic void takePhoto(){Toast.makeText(context, "拍照", Toast.LENGTH_SHORT).show();//android调用拍照功能//            webView.loadUrl("javascript:testParams('http://img4.imgtn.bdimg.com/it/u=103061881,2842093305&fm=26&gp=0.jpg')");}}

前端调用拍照方法,在自己的写的触发函数中

window.WebViewTakePhoto.takePhoto()

说:
webview — android、ios的组件 ---- js运行的环境

进行配置

---  支持js---  链接本组件内跳转

根据需求先写页面,假设你的一个按钮需要调用系统的功能,在你的按钮事件中调用由android工程师提供的相对应的对象和其方法即可,同时前端也会定义一些方法,但是前端自己不调用,android会根据webview的loadUrl方法进行调用,并且传参(根据需求看)


http://chatgpt.dhexx.cn/article/UkPnkJJr.shtml

相关文章

Android : 混合开发整理指南

混合开发&#xff1a; 是一种开发模式Hybrid App. 混合开发 Native Web. 另一篇博文&#xff1a;Kotlin与H5通信 场景应用&#xff1a; 例如: 微信公众号通过JSSDK连接Native端和Web端 微信小程序通过内置框架连接Native端和Web端 混合开发的核心技术&#xff1a; JS…

Hybrid APP混合开发的一些经验和总结

Hybrid APP混合开发的一些经验和总结 写在前面&#xff1a; 由于业务需要&#xff0c;接触到一个Hybrid APP混合开发的项目。当时是第一次接触混合开发&#xff0c;有一些经验和总结&#xff0c;欢迎各位一起交流学习~ 1、混合开发概述 Hybrid App主要以JSNative两者相互调用为…

【Python编程入门】引言

What is Python? Python 是由 Guido van Rossum 工程师于1991年所开发&#xff0c;是一种高级的、解释性的、交互式的通用型编程语言。它被设计成具有高度可读性&#xff0c;是一门动态编程语言&#xff0c;并且具备自动垃圾回收机制。Python支持多种编程范式&#xff0c;其中…

python编程入门到实践pdf,python编程入门课 视频

初学者学Python编程如何快速入门? 谷歌人工智能写作项目&#xff1a;小发猫 初学python入门都需要具备那些条件&#xff1f; Python相对比较简单&#xff0c;零基础也能学typescript在npm安装后检测不到。系统学习的话&#xff0c;一般4-6个月左右能学好。python是一门语法优…

Python编程:从入门到实践(基础知识)

第一章 起步 计算机执行源程序的两种方式&#xff1a; 编译&#xff1a;一次性执行源代码&#xff0c;生成目标代码解释&#xff1a;随时需要执行源代码 源代码&#xff1a;采用某种编程语言编写的计算机程序 目标代码&#xff1a;计算机可执行&#xff0c;101010 编程语言…

Python从入门到实践电子书,python编程入门到实践pdf

《Python编程从入门到实践》txt下载在线阅读&#xff0c;求百度网盘云资源 《Python编程》&#xff08;[美]埃里克马瑟斯&#xff08;Eric Matthes&#xff09;&#xff09;电子书网盘下载免费在线阅读资源链接&#xff1a;链接&#xff1a; 提取码&#xff1a;6vcz 书名&a…

《我的世界》Python编程入门(1)Minecraft(我的世界)Python编程环境搭建

一、Minecraft环境搭建&#xff08;手动模式&#xff09; 环境搭建分为三个部分&#xff1a; 1.1、Java环境 Minecraft原始版本是用Java开发的&#xff0c;因此&#xff0c;想运行Minecraft需要安装jdk。安装Java jdk8相对来说兼容性比较好。 &#xff08;1&#xff09;安装…

Python编程

1.华氏温度到摄氏温度的转换 从键盘读取华氏温度&#xff0c;转换成摄氏温度并输出&#xff0c;保留1位小数。 转换公式为&#xff1a;c5/9*(f-32), 其中&#xff0c;f为华为温度&#xff0c;c为摄氏温度。 输入格式: 华氏温度 输出格式: 摄低温度 输入样例: 100 结尾无…

Python编程自学入门学习指南

对于初学者来说&#xff0c;入门很重要&#xff0c;这关系到初学者是从入门到精通还是从入门到放弃。 以下是结合Python的学习经验整理出来的学习路径&#xff0c;主要有四个阶段。 NO.1新手入门阶段&#xff0c;学习基础知识。 一般来说&#xff0c;找一本可靠的书&#x…

python编程入门(适合初学者)

python编程入门 特别说明&#xff1a;这是早期的学习笔记&#xff0c;最近试用Python 3.8.1&#xff08; Dec. 18, 2019&#xff09;&#xff0c;发现安装过程及基本功能差不多。或许对新手还有点用处&#xff0c;就未作大修改发布于此。 IDLE是开发python程序的基本IDE&#x…

python编程入门自学

作为一个什么都不懂的小白&#xff0c;学习编程的第一步当然是掌握一门编程语言。本节就来介绍常见的编程语言的学习路线。 首先&#xff0c;先明确一个观点&#xff0c;作为一个程序员&#xff0c;只会一种编程语言是远远不够的。最好精通1~2门语言&#xff0c;基本掌握其它所…

Python编程 介绍(入门)

作者简介&#xff1a;一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 一.pytnon安装地址 二.python介绍 1.Python来源 2.Python LOGO&#xff08;蟒…

编程语言python入门-Python基础教程,Python入门教程(非常详细)

Python 英文本意为"蟒蛇”&#xff0c;直到 1989 年荷兰人 Guido van Rossum &#xff08;简称 Guido&#xff09;发明了一种面向对象的解释型编程语言&#xff08;后续会介绍&#xff09;&#xff0c;并将其命名为 Python&#xff0c;才赋予了它表示一门编程语言的含义。…

Python编程入门教程

http://www.tzcoder.cn/acmhome/news.do?methodnewsDetail&id2c903bb4796f8da101798391db600b2e 本博客原文地址&#xff1a;Python编程入门教程(以在线评测平台为载体) - 暴力都不会的蒟蒻 - 博客园&#xff0c;原文体验更佳 如果你是一名浙江2020级及以后的高中生要学…

python零基础入门教程(非常详细),从零基础入门到精通,看完这一篇就够了

前言 本文罗列了了python零基础入门到精通的详细教程&#xff0c;内容均以知识目录的形式展开。 第一章&#xff1a;python基础之markdown Typora软件下载 Typora基本使用 Typora补充说明 编程与编程语言 计算机的本质 计算机五大组成部分 计算机三大核心硬件 操作系统 第二…

python入门基础(完整)

安装及配置 使用的编程地址&#xff1a;编程地址python基础相关文件安装&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1ZAhPIJ4_KAgWRHzX1lD3dQ 提取码&#xff1a;nxis pycharm配置环境 将原本pycharm中不可见的显示出&#xff0c;需要勾选以下三个&#xff1a;…

Python编程基础(快速入门必看)

Python编程基础 一、Python语言基本语法 Python是一个结合了解释性、编译性、互动性和面向对象的高级程序设计语言&#xff0c;结构简单&#xff0c;语法定义清晰。Python最具特色的就是使用缩进来表示代码块&#xff0c;不需要使用大括号{}。缩进的空格数是可变的&#xff0…

IPv4地址分类(A类 B类 C类 D类 E类)

5类地址&#xff08;A类 B类 C类 D类 E类&#xff09; IPv4地址由四段组成&#xff0c;每个字段是一个字节&#xff0c;8位&#xff0c;最大值是255&#xff0c;, IPv4地址由两部分组成&#xff0c;即网络地址和主机地址。网络地址表示其属于互联网的哪一个网络&#xff0c;主…

计算机网络中的A类、B类、C类地址的划分

原创不易,麻烦点个关注,点个赞,谢谢各位。 A类地址的第一组数字为1~126。注意,数字0和 127不作为A类地址,数字127保留给内部回送函数,而数字0则表示该地址是本地宿主机,不能传送。 范围:1.0.0.1到126.255.255.254 B类地址的第一组数字为128~191。 范围:128.0.0.1…

【计算机网络】B类IP地址

做笔试的时候遇到这个B类IP地址&#xff0c;做个笔记&#xff1a; B类IP地址是指:从 128.0.0.0 到 191.255.255.255 的单址广播 IP 地址 B类主机地址范围:128.0.0.1到191.255.255.254。 前两个八位二进制指明网络&#xff0c;后两个八位二进制指明网络上的主机。 172.16.0.0到…