APP封装从一门开始
一门提供APP封装底层开发框架,一键在线APP封装,200+原生APP模块,2000+JS映射接口按需自助封装

封装h5为app

在互联网时代,移动应用的市场越来越火爆。不仅仅是大型APP,像小程序、H5应用这种轻量级的应用越来越受到用户的欢迎。但是,由于不是原生应用,H5应用并不能和原生应用有同等的使用效果。封装H5应用为原生应用则可以弥补这一短板,本文将介绍封装H5应用为原生应用的原理及详细步骤。

一、封装H5应用的原理

封装H5应用为原生应用的原理其实很简单,这里主要分两步:

1. 将H5应用解压缩到本地目录中,并使用Webview调用index.html文件;

2. 使用桥接方式,将原生App和JS之间的交互打通。

第一步使用的是Webview技术,它是Android系统中的一种组件,可以在应用内加载网页并显示出来。我们只需要把H5应用的全部静态文件打包成一个zip压缩包,在App中解压缩,然后使用WebView控件打开H5应用中的index.html文件即可。

第二步则需要从两个应用技术角度考虑:原生应用和H5应用之间要如何通信?具体来说,就是如何实现原生App调用H5应用,以及H5应用回调原生App的功能。这一步主要实现思路是在原生App中内置一个JavaScript桥接文件,通过该文件,JS可以直接读取原生App的接口,另一方面,原生App也可以通过该文件直接调用H5中的js方法。

二、封装H5应用的具体步骤

下面详细介绍一下,封装H5应用为原生应用的具体步骤。

1. H5应用的打包和解压

我们首先需要将H5应用的代码打包成zip文件,命名为“app.zip”,然后将该zip文件复制到App的assets目录下。当App启动时,首先从资源目录中读取app.zip文件,并解压到磁盘上,如下所示:

```

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//复制app.zip到sdcard根目录下,并解压到app目录中

String zipPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/app.zip";

String appPath = getApplicationContext().getFilesDir().getAbsolutePath();

FileUtils.copyFile(zipPath, appPath + "/app.zip"); //复制

ZipUtils.unZip(appPath + "/app.zip", appPath + "/app"); //解压

}

}

```

在解压之后,我们需要将H5应用的入口文件(index.html)通过Webview调用出来,如下所示:

```

public class MainActivity extends AppCompatActivity {

private WebView mWebView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//找到WebView控件,并加载index.html

mWebView = (WebView) findViewById(R.id.web_view);

String appPath = getApplicationContext().getFilesDir().getAbsolutePath();

mWebView.loadUrl("file://" + appPath + "/app/index.html");

}

}

```

2. 原生App和H5应用之间的交互

下面我们将介绍如何实现App和H5应用之间的交互。

首先,创建一个JsBridge类,这个类继承自WebViewClient。按照常规做法,在加载H5应用时用该类覆盖掉WebView的默认实现。我们可以通过这个桥接文件,在App和H5应用之间建立双向通信通道。下面的示例代码演示了如何将原生App的功能暴露给JS:

```

public class JsBridge extends WebViewClient {

private WeakReference mActivityRef;

//原生App调用H5应用

public void callJs(WebView webView, String jsFunc, String message) {

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {

webView.evaluateJavascript("javascript:" + jsFunc + "('" + message + "')", null);

} else {

webView.loadUrl("javascript:" + jsFunc + "('" + message + "')");

}

}

//H5应用调用原生App

public boolean shouldOverrideUrlLoading(WebView view, String url) {

if (url.startsWith("jsbridge://")) {

String[] urls = url.split("//");

String message = urls[1];

String func = urls[2];

callNative(func, message); //调用原生App的方法

return true;

}

return super.shouldOverrideUrlLoading(view, url);

}

//调用原生App的方法

private void callNative(String func, String message) {

Activity activity = mActivityRef.get();

if (activity != null) {

if ("showToast".equals(func)) {

Toast.makeText(activity, message, Toast.LENGTH_SHORT).show();

} else if ("callPhone".equals(func)) {

Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + message));

activity.startActivity(intent);

} else if ("openUrl".equals(func)) {

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(message));

activity.startActivity(intent);

}

}

}

}

```

上面代码中, 原生App和H5应用中的通讯协议采用“jsbridge://”形式,其中jsbridge前缀为自定义协议的名称。H5应用通过window.location.href属性调用原生App的接口,调用格式为:

```

window.location.href='jsbridge://message/callNative?abc'

```

接下来,我们在MainActivty类中将JsBridge类作为WebView的Client实现,并注册全局的桥接对象:

```

public class MainActivity extends AppCompatActivity {

private WebView mWebView;

private JsBridge mJsBridge = new JsBridge(this);

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//找到WebView控件,并加载index.html

mWebView = (WebView) findViewById(R.id.web_view);

mWebView.getSettings().setJavaScriptEnabled(true);

mWebView.setWebViewClient(mJsBridge);

mWebView.addJavascriptInterface(new JsApi(this), "JsApi");

String appPath = getApplicationContext().getFilesDir().getAbsolutePath();

mWebView.loadUrl("file://" + appPath + "/app/index.html");

}

}

```

在上面的代码中,我们使用addJavascriptInterface方法将原生功能依附到JS的window对象上,这样就可以在JS中直接调用该接口了。JsApi类的源代码如下:

