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是一种基于Web技术的开发模式,可以开发出许多跨平台的应用,但是却有一个明显的缺点,就是不能像原生应用那样打包成一个独立的应用程序。为了解决这个问题,出现了一种将H5应用打包成原生应用的方法,即原生h5打包封装app。本文将详细介绍原生h5打包封装ap
2023-05-26
原生app怎么生成h5
在移动应用开发中,原生应用与web应用是两种常见的应用类型,原生应用通过本地安装的方式在手机上运行,拥有更高的性能,更好的用户体验,但开发成本和时间相对比较高;web应用则是通过浏览器访问的方式运行,能够跨平台,同时开发成本和时间相对较低,但相对于原生应用
2023-05-26
手机制作h5 课件app
现在,越来越多的教育者和学生开始接受移动学习,因此,基于移动端的课件APP越来越受欢迎。创造一个课件APP并不困难,大致步骤如下:步骤一:确定制作方式制作课件APP的方式有两种,一种是基于webview和html5的混合开发。其好处在于可以借助HTML5网
2023-05-26
h5移动端天气app开发教程
随着移动设备的普及,人们不再需要打开电脑或者翻开报纸,便可以随时随地了解天气信息。目前市场上有许多优秀的天气预报应用程序,其中不乏具有高质量的用户体验的优秀应用程序。在这篇文章中,我们将探讨如何使用HTML5、CSS3和JavaScript技术来制作一个简
2023-05-25
h5商城封装app
H5商城封装APP是一种基于网页开发语言HTML、CSS、JavaScript等技术实现的跨平台移动应用程序开发方法。该方法利用WebView或Hybrid等技术将H5页面嵌入到原生APP中,实现在原生应用中展示H5网页的功能,具有简单、跨平台、易于维护等
2023-05-25
h5开发ios app开发
H5开发iOS App是一种利用Web技术(HTML、CSS、JS)开发iOS应用的方法,相比于原生App开发,它具有跨平台、易于维护等优点。下面是对H5开发iOS App的原理和详细介绍。一、原理H5开发iOS App的原理是基于iOS平台的Webvie
2023-05-25
h5封装app支付
H5封装App支付是一种在移动App内使用浏览器进行支付的方式,可以让用户在不离开App的情况下完成支付操作。在支付方式的选择上,H5支付成为了非常受欢迎的一种方式。那么,H5封装App支付的原理和具体实现是怎样的呢?一、原理H5封装App支付原理是将Ap
2023-05-25
h5打包为app工具
H5是一种基于HTML5、CSS3、JavaScript和其他前端技术的开发语言,目前在各个领域得到了广泛的应用,尤其在移动应用开发方面,可以通过将H5打包为APP的方式,快速部署到移动应用市场,给用户提供更好的体验。下面将介绍H5打包为APP的原理和实现
2023-05-25
h5打包app支付问题
在移动互联网时代,越来越多的企业和开发者开始关注H5应用的开发和打包。相对于传统的原生应用开发,H5应用开发更加灵活、便捷和低成本。同时,随着支付宝、微信等移动支付工具的普及,企业和开发者也越来越关注H5应用中支付相关的问题。H5应用中支付的基本流程如下:
2023-05-25
h5 在线生成app
H5在线生成APP是指通过网站提供的服务,用户可以将自己编写的H5网页转换成可以安装运行在手机中的APP。该服务的原理是将编写好的H5网页打包成APP的形式,然后提供用户下载和使用。具体实现的方法可以分为以下几步:1. 选择APP生成平台和模板:用户需要先
2023-05-25
h5 app开发环境搭建
随着移动互联网的迅速发展,越来越多的应用程序开始向移动设备转移。同时,HTML5成为了最受欢迎的选择之一,因为它可以在所有设备上运行,并且不需要使用原生编程语言。因此,本文将介绍如何搭建H5 App开发环境,让你快速开始开发适合移动设备的网页应用。一、工具
2023-05-25
app打包h5注意事项
随着移动设备和互联网的普及,越来越多的公司和个人开始开发移动应用程序。对于那些不想花费大量时间和资金进行原生应用程序开发的人来说,转向混合应用程序或基于网页的应用程序相对较为便捷。随着云计算和网络性能的不断提高,基于网页的应用程序在移动设备上的表现也越来越
2023-05-25
©2015-2021 一门APP yimenapp.com  川公网安备 51019002001185号 蜀ICP备17005078号-3