weex入门篇

Weex 致力于使开发者能基于当代先进的 Web 开发技术,使用同一套代码来构建 Android、iOS 和 Web 应用。

weex SDK 集成了vueJS,Rax,不需要额外引入。

一)环境的搭建

1)搭建android环境:首先安装搭建好AndroidStudio,参照react-native 官网环境搭建(比较清楚),适用于weex。

2)安装weex环境

$ npm install -g weex-toolkit
$ weex -v //查看当前weex版本

3)初始化一个项目

$ weex create 项目名字

4)我们先通过 npm install 安装项目依赖。之后运行根目录下的 npm run dev & npm run serve开启 watch 模式和静态服务器。

然后我们打开浏览器,进入 http://localhost:8080/index.html 即可看到 weex h5 页面。

二)真机调试

首先安装一个adb,下载地址 http://adbshell.com/downloads , 正确安装adb,https://jingyan.baidu.com/article/22fe7cedf67e353002617f25.html ,

通过usb链接手机,电脑,执行命令 weex run android

三)开发注意

1)关于全局对象:

在开发h5项目的时候会经常性的使用到document,history,location,navigator,window,screen等一些全局变量,但是在开发三端兼容的项目的时候不能使用。

window、screen -----> WXEnvironment或者weex.config.env.platform

document -----> weex.requireModule("dom")

2)关于导航:

weex集成了vueRouter,但是使用vueRouter只是单页面,在浏览器中的vue应用,通过浏览器的“前进”,”后退“仍然会处于同一个页签,但是在原生应用中的”前进“,”后退“则会跳出这个页签到其他页面。因此建议使用weex的提供的navigator进行页面跳转。

3)关于css样式:

weex适配默认是iphone6 (750)的物理像素宽的等比缩放方式,无视屏幕分辨率和尺寸,采用flex流式布局。

weex 不支持样式嵌套多层查询,例如 .outer-wrapper .inner-item 这种多类嵌套查询。

不支持样式继承,例如color,fontSize。

image元素要给出width,height不然无法显示图片。

不识别样式属性的简写 margin: 0 0 10px 10px,要写成margin-top:0;margin-right:0margin-bottom:10px; margin-left:10px; color: #888 -> #888888; blue -> #0000FF

4)静态资源图片的加载web,android,ios三个平台的加载方式有不同,要做代码处理,

android需要将图片资源放置在 \platforms\android\app\src\main\res\ drawable-**文件中,

ios: platforms\ios\images

下面给出一段拷贝图片的具体实现:

copyFile.js

// @fun 针对于weex框架image静态资源加载web,ios,android的加载方式不同做的特殊处理
'use strict'
const mkdirp = require('mkdirp')
const filecopy = require('filecopy')
// google play上上架
/**
*google play会根据不同的手机density来打不同的apk包(举个栗子,如果是hdpi的机器,下载下来的就只有hdpi的资源)
*如果是在国内的市场话。建议只放一套(h或者xhpdi),因为国内市场是没有上面那种机制的,放多套资源会导致安装包变得很大。
*此外: Android在没有找到相应dpi的图片时,会用其他density的图片进行缩放处理。
*/ // 获取命令行参数
let paltformDefine = process.argv.slice(2)[0]
let filePath = 'src/assets/icons/*.png'
let androidIconPlatform = ['drawable-hdpi', 'drawable-mdpi', 'drawable-xhdpi', 'drawable-xxhdpi'] if (paltformDefine === 'android') {
let androidPath = 'platforms/android/app/src/main/res/'
mkdirFile(androidPath).then(res => {
androidIconPlatform.forEach((item, index) => {
copyIcon(`${androidPath}` + `${item}`)
})
}).catch(err => {
return err
})
} else if (paltformDefine === 'ios') {
let iosPath = 'platforms/ios/images/'
mkdirFile(iosPath).then(res => {
copyIcon(iosPath)
}).catch(err => {
return err
})
} function copyIcon (fileDestPath) {
filecopy(filePath, fileDestPath, {
mkdirp: true
}).then(() => {
return ''
}).catch(() => {
console.log('file copy fail')
})
} function mkdirFile (fileName) {
return new Promise((resolve, reject) => {
mkdirp(fileName, function (err) {
if (err) {
return reject(err)
}
return resolve(true)
})
})
}

getImageFile:

module.exports = {
getImageFile: function (imageName) {
if (!weex || !weex.config || !weex.config.env) {
return
}
let _dotPoint = (imageName + '').lastIndexOf('.')
let _pureFileName = (imageName + '').slice(0, _dotPoint)
// let _imageFormat = (imageName + '').slice(_dotPoint)
// 平台信息
let _platform = weex.config.env.platform
if (_platform === 'android') {
let _filePrefix = 'local:///'
return _filePrefix + _pureFileName
}
if (_platform === 'iOS') {
let _filePrefix = 'local://'
return _filePrefix + _pureFileName
}
if (_platform === 'Web') {
let _filePrefix = '../../src/assets/icons/'
return _filePrefix + imageName
}
}
}

npm command

