HTML5 Plus應用概述
HTML5 Plus移動App,簡稱5+App,是一種基於HTML、JS、CSS編寫的運行於手機端的App,這種App可以通過擴展的JS API任意調用手機的原生能力,實現與原生App同樣強大的功能和性能。
HTML5 Plus規範
通過HTML5開發移動App時,會發現HTML5很多能力不具備。爲彌補HTML5能力的不足,在W3C中國的指導下成立了HTML5中國產業聯盟www.html5plus.org組織,推出HTML5+規範。目前該聯盟已經掛靠在工信部信通院標準所下,相關標準已經成爲行業標準。
HTML5+規範是一個開放規範,隸屬於工信部,允許三方瀏覽器廠商或其他手機runtime製造商實現。
HTML5+擴展了JavaScript對象plus,使得js可以調用各種瀏覽器無法實現或實現不佳的系統能力,設備能力如攝像頭、陀螺儀、文件系統等,業務能力如上傳下載、二維碼、地圖、支付、語音輸入、消息推送等。
除了功能外,HTML5+很重要的特點是提供了原生的渲染能力,通過plus.webview、plus.nativeObj、plus.nativeUI,讓開發者可以使用js來調用原生渲染能力,實現體驗的大幅提升。
原生的api多達40萬,HTML5+的封裝並非把40萬api都封裝了一遍,而是分成了2個層面:
- HTML5Plus規範:常用的擴展能力,比如二維碼、語音輸入,都封裝到了規範中,同時實現了Android和iOS的解析引擎,使得開發者的代碼編寫一次,可跨平臺運行。
- Native.js是另一項創新技術。手機OS的原生API有四十多萬,大量的API無法被HTML5使用。Native.js把幾十萬原生API映射成了js對象,通過js可以直接調ios和android的原生API。這部分就不再跨平臺,寫法分別是plus.ios和plus.android,比如調ios game center,或在android手機桌面創建快捷方式,這些都是平臺專有的api。
Native.js的用法示例,var obj= plus.android.import("android.content.Intent");,將一個原生對象android.content.Intent映射爲js對象obj,然後在js裏操作obj對象的方法屬性就可以了。
Native.js的詳細教程可以參考:5+ App開發Native.js入門指南
在5+App裏,同時包含了HTML5Plus規範和Native.js的實現,開發者可以在5+App裏自由使用相關技術。
5+ App概念解析
首先開發者需要清楚你要做什麼,是一個mobile web項目,運行在瀏覽器裏?還是要做一個app,安裝和運行在手機上?或者要把一個mobile web項目打包成app?
- 做一個mobile web項目
在這個模式下,開發者用不到HTML5Plus,使用標準的HTML5語法,運行在瀏覽器裏。這不算5+ App。
此時開發者仍然可以使用HBuilder這個開發工具,新建項目時選擇web項目。
開發者也仍然可以使用DCloud提供的mui開源框架,來簡化ui的開發。
但這就是一個普通的web項目,b/s方式,不可脫線運行,不能調用HTML5Plus的增加api。 - 做一個正統的app
傳統意義上的app,是c/s方式的,它的程序要安裝和運行在手機上,不通過瀏覽器在線下載。
此時開發者在HBuilder裏新建項目時,選擇“移動App”。(HBuilderX裏選擇5+App)
在App項目下編寫的HTML、js等文件,是會被打包到原生的安裝包(Android是apk包、iOS是ipa包)裏的。
此時本地的js和服務器通過ajax交互,由服務器按接口方式給出數據(一般是json),然後客戶端的js文件解析json,並根據本地的業務邏輯來渲染頁面和執行功能。
所以請不要在App項目中放置運行在服務器端的php等文件。 - 使用wap2app打包mobile web項目爲app
如果開發者想把一個做好的mobile web站,方便快速的打包成app,那麼要使用DCloud的wap2app框架。
在HBuilder中新建項目時,選wap2app項目,把mobile web站的url輸入進去,參考框架的教程來配置。
wap2app不同於普通的web打包技術,wap2app可真正做達到原生應用的功能和性能體驗。
具體教程另見:文檔中心-wap2app,http://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/1244
wap2app屬於5+app,它底層也是強大的HTML5Plus規範和Native.js在支撐。
wap2app項目下的所有文件,也都是打包在本機運行的。 - 如果你想開發一次,全端覆蓋,那麼需要使用DCloud的另一個產品uni-app
HTML5+ 應用架構
HTML5+ 規範 API 及demo示例
最新規範請參考http://www.html5plus.org/#specification
手機端體驗各個API的實現效果,ios手機在Appstore搜索Hello H5+,Android手機下載地址。
在HBuilder中新建移動App,選Hello H5+,即可看到這個demo的源代碼。
開發環境HBuilder
HBuilder內置HTML5+ APP開發環境,提供一套完整的移動應用開發解決方案。內置HTML5+ API語法提示,提高開發效率;集成真機運行環境,方便開發後即時在真機上查看運行效果;集成應用雲端打包系統,不用部署xcode和Android sdk就可以打包應用。使開發者只需要使用HTML5、Javascript、CSS技術就可以快速開發跨平臺的移動應用。
下載地址:http://www.dcloud.io/
平臺支持
- iOS 5.0及以上
- Android 2.3及以上
手把手教你開發HelloWorld(重點,重點,重點,必須說三遍)
創建HelloWorld應用
- 啓動HBuilder(下載地址:http://www.dcloud.io/);
- 在菜單欄中選擇“文件”-> “新建”->“移動App”(快捷鍵Ctrl+N A),打開“創建移動App”對話框,在應用名稱中輸入“HelloWorld”;
- 如果是HBuilderX,則新建項目時選5+App。
注意新建移動App需要聯網分配一個appid,在真機聯調、打包發行時都需要這個ID,所以不聯網無法創建移動App。 - 創建完成後,會在項目管理器中顯示新建的“HelloWorld”項目
manifest.json(超級重要的配置文件)
在項目管理器中雙擊“manifest.json”文件,打開應用配置頁面:
對於要打包的原生應用而言,其各種配置均在此處。具體配置教程見:Manifest.json文件配置,或者點擊配置頁面上的“manifest文件配置指南”鏈接。
配置鏈接:https://ask.dcloud.net.cn/article/94
配置如下:
概述
manifest.json文件是5+移動App的配置文件,用於指定應用的顯示名稱、圖標、入口頁面等信息。用戶可通過HBuilder|HBuilderX的可視化界面視圖進行配置,也可在源碼視圖中根據以下規範直接修改。
manifest.json文件根據w3c的webapp規範制定,plus節點下內容爲HTML5 Plus擴展規範,其下包括iOS和Android子節點,內容來源分別爲iOS和Android原生打包所要求的參數,用於對5+移動App打包爲ipa或apk安裝包進行配置。
uni-app項目的manifest.json規範參考:https://uniapp.dcloud.io/collocation/manifest
鏈接:https://uniapp.dcloud.io/collocation/manifest
屬性 | 類型 | 描述 |
---|---|---|
android | Object | Android 應用配置,詳見: 完整 manifest.json |
ios | Object | iOS 應用配置,詳見: 完整 manifest.json |
sdkConfigs | Object | SDK配置,僅打包生效 詳見 |
orientation | Array | 重力感應、橫豎屏配置,可取值:"portrait-primary":豎屏正方向;"portrait-secondary":豎屏反方向;"landscape-primary":橫屏正方向;"landscape-secondary":橫屏反方向。 |
三方原生SDK配置。三方SDK的使用需要向這些SDK提供商申請,並配置參數到此處。可在HBuilderX可視化界面(App SDK配置)輸入配置,此配置僅雲打包後生效,本地打包需自行在原生工程中配置。
屬性 | 類型 | 描述 |
---|---|---|
oauth | Object | 授權登錄,配置後可調用 uni.login 進行登錄操作,目前支持的授權登錄平臺有:QQ、微信、新浪微博。 |
share | Object | 分享,配置後可調用 uni.share 進行分享,目前支持QQ、微信、新浪微博等分享, 具體配置 詳見。 |
push | Object | push配置,使用方式 詳見,目前支持:uniPush、個推、小米推送,注意App僅支持一種 push 方式,配置多個 push 無效,建議使用 uniPush,支持多廠商推送。 |
payment | Object | 三方支付配置,配置後可調用 uni.payment 進行支付,目前支持微信支付、支付寶支付、蘋果內購, 具體配置 詳見。 |
statics | Object | 統計配置,目前僅支付友盟統計,詳見,在uni-app中只用 plus.statistic 進行調用。 |
speech | Object | 語音識別配置,支持訊飛語音、百度語音,詳見,在uni-app中只用 plus.speech 進行調用。 |
maps | Object | 原生地圖配置,目前僅支持 高德地圖,申請方式可參考:地圖插件配置。 |
nvue
頁面佈局初始設置
屬性 | 類型 | 描述 |
---|---|---|
flex-direction | String | flex 成員項的排列方向,支持項,row:從左到右; row-reverse:從右到左;column:從上到下;column-reverse:與 column 相反,默認值 column。 |
h5
屬性 | 類型 | 說明 |
---|---|---|
title | String | 頁面標題,默認使用 manifest.json 的 name |
template | String | index.html模板路徑,相對於應用根目錄,可定製生成的 html 代碼。參考:自定義模板 |
router | Object | 參考:router |
async | Object | 參考:async |
devServer | Object | 開發環境 server 配置,參考:devServer |
publicPath | String | 引用資源的地址前綴,僅發佈時生效。參考:publicPath |
sdkConfigs | String | SDK配置,例如地圖... 參考:sdkConfigs |
optimization | Object | 打包優化配置(HBuilderX 2.1.5 以上支持),參考optimization |
需要使用自定義模板的場景,通常有以下幾種情況:
- 調整頁面 head 中的 meta 配置
- 補充 SEO 相關的一些配置(僅首頁)
- 加入百度統計等三方js
使用自定義模板時,1. 工程根目錄下新建一個html文件;2. 複製下面的基本模板內容,到這個html文件,在此基礎上修改meta和引入js;3. 在 manifest.json->h5->template
節點中關聯這個html文件的路徑。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<title>
<%= htmlWebpackPlugin.options.title %>
</title>
<script>
document.addEventListener('DOMContentLoaded', function() {
document.documentElement.style.fontSize = document.documentElement.clientWidth / 20 + 'px'
})
</script>
<link rel="stylesheet" href="<%= BASE_URL %>static/index.css" />
</head>
<body>
<noscript>
<strong>Please enable JavaScript to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>
在hello uni-app示例中有一個template.h5.html
文件,即是此用途。
關於SEO的補充說明
H5平臺是SPA單頁應用,普通的SEO信息即加meta字段只能在,自定義的模板html裏配置首頁。
但SEO的時代在變,現在更有效的方式,是用uni-app同時發佈一版百度小程序,這個搜索權重更高。DCloud的ask社區的H5版也是uni-app做的,同時發佈了百度小程序,權重更高,每天來自百度的搜索量非常多。是一個可現身說法的好案例。
屬性 | 類型 | 默認值 | 說明 |
---|---|---|---|
mode | String | hash | 路由跳轉模式,支持 hash、history |
base | String | / | 應用基礎路徑,例如,如果整個單頁應用服務在 /app/ 下,然後 base 就應該設爲 "/app/" |
注意:history
模式發行需要後臺配置支持,詳見:history 模式的後端配置
屬性 | 類型 | 默認值 | 說明 |
---|---|---|---|
loading | String | AsyncLoading | 頁面 js 加載時使用的組件(需註冊爲全局組件) |
error | String | AsyncError | 頁面 js 加載失敗時使用的組件(需註冊爲全局組件) |
delay | Number | 200 | 展示 loading 加載組件的延時時間(頁面 js 若在 delay 時間內加載完成,則不會顯示 loading 組件) |
timeout | Number | 3000 | 頁面 js 加載超時時間(超時後展示 error 對應的組件) |
屬性 | 類型 | 默認值 | 說明 |
---|---|---|---|
https | Boolean | false | 啓用 https 協議 |
disableHostCheck | Boolean | false | 禁用 Host 檢查 |
Tips:uni-app
中 manifest.json->h5->devServer
實際上對應 webpack
的 devServer,鑑於 manifest 爲 json 文件,故 webpack.config.js->devServer
配置項下的簡單類型屬性均可在manifest.json->h5->devServer
節點下配置,funciton 等複雜類型暫不支持。
配置 publicPath 爲 cdn 資源地址前綴,這樣編譯出來的 html 文件,引用的 js,css 路徑會自動變成 cdn 上的地址。
示例
以 hello-uniapp 發佈 H5 時爲例
未配置 publicPath 時,發佈時 index.html 中的結果:
<script src=/h5/static/js/chunk-vendors.803ce52d.js></script>
<script src=/h5/static/js/index.34e8497d.js>
配置 publicPath 爲 https://www.cdn.com/h5/
(無效地址僅用作示例) 後,發佈時 index.html 中的結果:
<script src=https://www.cdn.com/h5/static/js/chunk-vendors.803ce52d.js></script>
<script src=https://www.cdn.com/h5/static/js/index.34e8497d.js>
注意
-
打包部署後,在服務器上開啓 gzip 可以進一步壓縮文件。具體的配置,可以參考網上的分享:https://juejin.im/post/5af003286fb9a07aac24611b
示例
"h5": {
"sdkConfigs": {
"maps": {
"qqmap": {
//騰訊地圖祕鑰(key)
"key": "XVXBZ-NDMC4-JOGUS-XGIEE-QVHDZ-AMFV2"
}
}
}
}
屬性 | 類型 | 默認值 | 說明 |
---|---|---|---|
prefetch | Boolean | false | 資源預取 |
preload | Boolean | false | 資源預加載 |
treeShaking | Object | 搖樹優化,根據項目需求,動態打包框架所需的組件及API,保持框架代碼最精簡化,參考treeShaking |
屬性 | 類型 | 默認值 | 說明 |
---|---|---|---|
enable | Boolean | false | 是否啓用搖樹優化 |
示例:
"h5": {
"optimization": {
"treeShaking": {
"enable": true
}
}
}
Tips:關於搖樹優化(treeShaking)原理及優化結果,參考:https://ask.dcloud.net.cn/article/36279
mp-weixin
屬性 | 類型 | 說明 |
---|---|---|
appid | String | 微信小程序的AppID,登錄 https://mp.weixin.qq.com 申請 |
usingComponents | Boolean | 是否啓用自定義組件模式,v1.8.0+ ,默認爲false,編譯模式區別詳情 |
setting | Object | 微信小程序項目設置,參考setting |
functionalPages | Boolean | 微信小程序是否啓用插件功能頁,默認關閉 |
requiredBackgroundModes | Array | 微信小程序需要在後臺使用的能力,詳見 |
plugins | Object | 使用到的插件,詳見 |
resizable | Boolean | 在iPad上小程序是否支持屏幕旋轉,默認關閉 |
navigateToMiniProgramAppIdList | Array | 需要跳轉的小程序列表,詳見 |
permission | Object | 微信小程序接口權限相關設置,比如申請位置權限必須填此處詳見 |
workers | String | Worker 代碼放置的目錄。 詳見 |
編譯到微信小程序平臺下的項目設置。
屬性 | 類型 | 說明 |
---|---|---|
urlCheck | Boolean | 是否檢查安全域名和 TLS 版本 |
es6 | Boolean | ES6 轉 ES5 |
postcss | Boolean | 上傳代碼時樣式是否自動補全 |
minified | Boolean | 上傳代碼時是否自動壓縮 |
mp-alipay
屬性 | 類型 | 說明 |
---|---|---|
usingComponents | Boolean | 是否啓用自定義組件模式,v2.0+ ,默認爲false,編譯模式區別詳情 |
mp-baidu
屬性 | 類型 | 說明 |
---|---|---|
appid | String | 百度小程序的 AppID,登錄 https://smartprogram.baidu.com/docs/introduction/enter_application/ 申請 |
usingComponents | Boolean | 是否啓用自定義組件模式,v2.0+ ,默認爲false,編譯模式區別詳情 |
requiredBackgroundModes | Array | 小程序需要在後臺使用的能力,目前支持背景音頻播放,"requiredBackgroundModes": ["audio"],詳見 |
prefetches | Array | 預請求的所有url的列表,詳見 |
mp-toutiao
屬性 | 類型 | 說明 |
---|---|---|
appid | String | 頭條小程序的 AppID,登錄 https://developer.toutiao.com/ 申請 |
setting | Object | 頭條小程序項目設置,參考頭條小程序項目設置 |
usingComponents | Boolean | 是否啓用自定義組件模式,v2.0+ ,默認爲false,編譯模式區別詳情 |
navigateToMiniProgramAppIdList | Array | 需要跳轉的小程序列表,詳見 |
屬性 | 類型 | 說明 |
---|---|---|
urlCheck | Boolean | 是否檢查安全域名和 TLS 版本 |
es6 | Boolean | ES6 轉 ES5 |
postcss | Boolean | 上傳代碼時樣式是否自動補全 |
minified | Boolean | 上傳代碼時是否自動壓縮 |
mp-qq
屬性 | 類型 | 說明 |
---|---|---|
appid | String | qq 小程序的 AppID,登錄 https://q.qq.com 申請 |
requiredBackgroundModes | Array | 小程序需要在後臺使用的能力,目前支持背景音頻播放,"requiredBackgroundModes": ["audio"],詳見 |
navigateToMiniProgramAppIdList | Array | 需要跳轉的小程序列表,詳見 |
permission | Object | 小程序接口權限相關設置,比如申請位置權限必須填此處詳見 |
workers | String | Worker 代碼放置的目錄。 詳見 |
groupIdList | String Array | 需要打開羣資料卡的羣號列表,詳見button的open-type |
mp-qq只支持自定義組件模式,不存在usingComponents配置
完整 manifest.json (重點內容)
{
"appid": "__UNI__XXXXXX,創建應用時雲端分配的,不要修改。",
"name": "應用名稱,如uni-app",
"description": "應用描述",
"versionName": "1.0.0",
"versionCode": "100",
// app-plus 節點是 5+App 特有配置,推薦在 HBuilderX 的 manifest.json 可視化界面操作完成配置。
"app-plus": {
// HBuilderX->manifest.json->模塊權限配置
"modules": {
"Contacts": {},
"Fingerprint": {},
"Maps": {},
"Messaging": {},
"OAuth": {},
"Payment": {},
"Push": {},
"Share": {},
"Speech": {},
"Statistic": {},
"VideoPlayer": {},
"LivePusher": {}
},
"distribute": {
// Android 與 iOS 證書相關信息均在打包時完成配置
"android": {
"packagename": "Android應用包名,如io.dcloud.uniapp",
"keystore": "Android應用打包使用的密鑰庫文件",
"password": "Android應用打包使用密鑰庫中證書的密碼",
"aliasname": "Android應用打包使用密鑰庫中證書的別名",
"schemes": [
"應用支持的scheme,大小寫相關,推薦使用小寫"
],
"theme": "程序使用的主題",
"android:name": "自定義程序入口類名",
"custompermissions": "Boolean類型,是否自定義android權限,true表示自定義權限,只使用permissions下指定的android權限,不根據用戶使用的5+模塊自動添加android權限,false表示自動根據用戶使用的5+模塊自動添加android權限",
"permissions": [
"要添加的額外的android權限,如<uses-permission android:name=\"com.android.launcher.permission.INSTALL_SHORTCUT\" />",
"<uses-permission android:name=\"com.android.launcher.permission.UNINSTALL_SHORTCUT\" />"
],
"minSdkVersion": "apk支持的最低版本,默認值爲14",
"targetSdkVersion": "apk的目標版本,默認值爲21"
},
"ios": {
"appid": "iOS應用標識,蘋果開發網站申請的appid,如io.dcloud.uniapp",
"mobileprovision": "iOS應用打包配置文件",
"password": "iOS應用打包個人證書導入密碼",
"p12": "iOS應用打包個人證書,打包配置文件關聯的個人證書",
"devices": "iOS應用支持的設備類型,可取值iphone/ipad/universal",
"urltypes": [{
"urlschemes": [
"hbuilder",
"必選,程序所支持的自定義協議名稱"
],
"id": "可選,自定義協議的標識",
"icon": "可選,打開程序時顯示的圖標"
},
{
"urlschemes": [
"http",
"https",
"必選,程序所支持的自定義協議名稱,大小寫無關,推薦使用小寫"
],
"id": "可選,自定義協議的標識",
"icon": "可選,打開程序時顯示的圖標"
}
],
"frameworks": ["使用native.js調用API要引用的庫文件名稱,如CoreLocation.framework", "QuartzCore.framework"],
"idfa": "true|false,是否使用廣告標識符,默認值爲false",
"plistcmds": [
"Set :權限 使用權限的原因",
"Set :NSCameraUsageDescription 說明使用用戶相機的原因"
]
},
// HBuilderX->manifest.json->SDK配置
"sdkConfigs": {
"maps": {
// 地圖只能選一個,這裏選的是百度。
"baidu": {
"appkey_ios": "",
"appkey_android": ""
}
},
"oauth": {
// 微信登錄
"weixin": {
"appid": "",
"appsecret": ""
},
// QQ登錄
"qq": {
"appid": ""
},
// 新浪微博登錄
"sina": {
"appkey": "",
"appsecret": "",
"redirect_uri": ""
},
// 小米登錄
"xiaomi": {
"appid_ios": "",
"appsecret_ios": "",
"redirect_uri_ios": "",
"appid_android": "",
"appsecret_android": "",
"redirect_uri_android": ""
}
},
"payment": {
// Apple應用內支付
"appleiap": {},
// 支付寶支付
"alipay": {
"scheme": ""
},
// 微信支付
"weixin": {
"appid": ""
}
},
"push": {
// 推送只能選擇一個,這裏選的是個推。
"igexin": {
"appid": "",
"appkey": "",
"appsecret": ""
}
},
"share": {
// 微信分享
"weixin": {
"appid": ""
},
// 新浪微博分享
"sina": {
"appkey": "",
"appsecret": "",
"redirect_uri": ""
},
// 分享到QQ
"qq": {
"appid": ""
}
},
"statics": {
// 友盟統計
"umeng": {
"appkey_ios": "",
"channelid_ios": "",
"appkey_android": "",
"channelid_android": ""
}
}
},
// 屏幕方向
"orientation": [
"portrait-primary",
"landscape-primary",
"portrait-secondary",
"landscape-secondary"
],
// HBuilderX->manifest.json->圖標配置
"icons": {
"ios": {
"appstore": "必選, 1024x1024, 提交app sotre使用的圖標",
"iphone": {
"app@2x": "可選,120x120,iOS7-11程序圖標(iPhone4S/5/6/7/8)",
"app@3x": "可選,180x180,iOS7-11程序圖標(iPhone6plus/7plus/8plus/X)",
"spotlight@2x": "可選,80x80,iOS7-11 Spotlight搜索圖標(iPhone5/6/7/8)",
"spotlight@3x": "可選,120x120,iOS7-11 Spotlight搜索圖標(iPhone6plus/7plus/8plus/X)",
"settings@2x": "可選,58x58,iOS5-11 Settings設置圖標(iPhone5/6/7/8)",
"settings@3x": "可選,87x87,iOS5-11 Settings設置圖標(iPhone6plus/7plus/8plus/X)",
"notification@2x": "可選,40x40,iOS7-11 通知欄圖標(iPhone5/6/7/8)",
"notification@3x": "可選,60x60,iOS7-11 通知欄圖標(iPhone6plus/7plus/8plus/X)"
},
"ipad": {
"app": "可選,76x76,iOS7-11程序圖標",
"app@2x": "可選,152x152,iOS7-11程序圖標(高分屏)",
"proapp@2x": "可選,167x167,iOS9-11程序圖標(iPad Pro)",
"spotlight": "可選,40x40,iOS7-11 Spotlight搜索圖標",
"spotlight@2x": "可選,80x80,iOS7-11 Spotlight搜索圖標(高分屏)",
"settings": "可選,29x29,iOS5-11 設置圖標",
"settings@2x": "可選,58x58,iOS5-11 設置圖標(高分屏)",
"notification": "可選,20x20,iOS7-11 通知欄圖標",
"notification@2x": "可選,40x40,iOS7-11 通知欄圖標(高分屏)"
}
},
"android": {
"mdpi": "必選,48x48,普通屏程序圖標",
"ldpi": "必選,48x48,大屏程序圖標",
"hdpi": "必選,72x72,高分屏程序圖標",
"xhdpi": "必選,96x96,720P高分屏程序圖標",
"xxhdpi": "必選,144x144,1080P高分屏程序圖標",
"xxxhdpi": "可選,192x192"
}
},
// HBuilderX->manifest.json->啓動圖配置
"splashscreen": {
"ios": {
"iphone": {
"retina35": "可選,640x960,3.5英寸設備(iPhone4)啓動圖片",
"retina40": "可選,640x1136,4.0英寸設備(iPhone5)啓動圖片",
"retina40l": "可選,1136x640,4.0英寸設備(iPhone5)橫屏啓動圖片",
"retina47": "可選,750x1334,4.7英寸設備(iPhone6)啓動圖片",
"retina47l": "可選,1334x750,4.7英寸設備(iPhone6)橫屏啓動圖片",
"retina55": "可選,1242x2208,5.5英寸設備(iPhone6Plus)啓動圖片",
"retina55l": "可選,2208x1242,5.5英寸設備(iPhone6Plus)橫屏啓動圖片",
"iphonex": "可選,1125x2436,iPhoneX啓動圖片",
"iphonexl": "可選,2436x1125,iPhoneX橫屏啓動圖片"
},
"ipad": {
"portrait": "可選,768x1004,需支持iPad時必選,iPad豎屏啓動圖片",
"portrait-retina": "可選,1536x2008,需支持iPad時必選,iPad高分屏豎屏圖片",
"landscape": "可選,1024x748,需支持iPad時必選,iPad橫屏啓動圖片",
"landscape-retina": "可選,2048x1496,需支持iPad時必選,iPad高分屏橫屏啓動圖片",
"portrait7": "可選,768x1024,需支持iPad iOS7時必選,iPad豎屏啓動圖片",
"portrait-retina7": "可選,1536x2048,需支持iPad iOS7時必選,iPad高分屏豎屏圖片",
"landscape7": "可選,1024x768,需支持iPad iOS7時必選,iPad橫屏啓動圖片",
"landscape-retina7": "可選,2048x1536,需支持iPad iOS7時必選,iPad高分屏橫屏啓動圖片"
}
},
"android": {
"mdpi": "必選,240x282,普通屏啓動圖片",
"ldpi": "必選,320x442,大屏啓動圖片",
"hdpi": "必選,480x762,高分屏啓動圖片",
"xhdpi": "必選,720x1242,720P高分屏啓動圖片",
"xxhdpi": "必選,1080x1882,1080P高分屏啓動圖片"
}
}
},
// HBuilderX->manifest.json->啓動圖配置->啓動界面選項
"splashscreen": {
"waiting": true,
"autoclose": true,
"delay": 0
},
"error": {
"url": "頁面加載錯誤時打開的頁面地址,可以是網絡地址,也可以是本地地址"
},
"useragent": {
"value": "自定義ua字符串",
"concatenate": "是否爲追加模式"
},
"useragent_ios": {
"value": "與useragent的value一致,僅在iOS平臺生效,當useragent和useragent_ios同時存在時優先級useragent_ios>useragent",
"concatenate": "與useragent的concatenate一致,僅iOS平臺生效"
},
"useragent_android": {
"value": "與useragent的value一致,僅在Android平臺生效,當useragent和useragent_android同時存在時優先級useragent_android>useragent",
"concatenate": "與useragent的concatenate一致,僅Android平臺生效"
},
"ssl": "accept|refuse|warning,訪問https網絡時對非受信證書的處理邏輯",
"runmode": "normal",
"appWhitelist": [
"Android平臺下載apk地址白名單列表",
"iOS平臺跳轉appstore地址白名單列表"
],
"schemeWhitelist": [
"URL Scheme白名單列表,如:mqq" //iOS要求預先指定要打開的App名單,不能隨意調用任何App
],
"channel": "渠道標記,可在DCloud開發者中心查看各渠道應用的統計數據",
"adid": "廣告聯盟會員id,在DCloud開發者中心申請後填寫",
"safearea": { //安全區域配置,僅iOS平臺生效
"background": "#CCCCCC", //安全區域外的背景顏色,默認值爲"#FFFFFF"
"bottom": { // 底部安全區域配置
"offset": "none|auto" // 底部安全區域偏移,"none"表示不空出安全區域,"auto"自動計算空出安全區域,默認值爲"none"
},
"left": { //左側安全區域配置(橫屏顯示時有效)
"offset": "none|auto"
},
"right": { //右側安全區域配置(橫屏顯示時有效)
"offset": "none|auto"
}
},
"softinput": {
"navBar": "auto", //是否顯示iOS軟鍵盤上的“完成”導航條
"mode": "adjustResize|adjustPan" //軟鍵盤彈出模式,
},
"popGesture": "none" //iOS上是否支持屏幕左邊滑動關閉當前頁面。默認是可關閉。設爲none則不響應左滑動畫。
},
// 快應用特有配置
"quickapp": {},
// 微信小程序特有配置
"mp-weixin": {
"appid": "wx開頭的微信小程序appid"
},
// 百度小程序特有配置
"mp-baidu": {
"appid": "百度小程序appid"
},
// 頭條小程序特有配置
"mp-toutiao": {
"appid": "頭條小程序appid"
},
"h5": {
"title": "演示", //頁面標題,默認使用 manifest.json 的 name
"template": "index.html", //index.html模板路徑,相對於應用根目錄,可定製生成的 html 代碼
"router": {
"mode": "history", //路由跳轉模式,支持 hash|history ,默認 hash
"base": "/hello/" //應用基礎路徑,例如,如果整個單頁應用服務在 /app/ 下,然後 base 就應該設爲 "/app/"
},
"async": { //頁面js異步加載配置
"loading": "AsyncLoading", //頁面js加載時使用的組件(需註冊爲全局組件)
"error": "AsyncError", //頁面js加載失敗時使用的組件(需註冊爲全局組件)
"delay": 200, //展示 loading 加載組件的延時時間(頁面 js 若在 delay 時間內加載完成,則不會顯示 loading 組件)
"timeout": 3000 //頁面js加載超時時間(超時後展示 error 對應的組件)
}
}
}
更多配置相關的說明,請參考 manifest.json文檔說明 中的描述。可能節點的位置與普通的 5+App 有差異,請按照配置的名稱進行對應。
Q:iOS 應用調用相機等權限時,彈出的提示語如何修改?
A:在 manifest.json 可視化界面-App模塊權限配置-iOS隱私信息訪問的許可描述
manifest.json
以下是完整的manifest.json配置文件,在HBuilder|HBuilderX中切換到“源碼視圖”按以下規範進行手動配置。
{
"id": "H512345", //必填
"name": "應用名稱", //必填
"version": {
"name": "1.0", //必填,推薦使用.分割,如1.0
"code": "10" //必填,純數字
},
"launch_path": "入口頁面", //必填
"description": "應用描述信息", //可選
"icons": { //可選,以分辨率爲索引鍵名
"72": "圖標路徑"
},
"developer": { //選填,開發者信息
"name": "開發者名稱",
"email": "開發者郵箱地址",
"url": "開發者網站"
},
"screenOrientation": [ //應用支持的屏幕方向
"portrait-primary", //豎屏
"portrait-secondary", //豎屏(反向),上下顛倒
"landscape-primary", //橫屏,Home鍵在右側
"landscape-secondary" //橫屏(反向),Home鍵在左側
],
"permissions": { //5+模塊,uni-app項目對應節點爲"app-plus" -> "modules"
"Accelerometer": {
"description": "加速度傳感器"
}
},
"plus": { // 5+擴展配置, uni-app項目對應節點爲"app-plus"
"allowsInlineMediaPlayback":"true|false", //可選,是否允許video標籤非全屏播放
"appWhitelist": [ //可選,應用白名單列表(Android平臺爲apk下載地址,iOS平臺爲appstore地址)
],
"arguments": "", //可選,預設應用的啓動參數
"cache": { //可選,緩存配置
},
"cers": { //可選,異常錯誤反饋配置
},
"channel": "", //可選,渠道信息
"confusion": { //可選,原生js文件混淆配置
},
"distribute": { //必選,雲端打包配置
},
"error": { //可選,錯誤頁面配置
},
"locales": { //可選,國際化配置
}
"nativePlugins": { //可選,原生插件相關配置
},
"popGesture": "none|close|hide", //可選,側滑返回功能配置
"kernel": { //可選,Webview渲染內核配置
},
"runmode": "normal|liberate", //可選,運行模式
"safearea": { //可選,安全區域配置
},
"schemeWhitelist":[ //可選,Scheme白名單列表
],
"splashscreen": { //可選,splash界面配置
},
"ssl": { //可選,SSL配置
},
"softinput": { //可選,軟鍵盤配置
},
"statusbar": { //可選,系統狀態欄配置
},
"useragent": { //可選,UA配置
},
"launchwebview": { //可選,應用首頁配置
},
"secondwebview": { //可選,應用雙首頁配置
},
"uni-app": { //可選,uni-app應用的配置
},
"compatible": { //可選,編譯器兼容性配置
},
"wap2app": { //可選,wap2app相關配置
},
}
}
id
應用標識(AppID),在可視化“基礎配置”項中。
更多信息參考DCloud AppID使用說明。
name
應用名稱,打包爲apk/ipa安裝到手機上顯示的名稱。
version
應用版本信息,包括版本名稱和版本號。
-
name
版本名稱,字符串類型,用於顯示的版本字符串。可通過5+API plus.runtime.version獲取版本名稱。
本地離線打包配置:Android平臺,iOS平臺。 -
code
版本號,數字類型(正整數),操作系統使用,新版本的值要大於老版本,否則無法正常安裝。可通過5+API plus.runtiem.versionCode獲取版本號。
本地離線打包配置:Android平臺,iOS平臺
launch_path
應用入口頁面(首頁)地址,相對於應用資源根目錄(默認爲根目錄的index.html)。也可以是網絡地址(需以http/https開頭)。
description
應用描述信息。
icons
應用的圖片配置(暫未使用)。
developer
開發者信息,可選內容。
-
name
開發者名稱 -
email
開發者郵箱地址 -
url
開發者網站地址
screenOrientation
應用支持的屏幕方向,字符串數組類型,配置需要支持的方向,可取值:
-
portrait-primary
豎屏 -
portrait-secondary
豎屏(反向),山下顛倒 -
landscape-primary
橫屏,Home鍵在右側 -
landscape-secondary
橫屏(反向),Home鍵在左側
permissions
要使用的模塊配置,不要手動修改,應該在HBuilderX中manifest.json的可視化界面“(App)模塊權限配置”項的“打包模塊配置”下勾選
支持以下模塊:
模塊標識 |
模塊名稱 |
---|---|
Bluetooth |
低功耗藍牙 |
Contacts |
通訊錄 |
Fingerprint |
指紋識別 |
iBeacon |
iBeacon |
LivePusher |
直播推流 |
Maps |
地圖 |
Messaging |
短彩信、郵件 |
OAuth |
登錄鑑權 |
Payment |
支付 |
Push |
消息推送 |
Speech |
語言識別 |
Statistic |
統計 |
SQLite |
數據庫 |
VideoPlayer |
視頻播放 |
plus
5+擴展配置,uni-app項目對應爲"app-plus"節點
allowsInlineMediaPlayback
是否允許html頁面中video標籤非全屏播放,僅iOS平臺有效
Boolean類型,值爲true表示允許,false表示不允許,默認值爲不允許。
html頁面的video標籤必須添加webkit-playsinline屬性才支持非全屏播放,如下示例:
<video controls="controls" src="http://.../x.mp4" webkit-playsinline>
此配置與VideoPlayer(視頻播放)控件功能無關
appWhitelist
應用中可直接安裝原生應用的白名單地址(url)。
-
Android平臺
url地址如果是下載apk的鏈接,不在此白名單列表中的url下載apk將會被攔截(彈出toast提示“當前環境不支持下載未許可的apk文件”) -
iOS平臺
url地址如果是跳轉到appstore,不在此白名單列表中的url跳轉將會被攔截(彈出toast提示“當前環境不支持下載未許可的應用”)"plus": { //uni-app項目對應節點名稱爲"app-plus"
"appWhitelist":[
"http://www.dcloud.io/streamapp/streamapp.apk",
"itms://itunes.apple.com/cn/app/liu-ying-yong/id793135951"
],
// ...
}以上白名單機制僅在流應用環境中限制,發佈爲獨立App時忽略此配置
arguments
應用啓動時的5+默認參數
String類型,可選。
在5+中可通過plus.runtime.arguments獲取,如果外部調用應用時傳入了參數,則覆蓋此默認參數。
cache
應用的緩存配置信息,JSON格式對象
"plus": { //uni-app項目對應節點名稱爲"app-plus"
"cache":{
"mode": ""
},
// ...
}
mode
Webview窗口默認使用的緩存模式,可取值:
-
"default"
根據cache-control決定是否使用緩存數據,如果存在緩存並且沒有過期則使用本地緩存資源,否則從網絡獲取; -
"cacheElseNetwork"
只要存在緩存(即使過期)數據則使用,否則從網絡獲取; -
"noCache"
不使用緩存數據,全部從網絡獲取; -
"cacheOnly"
僅使用緩存數據,不從網絡獲取(注:如果沒有緩存數據則會導致加載失敗)。
默認爲"default"。
cers
應用的異常崩潰與錯誤報告系統配置信息,JSON格式對象
"plus": { //uni-app項目對應節點名稱爲"app-plus"
"cers":{
"crash": ""
},
// ...
}
crash
是否提交程序異常崩潰信息。
Boolean類型,true表示提交,false表示不提交,默認值爲true。
channel
渠道標記,字符串類型。
"plus": { //uni-app項目對應節點名稱爲"app-plus"
"channel": "google",
// ...
}
注意:不要直接修改此配置,參考渠道包打包配置教程
confusion
應用的JS文件原生混淆配置
"plus": { //uni-app項目對應節點名稱爲"app-plus"
"confusion": {
"description": "JS原生混淆",
"resources": {
"js/common.js": {
},
"js/immersed.js": {
}
}
},
// ...
}
-
description
原生混淆配置描述信息 -
resources
要混淆的JS文件列表,JSON對象,以要混淆的js文件路徑(相對路徑)爲鍵名,值爲空JSON對象即可
注意:confusion節點是在plus節點之下,uni-app項目由於需要編譯暫不支持原生混淆
iOS平臺使用WKWebview不支持原生混淆,HBuilderX2.2.5(alpha)版本開始調整默認使用WKWebview,使用WKWebview時雲端打包將忽略原生混淆配置(即不混淆)
error
定義窗口加載錯誤時的處理邏輯,JSON格式對象
"plus": { //uni-app項目對應節點名稱爲"app-plus"
"error":{
"url": "本地錯誤頁面地址"
},
// ...
}
-
url
窗口加載錯誤時(如本地頁面不存在,或者無法訪問的網絡地址)跳轉的頁面地址,僅支持本地頁面地址。設置爲“none”則關閉跳轉到錯誤頁面功能,此時頁面顯示Webview默認的錯誤頁面內容。默認使用5+ Runtime內置的錯誤頁。
locales
雲端打包國際化配置,JSON格式對象
"plus": { //uni-app項目對應節點名稱爲"app-plus"
"locales":{
"zh": {//中文(簡體)
"name": "應用名稱",
"ios": {
"privacyDescription": {
}
}
},
"zh-TW": {//中文繁體(臺灣)
},
"zh-HK": {//中文繁體(香港)
},
"en": {
}
},
// ...
}
詳細說明參考雲端打包配置國際化
nativePlugins
uni原生插件配置,JSON對象數組
"plus": { //uni-app項目對應節點名稱爲"app-plus"
"nativePlugins": [
{
"%PluginID%": {
}
}
],
// ...
}
注意:不要直接修改此配置,推薦在HBuilderX的可視化界面中操作
使用雲端uni原生插件參考:https://ask.dcloud.net.cn/article/35412
使用本地uni原生插件參考:https://ask.dcloud.net.cn/article/35844
popGesture
應用中Webview窗口側滑返回功能的默認效果,字符串類型
"plus": { //uni-app項目對應節點名稱爲"app-plus"
"popGesture": "none",
// ...
}
可取以下值:
-
"none"
默認Webview窗口無側滑返回功能,側滑時無任何響應 -
"close"
默認webview窗口側滑返回關閉,用戶側滑後窗口自動關閉,關閉窗口的邏輯與調用 close()方法一致。 -
"hide"
默認webview窗口側滑返回隱藏,即用戶側滑後窗口自動隱藏,隱藏窗口的邏輯與調用其hide()方法一致。
默認值爲"none"。manifest.json中配置的爲默認項, 在應用中可以通過WebviewStyles的popGesture屬性動態修改。
注意:Android平臺僅在流應用環境下支持側滑返回。
kernel
Webview窗口使用的內核,JSON格式對象
"plus": { //uni-app項目對應節點名稱爲"app-plus"
"kernel": {
"ios": "WKWebview",
"recovery": "restart|reload|none"
},
// ...
}
ios
iOS平臺Webview窗口默認使用的內核,可取值:
-
"WKWebview"
iOS8.0及以上系統默認使用WKWebview內核 -
"UIWebview"
使用UIWebview內核
默認值爲UIWebview。
HBuilderX2.2.5(alpha)版本開始調整默認爲WKWebview
recovery
Webview內核崩潰後的恢復處理邏輯,僅iOS平臺非uni-app項目使用WKWebview內核時生效,uni-app項目可自動恢復(推薦轉換爲uni-app項目)。
當WKWebview崩潰後,Webview頁面的JS上下文將丟失,也無法渲染DOM內容(白屏)
可配置以下值:
-
"restart"
重啓應用,關閉所有頁面重新打開應用首頁,可通過(plus.runtime.isRecovery)來判斷應用是否恢復重啓 -
"reload"
重新加載當前WKWebview(崩潰的WKWebview)頁面,頁面中JS上下文中所有數據丟失,在當前Webview中可通過plus.webview.isRecovery判斷是否恢復重新加載,在其它Webview中可監聽recovery事件來判斷 -
"none"
不做任何操作
創建Webview窗口時可設置kernelRecovery屬性單獨設置某個窗口的恢復處理邏輯
runmode
應用的運行模式,字符串類型
"plus": { //uni-app項目對應節點名稱爲"app-plus"
"runmode": "liberate"
// ...
}
可取值:
-
"normal"
正常運行模式。 -
"liberate"
釋放資源運行模式,應用在第一次啓動時將解壓自帶資源到SDcard,正常情況不推薦使用該模式。該模式的缺點:第一次啓動更慢,耗費時間先解壓、容易被三方清理軟件清理。該模式有用的場景:此模式下File API纔可正常訪問_www應用資源,以及在某些Android rom訪問本地頁面時url地址中包含?帶參數,但不推薦使用這種跨頁傳參方式,推薦使用其他方式跨頁傳參http://ask.dcloud.net.cn/article/288。
注意:wap2app 應用固定爲 liberate,不支持自定義。
safearea
iOS劉海屏設備(iPhoneX)的安全區域配置
"plus": { //uni-app項目對應節點名稱爲"app-plus"
"safearea": {
"background":"#CCCCCC",
"bottom":{
"offset":"auto"
},
"left": {
"offset":"auto"
},
"right: {
"offset":"auto"
}
},
// ...
}
background
安全區域外的背景顏色,默認值爲"#FFFFFF"
bottom
底部安全區域配置,包括以下屬性
-
offset
底部安全區域偏移,"none"表示不空出安全區域,"auto"自動計算空出安全區域,默認值爲"none"left
左側安全區域配置(橫屏顯示時有效),包含的屬性與bottom一致。
right
右側安全區域配置(橫屏顯示時有效),包含的屬性與bottom一致。
schemeWhitelist
配置應用中URL Scheme白名單(非http、https、file),字符串數組
"plus": { //uni-app項目對應節點名稱爲"app-plus"
"schemeWhitelist": [
"streamapp"
],
// ...
}
僅允許白名單中的scheme跳轉,不在白名單中URL Scheme鏈接將會被攔截(攔截後不做任何處理)。
默認白名單爲:
'sms', 'tel', 'mailto', 'callto', 'weixin', 'alipay', 'alipays', 'alipayqr', 'weibo', 'mqq', 'mqqapi', 'qqmap', 'baidumap', 'amap', 'iosamap', 'streamapp'
iOS默認白名單還包括"itms"等跳轉appstore。
splashscreen
程序啓動界面配置信息,JSON格式對象
"plus": { //uni-app項目對應節點名稱爲"app-plus"
"splashscreen": {
"autoclose": "false",
"event": "loaded",
"target": "default",
"waiting": "true",
"delay": "500",
"ads": {
"background": "#FFFFFF",
"image": "logo.png"
}
},
// ...
}
包括以下字段:
-
autoclose
是否自動關閉程序啓動界面,布爾類型。
默認爲true,即自動關閉程序啓動界面,否則需要在應用中顯式調用plus.navigator.closeSplashscreen方法來關閉。 -
event
觸發自動關閉splash界面的事件類型,字符串類型,可取值:
"titleUpdate"表示當首頁Webview的titleUpdate事件觸發時自動關閉splash界面;
"rendering"表示當首頁Webview的rendering事件觸發時自動關閉splash界面;
"loaded":表示當首頁Webview的loaded事件觸發時自動關閉splash界面。
默認值爲loaded。 -
target
設置雙首頁模式下,定義目標webview觸發event類型自動關閉splash界面,可取值:
"default"根據首頁Webview的event事件關閉splash;
"second":根據第二個首頁Webview的event事件關閉splash。
默認值爲"default"。 -
waiting
是否在程序啓動界面顯示等待雪花,布爾類型。
默認爲false,即不顯示等待雪花。 -
delay
啓動界面在應用的首頁面加載完畢後延遲關閉的時間,單位爲毫秒,數字類型。
默認不延遲,即首頁面加載完畢後立即關閉。 -
ads
開屏廣告配置信息,JSON格式對象
包括以下屬性:
background:設置背景顏色
image:設置底部圖片地址,相對應用資源目錄路徑,不支持網絡地址,建議分辨率720x256(要求png格式,背景透明,留出邊距,在不同分辨率手機上會自動等比例縮放處理)
ssl
應用ssl相關設置
"plus": { //uni-app項目對應節點名稱爲"app-plus"
"ssl": {
"untrustedca": "accept|refuse|warning"
},
// ...
}
包括以下字段:
-
untrustedca
配置應用中https請求時,如果服務器返回非受信證書的處理邏輯,字符串類型,可取值:
"accept" - 接受此非受信證書,繼續訪問;
"refuse" - 拒絕此非 受信證書,停止訪問;
"warning" - 彈出警告提示框提醒用戶,由用戶確定是否繼續訪問。
默認值爲"accept"。
softinput
軟鍵盤相關配置,JSON格式對象
"plus": { //uni-app項目對應節點名稱爲"app-plus"
"softinput": {
"navBar": "auto|none",
"auxiliary": true|false,
"mode": "adjustResize|adjustPan"
},
// ...
}
包括以下字段:
-
navBar
軟鍵盤上導航條的顯示模式,字符串類型(僅iOS平臺支持):
"auto" - 表示系統默認值(即顯示導航條);
"none" - 表示不顯示。
默認值爲"auto"。 -
auxiliary
是否開啓輔助輸入功能,Boolean類型
true表示開啓,false表示關閉,默認值爲true。 -
mode
彈出系統軟鍵盤模式,字符串類型,可取值:
"adjustResize" - 表示彈出軟鍵盤時自動調整窗口大小;
"adjustPan" - 表示彈出軟鍵盤時自動移動滾動窗口使得輸入框可見(Android平臺可能會出現軟鍵盤蓋住輸入框的情況)。
默認值爲"ajustResize"。
iOS平臺可通過WebviewStyles的softinputMode屬性對單個窗口進行控制
statusbar
應用啓動後的系統狀態欄樣式,JSON格式對象
"plus": { //uni-app項目對應節點名稱爲"app-plus"
"statusbar": {
"immersed": "none|suggestedDevice|supportedDevice",
"style": "dark|light",
"background": "#RRGGBB"
},
// ...
}
包括以下字段:
-
immersed
定義應用是否使用沉浸式狀態欄樣式,String類型,可取值:
"none" - 非沉浸式狀態欄樣式;
"suggestedDevice" - 沉浸式狀態欄,僅在支持設置狀態欄前景色樣式的設備上生效(Android5.0的小米&魅族、Android6.0及以上,iOS在所有設備上生效);
"supportedDevice" - 沉浸式狀態欄,在所有支持沉浸式狀態欄設備上生效(與之前的true一致,Android4.4及以上)。
默認值爲"false"。
-style
系統狀態欄樣式(前景顏色),字符串類型,可取以下值:
"dark" - 深色前景色樣式(即狀態欄前景文字爲黑色),此時background建議設置爲淺顏色;
"light" - 淺色前景色樣式(即狀態欄前景文字爲白色),此時background建設設置爲深顏色。
可通過plus.navigator.setStatusBarStyle()動態調整。注:Android5.0(小米&魅族)和Android6.0及以上系統支持,iOS7.0及以上系統支持
-background
系統狀態欄背景顏色,字符串類型,#RRGGBB格式,顏色值格式爲"#RRGGBB",如"#FF0000"爲紅色。
默認使用系統樣式,通常iOS平臺默認爲light樣式;Android平臺默認爲dark(各ROM廠商存在差異)。
可通過plus.navigator.setStatusBarBackground()動態調整。
注:僅在immersed屬性值設置爲false時有效。
useragent(useragent_android/useragent_ios)
應用中http請求的userAgent信息,JSON格式對象
"plus": { //uni-app項目對應節點名稱爲"app-plus"
"useragent": {
"value": "要設置的默認userAgent值",
"concatenate": "true|false"
},
"useragent_android": {
"value": "android平臺要設置的默認userAgent值",
"concatenate": "true|false"
},
"useragent_ios": {
"value": "ios平臺要設置的默認userAgent值",
"concatenate": "true|false"
},
// ...
}
包括以下字段:
-
value
自定義userAgent值,字符串類型 -
concatenate
是否將value值作爲追加值連接到系統默認userAgent值之後,布爾類型:
"true" - 表示追加模式,若value不以空格字符開頭,則在其前面自動添加空格字符;
"false" - 表示覆蓋模式,即value值作爲完整userAgent使用。
默認爲false,即覆蓋默認userAgent值。
useragent_android和useragent_ios分別配置對Android和iOS平臺生效。
注:爲了保證運行環境的一致性,建議concatenate設置爲true。
launchwebview
應用首頁Webview的配置信息,JSON格式對象
"plus": { //uni-app項目對應節點名稱爲"app-plus"
"launchwebview": {
"plusrequire": "ahead|normal|later|none",
"injection": "true|false",
"overrideresource": [{
"match":"區配攔截的資源url地址",
"redirect":"攔截資源的重現向地址",
"mime":"攔截資源的數據類型",
"encoding":"攔截資源的數據編碼",
"header":"攔截資源的http頭數據"
}],
"overrideurl": {
"mode": "allow|reject,攔截模式",
"match": "匹配攔截規則",
"exclude": "none|redirect,排除攔截理規則"
},
"replacewebapi": {
"geolocation": "none|alldevice|auto, 重寫標準定位API"
},
"geolocation": "none|replace|auto, 重寫標準定位API",
"subNViews": [{
"id": "原生子View控件的標識",
"styles": "JSON對象,原生子View控件樣式",
"tags": "JSON數組對象,原生子View控件上繪製的元素"
}],
"titleNView": {
"backgroundColor": "#RRGGBB, 標題欄背景顏色",
"titleText": "標題欄標題文字內容",
"titleColor": "#RRGGBB, 標題欄標題文字顏色",
"titleSize": "17px,標題字體大小,默認大小爲17px",
"autoBackButton": "true|false,是否顯示標題欄上返回鍵",
"backButton": "JSON對象,標題欄上返回鍵樣式",
"buttons": [{
"color": "按鈕上的文字顏色",
"colorPressed": "按鈕按下狀態的文字顏色",
"float": "按鈕在標題欄上的顯示位置",
"fontWeight": "按鈕上文字的粗細",
"fontSize": "按鈕上文字的大小",
"fontSrc": "按鈕上文字使用的字體文件路徑",
"text": "按鈕上顯示的文字"
}],
"splitLine": "JSON對象,標題欄底部分割線樣式"
},
"statusbar": {
"background": "#RRGGBB格式字符串,沉浸式狀態欄樣式下系統狀態欄背景顏色"
},
"top": "0px|10%,Webview的頂部偏移量",
"height": "0px|10%,Webview窗口高度",
"bottom": "0px|10%, Webview的底部偏移量,僅在未同時設置top和height屬性時生效",
"backButtonAutoControl": "none|hide|close,運行環境自動處理返回鍵的控制邏輯",
"additionalHttpHeaders": "JSON數據,額外添加HTTP請求頭數據"
},
// ...
}
包括以下字段:
overrideresource
配置應用首頁的攔截資源請求處理邏輯,可包含多條配置項,json支持以下屬性:
-
match
區配攔截的資源url地址,支持正則表達式,與WebviewOverrideResourceOptions的match屬性功能一致; -
redirect
攔截資源的重現向地址,僅支持本地資源地址,如"_www"、"_doc"、"_downloads"、"_documents"等開頭的路徑,與WebviewOverrideResourceOptions的redirect屬性功能一致; -
mime
攔截資源的數據類型,RFC2045/RFC2046/RFC2047/RFC2048/RFC2049規範中定義的數據類型,與WebviewOverrideResourceOptions的mime屬性功能一致; -
encoding
攔截資源的數據編碼,默認值"UTF-8",與WebviewOverrideResourceOptions的encoding屬性功能一致; -
header
攔截資源的http頭數據,JSON格式數據,與WebviewOverrideResourceOptions的encoding屬性功能一致;
**注:以上配置項與Webview的overrideResourceRequest方法作用一致,配置項可參考規範
overrideurl
配置應用首頁的攔截鏈接請求處理邏輯,支持以下屬性:
-
mode
攔截模式,可取值:
"allow" - 表示滿足match屬性定義的條件時不攔截url繼續加載,不滿足match屬性定義的條件時攔截url跳轉並觸發callback回調;
"reject" - 表示滿足match屬性定義的提交時攔截url跳轉並觸發callback回調,不滿足match屬性定義的條件時不攔截url繼續加載;
默認值爲"reject"。 -
match
匹配攔截規則,支持正則表達式,默認值爲對所有URL地址生效(相當於正則表達式“.*”)。
如果mode值爲"allow"則允許區配的URL請求跳轉,mode值爲"reject"則攔截區配的URL請求。 -
exclude
排除攔截理規則,可取值:
"none" - 表示不排除任何URL請求(即攔截處理所有URL請求);
"redirect" - 表示排除攔截處理301/302跳轉的請求(謹慎使用,非a標籤的href觸發的URL請求可能會誤判斷爲302跳轉);
默認值爲"none"。
titleNView
配置應用首頁的標題欄,配置此屬性則首頁顯示標題欄,支持以下屬性:
-
backgroundcolor
標題欄背景顏色,字符串類型,格式爲“#RRGGBB”,默認值爲灰黑色(#1B1A1F) -
titletext
標題欄標題文字內容,默認值爲當前加載頁面的標題 -
titlecolor
標題欄標題文字顏色,字符串類型,格式爲“#RRGGBB”,默認值爲白色(#FFFFFF)
secondwebview
應用雙首頁模式配置,添加此字段則表明應用採用雙首頁模式運行,應用啓動除了創建默認入口頁外還創建第二個Webview,此字段配置第二個Webview的配置信息,JSON格式對象
"plus": { //uni-app項目對應節點名稱爲"app-plus"
"secondwebview": {
"launch_path": "加載頁面地址",
"id": "Webview窗口標識",
"mode": "front|child|behind|parent,Webview顯示模式",
"top": "0px|10%,Webview的頂部偏移量",
"height": "0px|10%,Webview窗口高度",
"bottom": "0px|10%, Webview的底部偏移量",
"plusrequire": "ahead|normal|later|none,控制JS注入時機",
"injection": "true|false,是否提前注入js",
"overrideresource": [{
"match":"區配攔截的資源url地址",
"redirect":"攔截資源的重現向地址",
"mime":"攔截資源的數據類型",
"encoding":"攔截資源的數據編碼",
"header":"攔截資源的http頭數據"
}],
"overrideurl": {
"mode": "allow|reject,攔截模式",
"match": "匹配攔截規則",
"exclude": "none|redirect,排除攔截理規則"
},
"replacewebapi": {
"geolocation": "none|alldevice|auto, 重寫標準定位API"
},
"geolocation": "none|replace|auto, 重寫標準定位API",
"subNViews": [{
"id": "原生子View控件的標識",
"styles": "JSON對象,原生子View控件樣式",
"tags": "JSON數組對象,原生子View控件上繪製的元素"
}],
"titleNView": {
"backgroundColor": "#RRGGBB, 標題欄背景顏色",
"titleText": "標題欄標題文字內容",
"titleColor": "#RRGGBB, 標題欄標題文字顏色",
"titleSize": "17px,標題字體大小,默認大小爲17px",
"autoBackButton": "true|false,是否顯示標題欄上返回鍵",
"backButton": "JSON對象,標題欄上返回鍵樣式",
"buttons": [{
"color": "按鈕上的文字顏色",
"colorPressed": "按鈕按下狀態的文字顏色",
"float": "按鈕在標題欄上的顯示位置",
"fontWeight": "按鈕上文字的粗細",
"fontSize": "按鈕上文字的大小",
"fontSrc": "按鈕上文字使用的字體文件路徑",
"text": "按鈕上顯示的文字"
}],
"splitLine": "JSON對象,標題欄底部分割線樣式"
},
"statusbar": {
"background": "#RRGGBB格式字符串,沉浸式狀態欄樣式下系統狀態欄背景顏色"
},
"backButtonAutoControl": "none|hide|close,運行環境自動處理返回鍵的控制邏輯",
"additionalHttpHeaders": "JSON數據,額外添加HTTP請求頭數據"
},
// ...
}
包括以下字段:
launch_path
第二個Webview窗口加載的頁面地址,支持網絡地址和本地地址
id
第二個Webview窗口標識,默認值爲%APPID%__second
mode
第二個Webview窗口顯示模式,可取值:
-
child
表示作爲launchwebview的子窗口 -
front
表示與launchwebview平級並在其前顯示 -
behind
表示與launchwebview平級並在其後顯示
默認值爲"front"。
top
第二個Webview窗口的頂部偏移量
可取值像素值或百分比,如"0px"、"10%"。
height"
第二個Webview窗口的高度
可取值像素值或百分比,如"0px"、"50%"。
bottom
第二個Webview窗口的底部偏移量
可取值像素值或百分比,如"0px"、"10%"。
其它屬性與launchwebview下一致
uni-app
僅uni-app項目生效
uni-app應用的配置,JSON格式對象
"plus": { //uni-app項目對應節點名稱爲"app-plus"
"uni-app": {
"nvue": {
"flex-direction": "row|row-reverse|column|column-reverse"
}
},
// ...
}
包括以下字段:
nvue
nvue頁面的flex-direction默認值,字符串類型,可取值:
"row"、"row-reverse"、"column"、"column-reverse"
默認值爲"row"。
compatible
僅uni-app項目生效
uni-app應用兼容性配置,JSON格式對象
"plus": { //uni-app項目對應節點名稱爲"app-plus"
"compatible": {
"ignoreVersion": true,
"runtimeVersion": "兼容的uni-app運行環境版本號,多個版本使用,分割",
"compilerVersion": "兼容的編譯器版本號"
},
// ...
}
當uni-app運行環境與編譯環境不一致時,會彈出可能存在兼容性問題的提示框。
詳細描述參考:https://ask.dcloud.net.cn/article/35627
wap2app
wap2app應用配置,JSON格式對象
"plus": { //uni-app項目對應節點名稱爲"app-plus"
"wap2app": {
"launchError": "tip|none"
},
// ...
}
包括以下字段:
launchError
應用首頁加載錯誤處理邏輯,"tip"表示彈出提示框(無法連接服務器,請檢查網絡設置),"none"表示不處理(跳轉到錯誤頁面),默認值爲"tip"。
plus->distribute
雲端打包配置項,uni-app項目對應爲"app-plus" -> "distribute"節點
"plus": {
"distribute": {
"debug": "true|false,是否開啓調試功能",
"syncDebug": "true|false, 是否爲真機運行基座",
"apple": {
"appid": "", //iOS包名(Bundle ID)
"mobileprovision": "", //iOS打包使用的profile文件
"password": "", //iOS打包使用的證書密碼
"p12": "", //iOS打包使用的證書
"devices": "iphone|ipad|universal", //iOS支持的設備類型
"urlschemewhitelist": [ //iOS平臺應用訪問白名單
""
],
"UIBackgroundModes": ["audio","location"],//iOS應用後臺運行模式
"urltypes": [ //iOS平臺url scheme配置
],
"frameworks": [ //iOS平臺依賴的系統庫
"CoreLocation.framework"
],
"deploymentTarget": "9.0", //iOS支持的最低版本
"privacyDescription": { //iOS隱私描述
}
"idfa":"true|false", //是否使用廣告標識符,默認值爲false
"capabilities": { //應用的能力配置(Capabilities)
}
},
"google":{
"packagename":"", //Android包名
"keystore":"", //Android簽名證書
"password":"", //Android簽名證書密碼
"aliasname":"", //Android簽名證書別名
"locale": "default", //應用的語言,默認值爲default(系統語言),如en_US表示使用英語(美國)
"schemes":[ //Android平臺url scheme配置
],
"theme":"程序使用的主題",
"abiFilters":[ //支持的CPU類型
"armeabi", "armeabi-v7a", "x86"
],
"custompermissions":"true|false",
"permissions":[ //Android平臺使用的權限
""
],
"permissionPhoneState": { //Android平臺讀取設備信息權限配置
"request": "always|once|none", //申請權限策略
"prompt": "" //用戶拒絕時彈出提示框上的內容
},
"minSdkVersion":"apk支持的最低版本", //Android平臺最低版本
"targetSdkVersion":"apk的目標版本" //Android平臺目標版本
},
"icons":{ //應用圖標配置
},
"splashscreen":{ //應用啓動圖片配置
},
"plugins":{ // 第三方sdk配置
}
}
}
apple
iOS平臺打包配置,uni-app項目對應爲"app-plus" -> "distribute" -> "ios"節點
其中appid、mobileprovision、password、p12、devices爲iOS打包基礎配置,點擊HBuilderX菜單的"發行" -> "原生App-雲打包"打開的“App雲端打包”中配置:
urlschemewhitelist
設置應用訪問白名單,更多詳情參考https://ask.dcloud.net.cn
UIBackgroundModes
應用後臺運行模式配置,如後臺播放音樂、後臺定位等
後臺音樂播放
後臺獲取位置信息
更多後臺能力參考蘋果官方文檔
urltypes
iOS平臺URL Schemes配置,更多詳情參考https://ask.dcloud.net.cn/article/64
frameworks
設置應用要引用的系統庫(framework),字符串數組。
在使用native.js時使用,通知App雲端打包在編譯應用時引用對於的系統framework庫,以便native.js能成功調用其中的API。
如要調用蘋果遊戲相關API,則需要引用"GameKit.framework"。
deploymentTarget
設置應用支持的最低版本,可取值:
-
iOS8:
'8.0', '8.1', '8.2', '8.3', '8.4' -
iOS9:
'9.0', '9.1', '9.2', '9.3' -
iOS10:
'10.0', '10.1', '10.2', '10.3' -
iOS11:
'11.0', '11.1', '11.2', '11.3', '11.4' -
iOS12:
'12.0', '12.1', '12.2', '12.3', '12.4' -
iOS13:
'13.0', '13.1'
privacyDescription
iOS平臺隱私描述,請在HBuilderX的manifest.json可視化界面“(App)模塊權限配置”中進行配置。
idfa
iOS平臺應用是否使用IDFA(廣告標識),更多詳情參考https://ask.dcloud.net.cn/article/36107
capabilities
iOS平臺打包時Capabilities配置,json類型數據,配置應用的capabilities數據(根據XCode規範分別配置到entitlements和plist文件中)
"capabilities": {
"entitlements": { // 合併到工程entitlements文件的數據(json格式)
},
"plists": { // 合併到工程Info.plist文件的數據(json格式)
}
},
更多詳情參考https://ask.dcloud.net.cn/article/36393
Android平臺打包配置,uni-app項目對應爲"app-plus" -> "distribute" -> "android"節點
其中packagename、keystore、password、aliasname爲Android打包基礎配置,點擊HBuilderX菜單的"發行" -> "原生App-雲打包"打開的“App雲端打包”中設置:
schemes
Android平臺URL Schemes配置,更多詳情參考https://ask.dcloud.net.cn/article/409
theme
Android平臺應用要使用的系統主題名稱
更多詳情參考Android配置應用主題皮膚
abiFilters
Android平臺配置支持的CPU類型,更多詳情參考https://ask.dcloud.net.cn/article/36195
permissions
Android平臺使用到的權限,請在HBuilderX的manifest.json可視化界面“(App)模塊權限配置”中的“Android打包權限配置”中勾選。
permissionPhoneState
HBuilderX2.3.8+版本支持
Android平臺應用啓動時申請讀取設備信息權限配置
支持以下字段
-
request
申請權限策略,可配置以下值:
"always" - 一直申請讀取設備信息權限,用戶必須授權允許,否則一直彈出提示框,直到用戶允許;
"once" - 申請一次讀取設備信息權限,不管用戶是否允許
"none" - 不申請讀取設備信息權限 -
prompt
配置request值爲"always"時有效,當用戶拒絕授權讀取設備信息權限時彈出提示框上顯示的內容。
跟多詳情參考https://ask.dcloud.net.cn/article/36549
minSdkVersion & targetSdkVersion
minSdkVersion爲應用兼容的最低Android版本(API等級)
targetSdkVersion爲應用適配的Android版本(API等級)
更多詳情參考https://ask.dcloud.net.cn/article/193
icons
應用圖標配置,json格式數據,分別包含Android和iOS平臺的配置項:
"icons":{
"ios":{
"appstore":"必選, 1024x1024, 提交app sotre使用的圖標",
"iphone":{
"normal": "可選,57x57,iPhone3/3GS程序圖標,低於iOS7不再支持",
"retina": "可選,114x114,iPhone4程序圖標,低於iOS7不再支持",
"app@2x[retina7]": "可選,120x120,iOS7+程序圖標(iPhone4S/5/6/7/8)",
"app@3x[retina8]": "可選,180x180,iOS7+程序圖標(iPhone6plus/7plus/8plus/X)",
"spotlight-normal": "可選,29x29,iPhone3/3GS Spotlight搜索程序圖標,低於iOS7不再支持",
"spotlight-retina": "可選,58x58,iOS5/6 Spotlight搜索程序圖標(iPhone4S),低於iOS7不再支持",
"spotlight@2x[spotlight-retina7]": "可選,80x80,iOS7+ Spotlight搜索圖標(iPhone5/6/7/8)",
"spotlight@3x[spotlight-retina8]": "可選,120x120,iOS7+ Spotlight搜索圖標(iPhone6plus/7plus/8plus/X)
"settings-normal": "可選,29x29,iPhone4設置頁面程序圖標,低於iOS7不再支持",
"settings@2x[settings-retina]": "可選,58x58,iOS5+ Settings設置圖標(iPhone5/6/7/8)",
"settings@3x[settings-retina8]": "可選,87x87,iOS5+ Settings設置圖標(iPhone6plus/7plus/8plus/X)",
"notification@2x": "可選,40x40,iOS7+ 通知欄圖標(iPhone5/6/7/8)",
"notification@3x": "可選,60x60,iOS7+ 通知欄圖標(iPhone6plus/7plus/8plus/X)"
},
"ipad":{
"normal": "可選,72x72,iPad普通屏幕程序圖標,低於iOS7不再支持",
"retina": "可選,144x144,iPad高分屏程序圖標,低於iOS7不再支持",
"app[normal7]": "可選,76x76,iOS7+程序圖標",
"app@2x[retina7]": "可選,152x152,iOS7+程序圖標(高分屏)",
"proapp@2x": "可選,167x167,iOS9+程序圖標(iPad Pro)",
"spotlight-normal": "可選,50x50,iPad Spotlight搜索程序圖標,低於iOS7不再支持",
"spotlight-retina": "可選,100x100,iPad高分屏Spotlight搜索程序圖標,低於iOS7不再支持",
"spotlight[spotlight-normal7]": "可選,40x40,iOS7+ Spotlight搜索圖標",
"spotlight@2x[spotlight-retina7]": "可選,80x80,iOS7+ Spotlight搜索圖標(高分屏)",
"settings[settings-normal]": "可選,29x29,iOS5+ 設置圖標",
"settings@2x[settings-retina]": "可選,58x58,iOS5+ 設置圖標(高分屏)",
"notification": "可選,20x20,iOS7+ 通知欄圖標",
"notification@2x": "可選,40x40,iOS7+ 通知欄圖標(高分屏)"
}
},
"android":{
"ldpi": "可選,48x48", //已廢棄
"mdpi": "可選,48x48", //已廢棄
"hdpi": "可選,72x72",
"xhdpi": "可選,96x96",
"xxhdpi": "可選,144x144",
"xxxhdpi": "可選,192x192"
}
},
雲端打包時要求所有圖標路徑都相對於應用下".manifest"目錄。
提交雲端打包時需做路徑轉換,請在HBuilderX的manifest.json可視化界面“(App)圖標配置”中操作設置
圖片配置注意事項參考https://ask.dcloud.net.cn/article/35979
splashscreen
應用啓動圖配置,json格式數據,分別包含Android和iOS平臺的配置項:
"splashscreen":{
"ios":{
"iphone":{
"default": "可選,320x480,iPhone3(G/GS)啓動圖片", // portrait480h,兼容老設備,將廢棄
"retina35": "可選,640x960,3.5英寸設備(iPhone4/4S)啓動圖片,支持iPhone4/4S時必選", // portrait480h@2x
"retina40": "可選,640x1136,4.0英寸設備(iPhone5/5S)啓動圖片,支持iPhone5/5S顯示時必選", // portrait-568h@2x
"retina40l":"可選,1136x640,4.0英寸設備(iPhone5/5S)橫屏啓動圖片,支持iPhone5/5S橫屏顯示時必選", // landscape-568h@2x
"retina47": "可選,750x1334,4.7英寸設備(iPhone6/7/8)啓動圖片,支持iPhone6/7/8時必選", // portrait-667h@2x
"retina47l": "可選,1334x750,4.7英寸設備(iPhone6/7/8)橫屏啓動圖片,支持iPhone6/7/8橫屏顯示時必選", // landscape-667h@2x
"retina55": "可選,1242x2208,5.5英寸設備(iPhone6/7/8Plus)啓動圖片,支持iPhone6/7/8Plus時必選", // portrait-736h@3x
"retina55l": "可選,2208x1242,5.5英寸設備(iPhone6/7/8Plus)橫屏啓動圖片,支持iPhone6/7/8Plus橫屏顯示時必選", // landscape-736h@3x
"iphonex": "可選,1125x2436,5.8英寸設備(iPhoneX/XS)啓動圖片,支持iPhoneX/XS時必選", // portrait-812h@3x
"iphonexl": "可選,2436x1125,5.8英寸設備(iPhoneX/XS)橫屏啓動圖片,支持iPhoneX/XS橫屏顯示時必選", // landscape-812h@3x
"portrait-896h@2x": "可選,828x1792,6.1英寸設備(iPhoneXR)啓動圖片,支持iPhone XR(iOS12+)時必選",
"landscape-896h@2x": "可選,1792x828,6.1英寸設備(iPhoneXR)iPhoneXR橫屏啓動圖片,支持iPhone XR(iOS12+)橫屏顯示時必選",
"portrait-896h@3x": "可選,1242x2688,6.5英寸設備(iPhoneXS Max)啓動圖片,支持iPhone XS Max(iOS12+)時必選",
"landscape-896h@3x": "可選,2688x1242,6.5英寸設備(iPhoneXS Max)橫屏啓動圖片,支持iPhone XS Max(iOS12+)橫屏顯示時必選"
},
"ipad":{
"portrait": "可選,768x1004,iPad豎屏無狀態欄啓動圖片(兼容iOS5/6),僅支持iOS5/6的iPad時必選", //兼容老設備iOS5/6,將廢棄
"portrait-retina": "可選,1536x2008,iPad高分屏豎屏無狀態欄啓動圖片(兼容iOS5/6),僅支持iOS5/6的iPad時必選", //兼容老設備iOS5/6,將廢棄
"landscape": "可選,1024x748,iPad橫屏無狀態欄啓動圖片(兼容iOS5/6),僅支持iOS5/6的iPad時必選", //兼容老設備iOS5/6,將廢棄
"landscape-retina": "可選,2048x1496,iPad高分屏橫屏啓動圖片(兼容iOS5/6),僅支持iOS5/6的iPad時必選", //兼容老設備iOS5/6,將廢棄
"portrait7": "可選,768x1024,9.7/7.9英寸iPad/mini豎屏啓動圖片 ,支持iPad/mini(iOS7+)時必選", // portrait-1024h
"landscape7": "可選,1024x768,9.7/7.9英寸iPad/mini橫屏啓動圖片,支持iPad/mini(iOS7+)橫屏顯示時必選", // landscape-1024h
"portrait-retina7": "可選,1536x2048,9.7/7.9英寸iPad/mini高分屏豎屏圖片,支持iPad/mini(iOS7+)時必選", // portrait-1024h@2x
"landscape-retina7": "可選,2048x1536,9.7/7.9英寸iPad/mini高分屏橫屏啓動圖片,支持iPad/mini(iOS7+)橫屏顯示時必選", // landscape-1024h@2x
"portrait-1112h@2x":"可選,1668x2224,10.5英寸iPad Pro豎屏啓動圖片,支持10.5英寸iPad Pro(iOS8+)時必選",
"landscape-1112h@2x":"可選,2224x1668,10.5英寸iPad Pro橫屏啓動圖片,支持10.5英寸iPad Pro(iOS8+)橫屏顯示時必選",
"portrait-1194h@2x":"可選,1668x2388,11英寸iPad Pro豎屏啓動圖片,支持11英寸iPad Pro(iOS10+)時必選",
"landscape-1194h@2x":"可選,2388x1668,11英寸iPad Pro橫屏啓動圖片,支持11英寸iPad Pro(iOS10+)橫屏顯示時必選",
"portrait-1366h@2x":"可選,2048x2732,12.9英寸iPad Pro豎屏啓動圖片,支持12.9英寸iPad Pro(iOS10+)時必選",
"landscape-1366h@2x":"可選,2732x2048,12.9英寸iPad Pro橫屏啓動圖片,支持12.9英寸iPad Pro(iOS10+)橫屏顯示時必選"
}
},
"android":{
"ldpi": "必選,320x442,低密度屏幕啓動圖片",
"mdpi": "必選,240x282,中密度屏幕啓動圖片",
"hdpi": "必選,480x762,高密度屏幕啓動圖片",
"xhdpi": "必選,720x1242,720P高密度屏幕啓動圖片",
"xxhdpi": "必選,1080x1882,1080P高密度屏幕啓動圖片"
}
},
雲端打包時要求所有圖標路徑都相對於應用下".manifest"目錄。
提交雲端打包時需做路徑轉換,請在HBuilderX的manifest.json可視化界面“(App)啓動圖配置”中操作設置
plugins
第三方SDK配置,json格式數據
鍵名爲模塊名稱,如下爲“個推”配置數據:
"plugins":{ // 第三方sdk配置
"push": { // 模塊名稱
"igexin":{ // 個推SDK參數配置
"appid": "pPyZWvH3Fa6PXba10aJ009", // 個推的appid
"appkey": "b7dOGlNPHR7pqwUxDhpTi4", // 個推的appkey
"appsecret": "IxVYAT9qws8dlNElaTMvg1", // 個推的appsecret
"icons": { // 推送圖片配置
"push": { // push圖標,規格與應用圖片一致,不配置則默認使用push圖標
"ldpi": "可選,48x48",
"mdpi": "可選,48x48",
"hdpi": "可選,72x72",
"xhdpi": "可選,96x96",
"xxhdpi": "可選,144x144",
"xxxhdpi": "可選,192x192"
},
"small": { // 小圖標,png格式圖片,僅使用alpha圖層
"ldpi": "可選,18*18",
"mdpi": "可選,24*24",
"hdpi": "可選,36*36",
"xhdpi": "可選,48*48",
"xxhdpi": "可選,72*72"
},
"description": "推送圖標"
}
}
}
}
請在HBuilderX的manifest.json可視化界面“(App)SDK配置”中操作設置
調用HTML5+ API
在項目管理器中雙擊“index.html”文件,對於HTML5+應用的頁面有一個很重要的“plusready”事件,此事件會在頁面加載後自動觸發,表示所有HTML5+ API可以使用,在此事件觸發之前不能調用HTML5+ API,所以應該在此事件回調函數中調用頁面初始化需要調用的HTML5+ API,而不應該在onload或DOMContentLoaded事件中調用:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<title>Hello world</title>
<script type="text/javascript">
// 擴展API是否準備好,如果沒有則監聽“plusready"事件
if(window.plus){
plusReady();
}else{
document.addEventListener( "plusready", plusReady, false );
}
// 擴展API準備完成後要執行的操作
function plusReady(){
var ws = plus.webview.currentWebview(); //pw回車可輸出plus.webview
// ... code
}
</script>
</head>
<body>
</body>
</html>
編輯程序啓動後默認顯示的頁面index.html,在頁面中添加一個按鈕,點擊後將打開新頁面加載“http://m.csdn.net/”,爲了實現此功能,我們需要用到HTML5+擴展API中plus.webview.createWebview()方法創建窗口:
編輯完成後,按Ctrl+S鍵保存。
真機運行 run in device
寫完代碼後,我們可以通過真機運行來查看效果。真機運行有3個特點:
-
真實。雖然PC端HBuilder右側的內置瀏覽器也可以看大致的頁面,但真實的佈局效果以及手機上的特殊能力調用,還是必須在真機測試。
-
邊改邊看。在HBuilder更改頁面並保存後,可立即同步在真機上看到保存後的顯示效果。比開發原生應用還方便。
-
檢查錯誤和log。手機運行HTML等文件時如果發生錯誤以及打印的console.log,都可以在真機運行時從手機端反饋回到HBuilder的控制檯,在控制檯直接查看。
注意只有移動App項目纔可以真機聯調。
在HBuilder的“項目管理器”中選擇創建的“HelloWorld”應用。
啓動真機運行
將iOS或Android設備連接到電腦,這時HBuilder會自動檢測連接到電腦上的設備,通過菜單欄中的“運行”菜單啓動:
也可通過工具欄啓動:
啓動真機運行後,在控制檯中顯示以下信息:注:如果提示錯誤信息,請嘗試“終止”後重新啓動真機運行!
啓動後會彈出提示框,選擇“確定”,顯示以下頁面:
在Android設備會自動安裝並啓動HBuilder調試基座,iOS設備需要開發者手動點擊手機桌面的HBuilder調試App。
如果你真機失敗,注意看控制檯的提示,或點HBuilder菜單-運行裏的故障排查指南。注意:真機聯調App時,提供的是一個測試環境,並不真實發生打包,調試基座App的名字、圖標、啓動封面圖片、是否可旋轉這些只有打包才能更改的屬性不會因爲開發者修改manifest文件而變化。只有修改manifest且點擊菜單發行-打包後,上述4個設置才能更改。
運行後,HBuilder中修改頁面代碼,保存後會自動同步到手機中,如果手機當前展示着被修改的頁面,則會刷新頁面。
嘗試在js中在plus ready之後編寫console.log,或者改寫錯誤的js,可以直接在HBuilder的控制檯看到結果。
如果真機運行遇到各種故障,請點擊運行菜單裏的真機運行常見故障指南。
debug調試
除了真機運行,我們還可以利用chrome和safari的開發者控制檯來調試5+App。
可以使用真機插上數據線,也可以使用Android或iOS的官方模擬器。所有Api包括plus的各種api,甚至包括plus.ios和plus.android的原生對象,都可以調試。
在HBuilder的菜單運行裏選擇打開Webview調試模式,如果手機連接正常,5+App啓動,在ide上可看到可調試的頁面,點擊調試後,打開控制檯,和普通的瀏覽器調試是一樣的。
發行打包(重要,重要,,重要)
完成應用頁面的編輯後,需要正式打包爲原生的apk或ipa安裝包。
首先明確一下,有人說HTML5做的應用無法通過蘋果Appstore審覈,這是錯誤的說法。蘋果只是拒絕開發者把web站點直接打包上Appstore,不優化任何體驗,它認爲這是給Appstore製造垃圾應用,如果是原生體驗的App,雖然使用HTML5技術,蘋果也不會拒絕上架。事實上Appstore上使用HTML5技術的App超過40w。
HBuilder提供的打包有云打包和本地打包兩種。
HBuilder提供的雲打包對正常開發者是免費的。但過多浪費服務器資源會額外收費。用本地打包無任何限制。
雲打包的特點是DCloud官方配置好了原生的打包環境,可以把HTML等文件編譯爲原生安裝包。
-
對於不熟悉原生開發的前端工程師,雲打包大幅降低了他們的使用門檻。
-
對於沒有mac電腦的開發者,他們也可以通過雲打包直接打出iOS的ipa包。
無論雲打包還是本地打包,都在HBuilder的菜單-發行中。
本地打包在該菜單下有詳細教程,此處僅對雲打包進行說明。
通過菜單欄中的“發行”->“App打包”,打開“App雲端打包”對話框提交。
注意只有App項目纔可以打包。
iOS發佈
對於iOS平臺,可以選擇越獄包或正式包(Appstore專用或企業證書),前者只能安裝在已越獄的設備上,後者則可通過iDP證書打包提交到Appstore發佈、或通過iEP證書打包在企業內部發布。
配置打包信息
-
越獄包
AppID:iOS應用標識,推薦使用反向域名風格的字符串,如“com.domainname.appname”。 -
正式包
AppID:iOS應用標識,推薦使用反向域名風格的字符串,如“com.domainname.appname”,必須與profile文件綁定的App ID匹配。
私鑰證書:iOS Certificates文件(.p12);
私鑰密碼:導入私鑰證書的密碼;
Profile文件:iOS Provisioning Profile文件(.mobileprovision),必須與蘋果App ID和私鑰證書區配;
證書生成請參考http://ask.dcloud.net.cn/article/152查看打包狀態
通過菜單欄中的“發行”->“查看打包狀態”,打開“查看App打包狀態”對話框,可查看打包歷史記錄和狀態:
如果“製作狀態”欄顯示“打包成功,下載完成”則表示雲端打包完成,可點擊“打開下載目錄”查看下載的安裝包。
Android發佈(重點,重點,重點)
對於Android平臺,可以選擇使用DCloud生成的公用證書或自己生成的證書,兩者不影響安裝包的發佈,唯一的差別就是證書中開發者和企業信息不同。
生成Android簽名證書
(使用DCloud公用證書可忽略此操作)確保電腦上安裝了JRE,我們將使用JRE自帶的創建和管理數字證書的工具Keytool。使用以下命令生成證書:
重新上傳
-
keystore
helloworld.keystore 表示生成的證書,可以加上路徑(默認在用戶主目錄下); -
alias
helloworld 表示證書的別名是helloworld; -
keyalg
RSA 表示採用的RSA算法; -
validity
10000 表示證書的有效期是10000天。
配置打包信息
-
使用DCloud公用證
App包名:Android應用包名,使用反向域名風格的字符串,如“com.domainname.appname”。重新上傳
App包名:Android應用包名,推薦使用反向域名風格的字符串,如“com.domainname.appname”;
證書別名:生成證書時使用-alias參數設置的證書別名;
私鑰密碼:生成證書時使用的keystore密碼;
證書文件:生成證書時使用-keystore參數設置的證書保存路徑; -
重新上傳
查看打包狀態
通過菜單欄中的“發行”->“查看打包狀態”,打開“查看App打包狀態”對話框,可查看打包歷史記錄和狀態:
如果“製作狀態”欄顯示“打包成功,下載完成”則表示雲端打包完成,可點擊“打開下載目錄”查看下載的安裝包。
已經打好的安裝包,允許開發者在指定天內下載指定次數。超時或超次後服務器端會清除文件。
遇到打包失敗,常見原因是:
如果使用自用證書,很可能是證書配置錯誤。
如果使用DCloud證書仍然出錯,很可能是圖片錯誤。所有圖片格式必須是標準png,且嚴格符合分辨率要求。使用其他圖片格式重命名爲png會導致打包失敗!
其他錯誤請參考: 雲打包常見錯誤排查指南
UI框架
HBuilder並不限制UI框架,開發者使用任何UI框架均可以。
不過市面上確實沒有什麼好的手機App前端框架,DCloud開發了mui框架,它的性能更高,樣式也更接近原生App,並且mui調用了HTML5+擴展能力,可以實現更好的體驗。
我們強烈推薦開發移動App的開發者使用mui框架,詳情請參考文檔中心mui章節。
請注意,mui只封裝了部分HTML5Plus Api,學會mui框架不代表可以不學習HTML5Plus規範。mui不會做的很重,只是很有限的通過封裝簡化了常見開發過程。
開發資源
API手冊:HTML5+規範
HelloH5+示例應用,應用中包括幾乎所有plus API的示例:
-
iOS:Appstore中搜索Hello H5+
-
Android:下載地址
獲取Hello H5+的源代碼,在HBuilder中新建移動App,選Hello H5+。可以查看所有plus api的調用樣例代碼。
Hello mui示例應用,漂亮且高性能的前端UI框架:
下載頁面
進階教程
如果想開發出接近原生體驗的App,請訪問如下教程:
-
提升HTML5的性能體驗系列之一 避免切頁白屏
-
提升HTML5的性能體驗系列之二 列表流暢滑動
-
提升HTML5的性能體驗系列之三 流暢下拉刷新
-
提升HTML5的性能體驗系列之四 使用原生UI(nativeUI)
三方培訓
HTML5中國產業聯盟裏有專業的培訓機構爲HTML5開發者提供DCloud產品的培訓。
詳見專門文章http://ask.dcloud.net.cn/article/299
發行和變現服務
在你的app開發完畢後,DCloud還提供了發佈平臺,幫助開發者簡單的完成應用推廣頁面,參考http://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/12936;
如果開發者還需要流量變現,DCloud提供了廣告平臺,開發者可以方便的在自己的app中集成廣告,參考http://ask.dcloud.net.cn/article/13084
最後,祝你通過DCloud的免費工具,快速完成自己的移動App,並獲得更多用戶和變現收益!
知其然必知其所以然,本文只是隨手的筆記,最近bug改的有點多,文字記不住,標記下重點,哈哈。