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 (HTML5) 是一种基于 HTML、CSS 和 JavaScript 技术的网页标准,它广泛应用于现代网站及移动应用开发。H5 网站或者 H5 应用的制作无论是基于 PC 端还是移动端都已经成为了现代化的标准,接下来本文将详细介绍 H5 的制作流程
2023-05-26
招聘兼职直播app内嵌h5开发
随着短视频和直播行业的兴起,越来越多的人开始加入到直播卖货和直播间互动的群体中。同时,直播平台也不断推出新的功能来增加用户粘性。其中,直播内嵌H5功能是一种比较实用的功能,能够实现更加丰富多样的互动体验。下面将详细介绍兼职直播app内嵌H5开发的原理。首先
2023-05-26
深圳h5开发app
深圳H5开发APP是指通过HTML5、CSS3和JavaScript等Web前端技术来开发运行在移动平台上的应用程序,H5 APP具有快捷、简单的特性,同时又能够兼容多个操作系统平台,不需要下载安装,具有较高的用户体验度。下面,我们将从原理和详细介绍两方面
2023-05-26
免费h5小游戏制作app有哪些
随着移动互联网和智能手机的普及,H5小游戏越来越受欢迎。相比传统PC游戏,H5小游戏无需下载和安装,操作简单,体积小巧,可以在任何有网络连接的设备上玩耍。这也让H5小游戏逐渐成为了移动互联网上的主流游戏类型。本篇文章将介绍一些免费的H5小游戏制作app。1
2023-05-26
vue做的h5嵌入app如何登录比较好
在移动应用程序中,为了保持用户的登录状态,大多数应用程序都需要用户在应用程序中输入其凭据。 但是,我们可能有时候需要将一个网站或一个H5页面嵌入到移动应用程序中,此时,我们如何在这个嵌入的H5页面中实现登录的功能呢?在Vue.js框架中,我们可以通过以下几
2023-05-25
h5做app哪个好用
在现代手机应用市场上,随着HTML5技术的成熟,将网页应用直接转化为原生应用已经成为可能。而这种方法就是利用HTML5技术来开发跨平台的手机应用程序。下面我们就来说一说究竟HTML5的应用运用哪家强。1. PhoneGapPhoneGap是由Adobe公司
2023-05-25
h5做的app有什么影响
HTML5是一种用于网页开发的编程语言,同时也是一种用于移动应用程序开发的技术,因为它能够在移动端运行,并且不需要任何额外的插件来实现。这使得HTML5技术在成为移动应用开发中的重要组成部分。本文将介绍HTML5在移动应用程序开发中的影响,以及其相关原理。
2023-05-25
h5页面app打包发布
将 H5 页面打包成 App 并发布在应用商店上已经成为了一种趋势。用户可以更方便地访问和使用应用,而开发者也可以获得更多的用户和收益。下面介绍一下 H5 页面打包发布的原理和步骤。#### 1. 原理在打包 H5 页面为 App 时,主要有两种实现方式:
2023-05-25
h5页面制作软件app代码
H5页面制作软件app是一种可以轻松制作H5网页的工具,开发者可以在其中简单地使用图形化界面来设计H5页面,而不需要编写代码。下面介绍H5页面制作软件app的原理和详细介绍。一、原理H5页面制作软件app的原理就是通过一些预设的模板和组件,用户可以在其中自
2023-05-25
h5软件制作工具app
H5是由HTML、CSS和JavaScript组成的移动应用程序开发技术,它是目前最为流行的一种移动应用程序开发技术之一。而H5软件制作工具APP则是一种帮助开发者利用H5技术轻松制作出应用程序的软件。H5软件制作工具APP原理:H5软件制作工具APP通常
2023-05-25
h5打包app域名
H5是一种基于Web技术的应用程序开发方式,可以实现应用的跨平台和在线即时更新。随着移动互联网的发展,H5应用变得越来越受欢迎,也出现了很多将H5应用打包成原生App的工具,比如Cordova、PhoneGap等。打包H5应用成原生App有很多优点,比如可
2023-05-25
app开发环境中h5端跨域问题
在移动APP开发中,当我们需要在应用中嵌入H5页面的时候,通常会遇到跨域问题。本文将从原理和详细介绍两个角度对这个问题进行解析。原理首先我们来了解一下什么是跨域问题。跨域问题指的是在同源策略下,由于浏览器的安全限制,一个网页无法直接访问另一个域名下的资源。
2023-05-25
©2015-2021 一门APP yimenapp.com  川公网安备 51019002001185号 蜀ICP备17005078号-3