热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

混合开发基础

1.混合开发的解决方案方案一:dcloud(hbuilder)国内一款通用的框架,性能比phonegap高方案二:phonegap(Adobe公司所出的将phonegap捐献给了Apa

1.混合开发的解决方案

  • 方案一:dcloud(hbuilder)国内一款通用的框架,性能比phonegap高
  • 方案二:phonegap(Adobe公司所出的将phonegap捐献给了Apache),cordova最经典的一款混合开发的框架
  • 方案三:APICloud 编写都是在本地 打包在云端
  • 方案四:react native 国外比较火
  • 方案五:WEX5
  • 方案六:微信里面做混合开发

2.混合开发原理

a:什么是混合开发?

使用写web方式去写原生

b:有哪些优势?

  1. 开发周期短(写一次就可以运行在各个手机版本上面)
  2. 跨平台(写一次的内容 可以同时跑在安卓和ios设备上面)
  3. lib丰富性(资源丰富,比如各种js库)

c:有哪些缺点?

  1. 打包后资源 偏大
  2. 性能低
  3. css+js兼容,以及提供更好的api,兼容性差距不大

d:怎么做到的(原理)?

  • 为什么可以使用html+css进行构建页面

    原因是原生应用给我们目前开发中提供了一个webview(原生提供的浏览器), 我们可以再webview上面写css,html,来构建页面。

  • 为什么可以使用js方式就可以调用原生的api
    js写在webview里面,而java程序在应用启动的时候,将一些原生的api定制成了js可以调用的api,注入到webview里面去,就可以在webview中调用原生。

将注入到webview里面的js叫做 桥接js jsBridge .
  • 为什么写一次就可以在不同的平台上面进行运行?

    通过js方式调用原生,通过桥接的js

  • 桥接js作用
    1. 将一些原生的api注入到当前页面里面去,可以在当前页面调用(js形式注入进来的)
    2. 在html页面里面通过js调用原生

只要原生注入到webview里面的桥接js规范和接口都是统一的,直接调用就可以实现一次编写多次使用。

归纳:==安卓和ios同时对上提供了统一标准的接口,可以直接在webview中通过桥接js的方式进行调用==

3.基于dcloud实现的一个混合开发的案例

文档地址:www.dcloud.io
 document.addEventListener('plusready', function(){
//console.log("所有plus api都应该在此事件发生后调用,否则会出现plus is undefined。"

});
  • 注意点:

    1. 确定使用dcloud进行开发的时候,页面中一定要存在一个事件,plusready,
      plusready实际上是原生将桥接js注入到页面中的容器,进行任何方法调用的时候都在plusready之后。
    2. 所有api方法全部都托管在了一个plus对象中。
      使用语法plus.模块名称.具体方法(参数,callback)

第一个案例:在真机下,实现拍照功能

var btn = document.getElementsByTagName('button');
btn[0].addEventListener('touchend',function(){
//调用原生API
//获取camera模块 plus.camera; 获取摄像头 getCamera
var _camera = plus.camera.getCamera();
//captureImage拍照方法 参数:成功回调函数,失败回调函数,配置{config}
_camera.captureImage(function(path){
alert('拍照成功,返回的路径是'+path);
// 参数path是相对路径
//plus.io.convertLocalFileSystemURL(path);将当前路径转换成本地路径
var _io = plus.io;
var _path = _io.convertLocalFileSystemURL(path);
var img = document.createElement('img');
img.style.display='block';
img.style.width = '18rem';
img.style.height = '10rem';
img.src=_path;
document.body.appendChild(img)
},function(){},{})
})

拍摄小视频:

//录像
btn[1].addEventListener('touchend',function(){
//获取摄像头
var _camera = plus.camera.getCamera();
//startVideoCapture:调用摄像头进行摄像操作
_camera.startVideoCapture(function(path){
alert('拍摄成功,视频路径为:'+path);
//将当前路径转换成本地路径
var _path = plus.io.convertLocalFileSystemURL(path);
var video = document.createElement('video');
//controls 属性规定浏览器应该为视频提供播放控件。
video.cOntrols="controls";
video.autoplay="autoplay";
video.style.display='block';
video.style.width = '18rem';
video.style.height = '10rem';
video.src = _path;
document.body.appendChild(video);
},function(){},{})
});

app如何进行打包 — 打包成apk文件
- 登录hbulid - manifest.json—点击云端获取appid—右键项目—发行—发行为原生安装包—打包

打开相册
- Gallery模块管理系统相册,支持从相册中选择图片或视频文件、保存图片或视频文件到相册等功能。通过plus.gallery获取相册管理对象。

//打开相册选择一张照片
btn[2].addEventListener('touchend',function(){
//plus.gallery获取相册管理对象
var _gallery = plus.gallery;
//pick方法:从系统相册选择文件(图片或视频)
_gallery.pick(function(path){
alert('选择图片的路径为'+path);
var _path = plus.io.convertLocalFileSystemURL(path);
var img = document.createElement('img');
img.style.display='block';
img.style.width = '18rem';
img.style.height = '10rem';
img.src=_path;
document.body.appendChild(img);
},function(){},{})
});

打开多个图片

//从相册打开多张照片
btn[3].addEventListener('touchend',function(){
var _gallery = plus.gallery;
var img='';
_gallery.pick(
function(path){
alert('图片的路径'+JSON.stringify(path));
var _files= path.files;
for(var i in _files){
img +=''"/>'
}
document.getElementById('img_cxt').innerHTML = img;
},
function(){},
{
multiple:true,
maximum:9,
system:false
}
)
})

4.熟练dcloud中常用的api(混合开发的api)

  1. 打开相册plus.gallery.pick进行打开
    选取多个图片{multiple:true,maximum:9,system:false}
  2. device模块里面 震动
    3.webview index.html 相当于一个webview
    当从一个页面切换到另一个页面的时候,切换的时候伴随着一些动画
    open close currentWebView()//获取当前webview的id
    4.nativeUI alert(”);
    就是原生控件

推荐阅读
  • 关于extjs开发实战pdf的信息
    本文目录一览:1、extjs实用开发指南2、本 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 本文介绍了Sencha Touch的学习使用心得,主要包括搭建项目框架的过程。作者强调了使用MVC模式的重要性,并提供了一个干净的引用示例。文章还介绍了Index.html页面的作用,以及如何通过链接样式表来改变全局风格。 ... [详细]
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
  • 本文概述了JNI的原理以及常用方法。JNI提供了一种Java字节码调用C/C++的解决方案,但引用类型不能直接在Native层使用,需要进行类型转化。多维数组(包括二维数组)都是引用类型,需要使用jobjectArray类型来存取其值。此外,由于Java支持函数重载,根据函数名无法找到对应的JNI函数,因此介绍了JNI函数签名信息的解决方案。 ... [详细]
  • Java面试题系列:将面试题中比较经典和核心的内容写成系列文章持续在公众号更新,可巩固基础知识,可梳理底层原理,欢迎大家持续关注【程序新视界】。本篇为面试题系列第2篇。常见面试问 ... [详细]
  • 微信商户扫码支付 java开发 [从零开发]
    这个教程可以用作了解扫码支付的整体运行过程,已经实现了前端扫码,记录订单,回调等一套完整的微信扫码支付。相关链接:微信支 ... [详细]
  • 腾讯T3大牛亲自教你!2021大厂Android面试经验,经典好文
    本篇将由环境搭建、实现原理、编程开发、插件开发、编译运行、性能稳定、发展未来等七个方面,对当前的ReactNative和Flutter进行全面的分析对比, ... [详细]
  • 1.webkit内核中的一些私有的meta标签,这些meta标签在开发webapp时起到非常重要的作用(1) ... [详细]
  • 01mui框架使用概述
    1MUI概述1.1MUI诞生背景?性能和体验的差距,一直是手机APP开发者放弃HTML5的首要原因。浏览器默认控件样式又少又丑,制作一 ... [详细]
  • Android Studio中的IBM MobileFirst Compile问题 - IBM MobileFirst Compile in Android Studio Issue
    IbuiltaMultipageapplicationbyusingIBMMobileFirst,accordingto据我所知,我使用IBMMobileFirst构建了一个 ... [详细]
  • H5前端开发_金三银四,H5前端开发如何用性能优化征服前端面试官?
    本文由编程笔记#小编为大家整理,主要介绍了金三银四,H5前端开发如何用性能优化征服前端面试官?相关的知识,希望对你有一定的参考价值。许多Web性能优化都是无效的,问题出在哪 ... [详细]
  • 安卓开发入门!BAT大厂面试基础题集合,顺利通过阿里Android岗面试
    其实不是Android不行了,而是你跟不上了我的很多读者都在反馈说,现在一个岗位可以收到的简历数,是前几年的几倍。我们必须承认ÿ ... [详细]
author-avatar
手机用户2602906791
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有