"scripts": {
 "copyFile:android": "node src/utils/copyFile.js android",
"copyFile:ios": "node src/utils/copyFile.js ios",
"copy": "npm run copyFile:android && npm run copyFile:ios"

执行 npm run copy即可,完成图片资源的复制

具体在页面上使用

  <image class="player-icon" :src="_getImageFile('player.png')"/>

   // 获取image 路径
_getImageFile (ImageName) {
return commonFun.getImageFile(ImageName)
},
参考: https://www.sunzhongwei.com/weex-android-ios-loaded-local-pictures

weex入门篇的更多相关文章

  1. Weex入门篇——Mac 安装Weex

    相关文档:http://blog.csdn.net/jasonblog/article/details/51863173 前言 相比较于React Native的“Learn once, write ...

  2. Membership三步曲之入门篇 - Membership基础示例

    Membership 三步曲之入门篇 - Membership基础示例 Membership三步曲之入门篇 -  Membership基础示例 Membership三步曲之进阶篇 -  深入剖析Pro ...

  3. spring boot(一):入门篇

    构建微服务:Spring boot 入门篇 什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...

  4. 1. web前端开发分享-css,js入门篇

    关注前端这么多年,没有大的成就,就入门期间积累了不少技巧与心得,跟大家分享一下,不一定都适合每个人,毕竟人与人的教育背景与成长环境心理活动都有差别,但就别人的心得再结合自己的特点,然后探索适合自己的学 ...

  5. 一个App完成入门篇(七)- 完成发现页面

    第七章是入门篇的倒数第二篇文章了,明天整个APP将进入收官. 本节教程主要要教会大家使用二维码扫描和用do_WebView组件加在html页面. 导入项目 do_WebView组件 扫描功能 自定义事 ...

  6. [原创]Linq to xml增删改查Linq 入门篇:分分钟带你遨游Linq to xml的世界

    本文原始作者博客 http://www.cnblogs.com/toutou Linq 入门篇(一):分分钟带你遨游linq to xml的世界 本文原创来自博客园 请叫我头头哥的博客, 请尊重版权, ...

  7. 转:OSGi 入门篇:模块层

    OSGi 入门篇:模块层 1 什么是模块化 模块层是OSGi框架中最基础的一部分,其中Java的模块化特性在这一层得到了很好的实现.但是这种实现与Java本身现有的一些模块化特性又有明显的不同. 本文 ...

  8. 转:OSGi 入门篇:生命周期层

    OSGi 入门篇:生命周期层 前言 生命周期层在OSGi框架中属于模块层上面的一层,它的运作是建立在模块层的功能之上的.生命周期层一个主要的功能就是让你能够从外部管理应用或者建立能够自我管理的应用(或 ...

  9. 【three.js详解之一】入门篇

    [three.js详解之一]入门篇   开场白 webGL可以让我们在canvas上实现3D效果.而three.js是一款webGL框架,由于其易用性被广泛应用.如果你要学习webGL,抛弃那些复杂的 ...

随机推荐

  1. Python笔记 #04# Methods

    源:DataCamp datacamp 的 DAILY PRACTICE  + 日常收集. Methods String Methods List Methods 缺一 Methods You can ...

  2. Signing package index... Cannot open file '/home/jello/openwrt/key-build' for reading

    一.环境 发行版:Ubuntu 18.04.1 LTS 代号:bionic 内核版本:4.15.0-30-generic 二.背景 在编译Openwrt/LEDE时出现以下错误,进而自动终止了编译: ...

  3. LINQ 学习路程 -- 查询操作 GroupBy ToLookUp

    Grouping Operators Description GroupBy GroupBy操作返回根据一些键值进行分组,每组代表IGrouping<TKey,TElement>对象 To ...

  4. UVa 10635 王子和公主(LCS转LIS)

    https://vjudge.net/problem/UVA-10635 题意: 有两个长度分别为p+1和q+1的序列,每个序列中的各个元素互不相同,且都是1~n^2之间的整数.两个序列的第一个元素均 ...

  5. Question: Database Of Tumor Suppressors And/Or Oncogenes

    https://www.biostars.org/p/15890/     71   5.9 years ago by Malachi Griffith ♦16k Washington Univers ...

  6. 最全android Demo

    1.BeautifulRefreshLayout-漂亮的美食下拉刷新 https://github.com/android-cjj/BeautifulRefreshLayout/tree/Beauti ...

  7. RabbitMQ入门_03_推拉模式

    我们知道,消费者有两种方式从消息中间件获取消息: 推模式:消息中间件主动将消息推送给消费者 拉模式:消费者主动从消息中间件拉取消息 推模式将消息提前推送给消费者,消费者必须设置一个缓冲区缓存这些消息. ...

  8. 雷林鹏分享:Ruby CGI方法

    Ruby CGI方法 以下为CGI类的方法列表: 序号方法描述 1CGI::new([ level="query"]) 创建 CGI 对象.query可以是以下值: query: ...

  9. PHP-----------HTTP请求的第三方接口

    开发中常常遇到接口请求这个功能,后台也不例外,因为遇到了,所以写一篇. 前段时间做商城后台时,需要用到第三方物流接口查询物流信息. post: /**** * @param $url * @param ...

  10. 水晶报表VS2010防止出现用户登录问题

    1.联合查询,采用视图办法 2.借用如下语句 using CrystalDecisions.CrystalReports.Engine; using CrystalDecisions.Shared; ...