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
移动应用成为现代生活不可或缺的一部分,越来越多的企业和个人都开始了自己的移动应用开发之旅。但是,对于没有移动应用开发经验的人,如何快速创建一个应用并打包成APP就成为了一个难题。源码生成H5源码打包APP成为了一种解决方案。源码生成H5源码打包APP是指通
2023-05-26
苏州h5开发app
H5开发app,在移动互联网时代由于具有跨平台、开发成本低、更新便利等优势而变得越发流行,同时也在快速成长进化。H5开发app是指使用HTML、CSS、JavaScript等技术开发的,运行在浏览器中的web应用程序,通过在内嵌浏览器容器中运行来达到类似原
2023-05-26
傻瓜式h5制作app
近年来,移动互联网的兴起早已成为全球性的趋势,人们更加倾向于通过移动端了解事物及购物消费等,而对于企业和商家也通过移动APP获得更多的利润和市场切入角度。但是,制作APP并不是每个人都能轻松掌握技巧的,有了h5傻瓜式APP制作工具可以解决这个问题,让大多数
2023-05-26
苹果app生成h5
在现今的App时代,很多人喜欢使用移动应用程序,因为它们可以提供更好的用户体验和更高的安全性。然而,也有一些弊端,比如移动应用程序占用很多设备存储空间,而且不可跨平台。而H5技术可以解决这些问题,让开发者只需要开发一次,就可以在各种不同的平台上运行。苹果A
2023-05-26
免费制作海报或h5的app
免费制作海报或H5的APP应用广泛,大多数都是通过收集大量模板和素材,然后用户选择或自定义制作的过程,实现快速高效制作。这里介绍两种常见的免费APP:「海报工厂」和「ULIKE」。这两款APP都支持海报和H5的制作,且都可以在App Store或Googl
2023-05-26
h5游戏如何封装打包成app
H5游戏是一种以HTML5技术为基础,使用JavaScript等前端技术实现的网页游戏。由于其优秀的跨平台性能和易于开发的特点,越来越多的游戏开发者开始使用H5技术开发跨平台游戏。然而,H5游戏在跨平台进行游戏时,用户需要通过浏览器打开游戏网址,不太方便。
2023-05-25
h5手机端app开发
HTML5是一种用于网页设计的标准语言,支持许多功能,包括绘画和动画。近年来,HTML5越来越受欢迎,因为它可以用于多个平台,包括智能手机和平板电脑等移动设备。而基于HTML5开发的移动应用就是H5手机端app,下面就为大家详细介绍一下H5手机端app开发
2023-05-25
h5平台如何做成app
HTML5是一个在互联网领域大规模使用的技术,可以用于构建网站、Web应用程序和跨平台移动应用程序。由于HTML5应用程序具有可移植性、可扩展性和具有挑战性,因此它们具有吸引力。 为什么要将H5平台做成App呢?前端工程师倾向于使用HTML5技术发展App
2023-05-25
h5混合开发app是什么意思
H5混合开发是一种结合WebView与HTML5技术的移动应用开发模式,它利用H5技术来构建业务模型、UI界面等,同时运用WebView组件来实现各种特定目标,允许在手机App中嵌入Web页面。H5混合开发允许开发者利用现有的Web技术来设计移动应用,从而
2023-05-25
h5 app开发平台
H5 app开发平台是一种让开发者可以用HTML5、CSS3和JavaScript等技术开发微信、支付宝等社交平台的一种开发平台。这种开发方法比较适合开发移动端的应用程序,具有设备适配性、展现效果高、开发效率高等优势。下面我们简单地介绍一下H5 app开发
2023-05-25
app开发用h5还是原生
移动应用的开发方式可以分为两种:原生和H5。原生即使用本地开发语言和框架,如Objective-C、Java、Swift等语言开发应用程序,针对一定的操作系统和设备进行优化,实现更加流畅的用户体验。H5则是用HTML5、CSS3、JavaScript等We
2023-05-25
app h5开发框架
随着互联网技术的不断发展和移动设备的普及,H5技术也随之兴起。H5开发框架是一种常用的手机应用程序开发软件,大大简化了使用H5技术开发手机应用的难度并提高了开发效率。本文将对H5开发框架进行原理和详细介绍。一、H5概述H5技术(HTML5)是新一代的网站开
2023-05-25
©2015-2021 一门APP yimenapp.com  川公网安备 51019002001185号 蜀ICP备17005078号-3