```

public class JsApi {

private Activity mActivity;

public JsApi(Activity activity) {

mActivity = activity;

}

@JavascriptInterface

public void showToast(String message) {

Toast.makeText(mActivity, message, Toast.LENGTH_SHORT).show();

}

@JavascriptInterface

public void openUrl(String url) {

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));

mActivity.startActivity(intent);

}

@JavascriptInterface

public void share(String message) {

Intent shareIntent = new Intent(Intent.ACTION_SEND);

shareIntent.setType("text/plain");

shareIntent.putExtra(Intent.EXTRA_TEXT, message);

mActivity.startActivity(Intent.createChooser(shareIntent, "Share this"));

}

}

```

三、总结

本文主要介绍了如何将H5应用封装为原生App,主要包括两步:将H5应用解压缩到本地,并使用Webview调用index.html文件;使用桥接方式,将原生App和JS之间的交互打通。如果你正在开发一些轻量级应用,H5应用的封装为原生App则是一个有效的方案,不仅使得用户使用起来更加方便,也增加了应用的流行度。


相关知识:
做h5的app蜜蜂
H5技术在移动端的应用越来越广泛,其中之一就是通过H5技术实现APP开发。在这个领域,蜜蜂(MIP)无疑是一个重要的代表。本文将详细介绍如何做一个基于H5技术的蜜蜂APP,并介绍一些原理和特点。一、蜜蜂(MIP)是什么?MIP是移动网页加速开放平台(Mob
2023-05-26
有没有制作h5的app免费的
HTML5是一种超文本标记语言,可用于创建跨平台应用程序。通过HTML5和相关技术,您可以使用Web技术来创建运行在移动设备、桌面电脑和其他平台上的应用程序。本文将介绍如何使用HTML5和相关技术创建H5应用程序。首先,让我们了解一下H5应用程序的概念。H
2023-05-26
微页h5制作app
微页是一款非常受欢迎的H5制作软件,它可以用来制作各种互动页面,包括一些非常流行的活动页面,比如婚礼喜帖、商业宣传页面、活动页面等等。而微页制作的互动页面可以非常方便地在微信、微博等社交媒体平台进行分享,并且可以通过二维码等方式进行传播。下面,我将详细介绍
2023-05-26
微信公众号h5封装app
微信公众号H5封装App是指将H5页面封装到APP中,并通过微信公众号进行推广和管理的一种方式。相比于传统APP开发,微信公众号H5封装App具备开发周期短、维护成本低、推广范围广等优点,已成为很多企业推广H5页面的重要方式之一。一、原理微信公众号H5页面
2023-05-26
免费h5制作app下载
近年来,随着移动互联网的快速发展,APP已经成为人们日常生活中不可或缺的一部分。很多人对于如何制作一个自己的APP产生了浓厚的兴趣,但又因为缺乏技术或时间而无从下手。不过,现在有一种方法能够帮助想要制作APP的人轻松搞定,那就是使用免费H5制作APP的工具
2023-05-26
连云港h5开发app
连云港H5开发APP是一种基于HTML/CSS/JS等Web技术的混合式开发方式,它可以跨平台运行,并且可以通过cordova、phonegap等平台开发工具进行打包和发布。H5开发APP的优点是跨平台、开发成本低、维护更新简单等,但同时也存在一些缺点,如
2023-05-26
uniapp 开发app 就是套h5吗
UniApp 是一款由DCloud公司推出的开发框架,可以同时基于同一套代码,支持编译到iOS、Android、H5、小程序、快应用等多个平台,实现跨平台开发。UniApp的开发原理:UniApp并不是基于H5技术来开发App,而是利用多个平台原生的Web
2023-05-25
uni app h5打包
Uni App 是一套基于 Vue.js 开发的跨平台应用开发框架,可以同时开发出 App、小程序、H5 等多种平台的应用。其中 H5 平台作为 Web 应用的一种,是相对于原生 App 而言不需要安装即可直接访问的,它能够跨越不同的操作系统和设备,具有广
2023-05-25
h5开发体验性为何不如原生app
HTML5开发虽然被广泛认为是一种跨平台、节约成本的高效开发方式,但在体验方面却远远无法与原生APP相比。原生APP在用户交互、流畅度、速度感等方面都有明显优势,而HTML5在这些方面则存在着不小的缺陷。下面我们就来逐一分析HTML5开发体验不如原生APP
2023-05-25
h5封装app扫一扫调用不起来
H5封装App是一种将H5网页应用封装成原生应用的技术手段,可以让网页应用更流畅、更具交互性,并且可以获得更多的原生功能。在实现H5封装App的过程中,常常会遇到一些问题,比如扫码调用不起来的问题。本文将介绍H5封装App扫码调用不起来的原理和解决方法。1
2023-05-25
h5打包app不需要签名
HTML5(即Web)应用程序通常部署在Web服务器上,用户通过浏览器使用,这种应用程序的开发,部署和更新都非常方便。由于Web应用程序是运行在Web浏览器上,Web浏览器没有操作系统的特权,Web应用程序也就自然不具有操作系统特权。这就给Web应用程序的
2023-05-25
app开发h5
移动应用程序开发和网页开发的融合一直是一个热门话题,而H5技术就是一种将这两种开发方式融合在一起的解决方案。H5是HTML5的缩写,是一种可以在Web浏览器上运行的标准语言,它提供了类似于移动应用程序的用户体验。H5技术逐渐成为了开发移动应用程序的首选技术
2023-05-25
©2015-2021 一门APP yimenapp.com  川公网安备 51019002001185号 蜀ICP备17005078号-3