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手机app是指通过HTML5技术在移动设备上开发的应用程序。与原生应用程序相比,H5手机app具有较好的跨平台适配性,可以在不同的移动操作系统上运行,同时开发成本也较低。本文将介绍几种制作H5手机app的方法和工具。1. 使用框架我们可以使用一些H5手
2023-05-26
制作h5的手机app
随着移动互联网的快速发展,越来越多的企业开始关注H5手机应用的开发。H5手机应用相较于原生应用更加轻量级,可以不需要下载安装、不占用手机内存、一键分享等优势,成为企业和开发者的首选。H5应用是基于web技术进行开发的应用,由HTML、CSS、JavaScr
2023-05-26
深圳项目开发h5和app交互
深圳项目开发H5和App交互的原理是两个不同的平台进行信息传递和交互。在移动互联网时代,App已经成为了人们日常生活中必不可少的一部分,而H5则是一个性能越来越优越、使用越来越广泛的网页应用。H5和App的交互,可以通过SDK工具包来实现,也可以通过Web
2023-05-26
哪些app是用的h5开发的
H5是HTML5技术的简称,是一种新的Web技术标准,可以让开发者用Web技术来创建手机App,有着开发成本低、维护简单、跨平台等优点,因此在现今的移动互联网市场上受到越来越多的关注。接下来,我们将为您介绍一些使用H5技术开发的App,并探讨其原理及特点。
2023-05-26
大风秀h5制作app
大风秀是一款强大的H5制作工具,主要用于快速构建精美的移动页面及APP。使用大风秀,可以方便地添加各种页面元素、动画特效、交互效果等。同时,大风秀拥有强大的自适应排版引擎,能够在不同屏幕尺寸的设备上呈现出最佳的效果。下面,将介绍大风秀制作APP的原理和方法
2023-05-25
北京h5开发app价格
在信息技术领域中,H5无疑已经成为一个重要的技术手段,越来越多的企业和个人开始意识到其重要性。在移动应用领域中,H5技术同样可以发挥其特长,通过利用H5开发移动应用可以较快、低成本实现多平台支持,增强应用的可访问性和适应性。那么,针对北京地区的H5开发ap
2023-05-25
北京h5开发app
随着移动互联网的发展,越来越多的企业开始将自己的业务拓展到移动端。前端页面的开发也从最初的PC端网页发展到了移动端HTML5页面。而移动端的一款APP最终也需要一个主界面,而这个主界面的开发就离不开HTML5的应用。本文将介绍北京h5开发app的原理和详细
2023-05-25
h5制作软件有什么app
H5制作软件,顾名思义就是可以使用HTML5语言进行网页设计的软件。HTML5的出现,为我们的网页设计提供了更加丰富的元素和技术,使得网页设计的效果更为灵活和实用。因此,H5制作软件也越来越受到了人们的喜爱。下面是一些常见的H5制作软件的介绍。一、 "Sc
2023-05-25
h5制作app教程
随着移动互联网的发展,APP已经成为人们生活和工作中不可或缺的一部分,越来越多的企业与开发者都希望自己的产品拥有一个专属的APP。然而,大多数人可能都不知道,其实用H5技术也可以制作出一个APP。那么,我们就来详细介绍一下H5制作APP的原理和流程。一、什
2023-05-25
h5如何制作app
H5(HTML5)是一种用于创建网络内容的语言,由于其轻量化、可定制、易于开发、易于维护和可扩展,嵌入移动应用程序中已经成为了一种流行趋势。制作 App 的基本思路是将手机浏览器中的 H5 网页,以一种特殊的形式进行打包,使得它能够在手机端独立运行,并且拥
2023-05-25
h5打包app ios
HTML5是一种基于Web的技术,可以实现跨平台的应用程序开发。在iOS平台上,可以使用一些打包工具将HTML5应用转化为原生应用,这样就可以在App Store中发布,并且能够正常运行在iOS设备上。下面是一些常见的HTML5应用打包工具:1. Phon
2023-05-25
app可以用h5界面开发嘛
APP是指通过原生应用程序安装在移动终端上的应用,主要运行在各个移动操作系统上,如iOS、Android等。而H5界面则是基于HTML、CSS、JavaScript等Web技术开发的移动网页应用,主要运行于浏览器上。那么,可以用H5界面开发APP吗?答案是
2023-05-25
©2015-2021 一门APP yimenapp.com  川公网安备 51019002001185号 蜀ICP备17005078号-3