Weex 致力於使開發者能基於當代先進的 Web 開發技術,使用同一套代碼來構建 Android、iOS 和 Web 應用。css
weex SDK 集成了vueJS,Rax,不須要額外引入。html
1)搭建android環境:首先安裝搭建好AndroidStudio,參照react-native 官網環境搭建(比較清楚),適用於weex。vue
node
$ npm install -g weex-toolkit
$ weex -v //查看當前weex版本
3)初始化一個項目react
$ weex create 項目名字
4)咱們先經過 npm install
安裝項目依賴。以後運行根目錄下的 npm run dev & npm run serve
開啓 watch 模式和靜態服務器。android
而後咱們打開瀏覽器,進入 http://localhost:8080/index.html
便可看到 weex h5 頁面。ios
首先安裝一個adb,下載地址 http://adbshell.com/downloads , 正確安裝adb,https://jingyan.baidu.com/article/22fe7cedf67e353002617f25.html ,web
經過usb連接手機,電腦,執行命令 weex run androidshell
1)關於全局對象:npm
在開發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
"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) },