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技术来制作web页面,如微信、淘宝、京东等。本文将会介绍制作h5页面的常用app原理和详细介绍。一、HBuilderHBuilder是一个免费的IDE,它支持HTML5,CSS3
2023-05-26
制作h5页面模板app
在移动互联网时代,H5页面的应用越来越广泛,而构建H5页面的方式也多种多样,包括手写代码、使用开源库等。其中,一种常见的方式是通过制作H5页面模板app来实现。H5页面模板app是一种基于移动端的应用,主要功能是提供H5页面的制作工具和模板,用户可以轻松地
2023-05-26
什么app可以免费做h5
H5,即HTML5,是一种用于创建网页和网应用程序的标准语言。使用H5技术可以创建精美的网页,使用户能够在不同设备上获得相同的使用体验。H5技术的应用非常广泛,从Web游戏到视频,包罗万象。许多人都希望能够使用H5技术来制作自己的网页或者应用程序,但是可能
2023-05-26
哪些app做h5
H5是一种基于HTML5技术的移动WEB页面的界面设计,具有很好的跨平台兼容性和高自由度的页面结构设计。许多APP都采用了H5技术,使得应用程序可以更加丰富和完整。在本文中,我们将介绍一些使用H5技术的APP,包括原理和详细介绍。1. 微信公众号微信公众号
2023-05-26
h5游戏app如何开发
H5游戏app是基于网页技术开发的游戏App,由于其无需下载和安装,跨平台兼容,广泛应用于移动互联网领域。本文将介绍开发H5游戏app的原理和详细步骤。一、开发工具选择开发H5游戏app需要选择适合的开发工具,常用的有以下两种:1. HBuilderXHB
2023-05-25
h5页面免费打包app
H5页面是我们在浏览器中通过HTML、CSS和JavaScript来创建的页面,这些页面可以很容易地在不同的设备上访问,包括PC、平板和手机等设备。除了在浏览器中访问这些页面外,我们还可以使用一些工具将这些H5页面打包成一个app,以便用户可以更快捷地访问
2023-05-25
h5小程序app开发
H5小程序APP开发:基础介绍H5小程序APP,以微信小程序为例,是一种新型的应用程序类型,它是微信生态圈的一部分,具有轻量级、开发简单、易分享、跨平台等优点,这让很多在互联网领域尚未开展业务和营销的中小企业可以考虑微信小程序作为一种新型的扩展业务渠道。理
2023-05-25
h5混合开发app常用代码
H5混合开发是一种将H5页面嵌入原生App中的开发方式。相比于纯原生开发,H5混合开发有着快速开发、跨平台、易维护等优点,已经成为App开发的常用方式。以下是H5混合开发常用的代码及其原理或详细介绍。1. WebView控件WebView是H5混合开发的核
2023-05-25
h5封装app的原理
H5封装App的原理主要是通过将Web页面嵌入到App的容器中,利用App的底层功能,如底层设备、操作系统等,来增强Web页面的功能和性能,实现以Web技术为基础的移动应用开发。以下是H5封装App的详细原理介绍:1. 容器概念在进行H5封装App时,我们
2023-05-25
h5 制作app
HTML5 开发应用程序是一种全新的方式,它是基于开放的 Web 标准和技术来实现的。HTML5 不但可以用来开发网站,也可以用来开发跨平台的应用程序。下面我们来详细介绍下如何使用 HTML5 制作 App,包含应用原理、开发平台、开发流程等。一、App
2023-05-25
h5 app开发框架实战
H5 App是一种运行在移动设备的web应用程序。H5 App的开发与传统的web开发相比,需要考虑更多的兼容性和性能问题。因此,利用框架可以提升开发效率和应用性能,降低开发难度。一、H5 App开发框架的目的H5 App开发框架的目的是为了让开发者快速地
2023-05-25
app原生开发和h5app有什么区别
随着移动互联网的快速发展,越来越多的应用程序被开发出来来适应不同的用户需求,其中,app原生开发和h5app 是开发人员常用的两种应用程序开发方式。那么,它们之间有什么区别呢?本文将会对app原生开发和h5app进行详细介绍和比较。app原生开发是通过特定
2023-05-25
©2015-2021 一门APP yimenapp.com  川公网安备 51019002001185号 蜀ICP备17005078号-3