20191107 關於mui的app打包

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?

  1. 做一個mobile web項目
    在這個模式下,開發者用不到HTML5Plus,使用標準的HTML5語法,運行在瀏覽器裏。這不算5+ App。
    此時開發者仍然可以使用HBuilder這個開發工具,新建項目時選擇web項目。
    開發者也仍然可以使用DCloud提供的mui開源框架,來簡化ui的開發。
    但這就是一個普通的web項目,b/s方式,不可脫線運行,不能調用HTML5Plus的增加api。
  2. 做一個正統的app
    傳統意義上的app,是c/s方式的,它的程序要安裝和運行在手機上,不通過瀏覽器在線下載。
    此時開發者在HBuilder裏新建項目時,選擇“移動App”。(HBuilderX裏選擇5+App)
    在App項目下編寫的HTML、js等文件,是會被打包到原生的安裝包(Android是apk包、iOS是ipa包)裏的。
    此時本地的js和服務器通過ajax交互,由服務器按接口方式給出數據(一般是json),然後客戶端的js文件解析json,並根據本地的業務邏輯來渲染頁面和執行功能。
    所以請不要在App項目中放置運行在服務器端的php等文件。
  3. 使用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項目下的所有文件,也都是打包在本機運行的。
  4. 如果你想開發一次,全端覆蓋,那麼需要使用DCloud的另一個產品uni-app

HTML5+ 應用架構

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。
    創建移動App圖
  • 創建完成後,會在項目管理器中顯示新建的“HelloWorld”項目
    創建移動App完成圖

manifest.json(超級重要的配置文件)

在項目管理器中雙擊“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":橫屏反方向。

App SdkConfigs

三方原生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

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做的,同時發佈了百度小程序,權重更高,每天來自百度的搜索量非常多。是一個可現身說法的好案例。

router

屬性 類型 默認值 說明
mode String hash 路由跳轉模式,支持 hash、history
base String / 應用基礎路徑,例如,如果整個單頁應用服務在 /app/ 下,然後 base 就應該設爲 "/app/"

注意:history 模式發行需要後臺配置支持,詳見:history 模式的後端配置

async

屬性 類型 默認值 說明
loading String AsyncLoading 頁面 js 加載時使用的組件(需註冊爲全局組件)
error String AsyncError 頁面 js 加載失敗時使用的組件(需註冊爲全局組件)
delay Number 200 展示 loading 加載組件的延時時間(頁面 js 若在 delay 時間內加載完成,則不會顯示 loading 組件)
timeout Number 3000 頁面 js 加載超時時間(超時後展示 error 對應的組件)

devServer

屬性 類型 默認值 說明
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

配置 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>

注意

sdkconfig

示例

"h5": {
    "sdkConfigs": {
        "maps": {
            "qqmap": {
                //騰訊地圖祕鑰(key)
                "key": "XVXBZ-NDMC4-JOGUS-XGIEE-QVHDZ-AMFV2"
            }
        }
    }
}

optimization

屬性 類型 默認值 說明
prefetch Boolean false 資源預取
preload Boolean false 資源預加載
treeShaking Object   搖樹優化,根據項目需求,動態打包框架所需的組件及API,保持框架代碼最精簡化,參考treeShaking

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 代碼放置的目錄。 詳見

setting

編譯到微信小程序平臺下的項目設置。

屬性 類型 說明
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 有差異,請按照配置的名稱進行對應。

FAQ

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

應用版本信息,包括版本名稱和版本號。

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)模塊權限配置”項的“打包模塊配置”下勾選
HBuilderX可視化操作
支持以下模塊:

模塊標識

模塊名稱

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

google

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()方法創建窗口:
創建index.html圖
編輯完成後,按Ctrl+S鍵保存。

真機運行 run in device

寫完代碼後,我們可以通過真機運行來查看效果。真機運行有3個特點:

  1. 真實。雖然PC端HBuilder右側的內置瀏覽器也可以看大致的頁面,但真實的佈局效果以及手機上的特殊能力調用,還是必須在真機測試。

  2. 邊改邊看。在HBuilder更改頁面並保存後,可立即同步在真機上看到保存後的顯示效果。比開發原生應用還方便。

  3. 檢查錯誤和log。手機運行HTML等文件時如果發生錯誤以及打印的console.log,都可以在真機運行時從手機端反饋回到HBuilder的控制檯,在控制檯直接查看。
    注意只有移動App項目纔可以真機聯調。

在HBuilder的“項目管理器”中選擇創建的“HelloWorld”應用。

啓動真機運行

將iOS或Android設備連接到電腦,這時HBuilder會自動檢測連接到電腦上的設備,通過菜單欄中的“運行”菜單啓動:
通過菜單啓動Android真機運行圖
也可通過工具欄啓動:
通過工具欄啓動Android真機運行圖

啓動真機運行後,在控制檯中顯示以下信息:
Android真機運行日誌圖
注:如果提示錯誤信息,請嘗試“終止”後重新啓動真機運行!

啓動後會彈出提示框,選擇“確定”,顯示以下頁面:
手機端App運行後截圖

在Android設備會自動安裝並啓動HBuilder調試基座,iOS設備需要開發者手動點擊手機桌面的HBuilder調試App。
Android HBuilder應用圖

如果你真機失敗,注意看控制檯的提示,或點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等文件編譯爲原生安裝包。

  1. 對於不熟悉原生開發的前端工程師,雲打包大幅降低了他們的使用門檻。

  2. 對於沒有mac電腦的開發者,他們也可以通過雲打包直接打出iOS的ipa包。
    無論雲打包還是本地打包,都在HBuilder的菜單-發行中。
    本地打包在該菜單下有詳細教程,此處僅對雲打包進行說明。

通過菜單欄中的“發行”->“App打包”,打開“App雲端打包”對話框提交。
注意只有App項目纔可以打包。

iOS發佈

對於iOS平臺,可以選擇越獄包或正式包(Appstore專用或企業證書),前者只能安裝在已越獄的設備上,後者則可通過iDP證書打包提交到Appstore發佈、或通過iEP證書打包在企業內部發布。

配置打包信息

  • 越獄包
    iOS App雲端打越獄包
    AppID:iOS應用標識,推薦使用反向域名風格的字符串,如“com.domainname.appname”。

  • 正式包
    iOS App雲端打正式包
    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打包狀態”對話框,可查看打包歷史記錄和狀態:
    iOS 查看打包狀態
    如果“製作狀態”欄顯示“打包成功,下載完成”則表示雲端打包完成,可點擊“打開下載目錄”查看下載的安裝包。

Android發佈(重點,重點,重點)

對於Android平臺,可以選擇使用DCloud生成的公用證書或自己生成的證書,兩者不影響安裝包的發佈,唯一的差別就是證書中開發者和企業信息不同。

生成Android簽名證書

使用DCloud公用證書可忽略此操作)確保電腦上安裝了JRE,我們將使用JRE自帶的創建和管理數字證書的工具Keytool。使用以下命令生成證書:

 

Android生成簽名證書

 

重新上傳

  • keystore helloworld.keystore 表示生成的證書,可以加上路徑(默認在用戶主目錄下);

  • alias helloworld 表示證書的別名是helloworld;

  • keyalg RSA 表示採用的RSA算法;

  • validity 10000 表示證書的有效期是10000天。

配置打包信息

  • 使用DCloud公用證

     

    Android 使用DCloud公用證書打包
    App包名:Android應用包名,使用反向域名風格的字符串,如“com.domainname.appname”。

     

    重新上傳Android 使用自用證書打包
    App包名:Android應用包名,推薦使用反向域名風格的字符串,如“com.domainname.appname”;
    證書別名:生成證書時使用-alias參數設置的證書別名;
    私鑰密碼:生成證書時使用的keystore密碼;
    證書文件:生成證書時使用-keystore參數設置的證書保存路徑;

  •  

    重新上傳

查看打包狀態

通過菜單欄中的“發行”->“查看打包狀態”,打開“查看App打包狀態”對話框,可查看打包歷史記錄和狀態:
Android 查看打包狀態
如果“製作狀態”欄顯示“打包成功,下載完成”則表示雲端打包完成,可點擊“打開下載目錄”查看下載的安裝包。

已經打好的安裝包,允許開發者在指定天內下載指定次數。超時或超次後服務器端會清除文件。

遇到打包失敗,常見原因是:
如果使用自用證書,很可能是證書配置錯誤。
如果使用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的示例:

HelloH5二維碼圖片
獲取Hello H5+的源代碼,在HBuilder中新建移動App,選Hello H5+。可以查看所有plus api的調用樣例代碼。

Hello mui示例應用,漂亮且高性能的前端UI框架:
下載頁面

進階教程

如果想開發出接近原生體驗的App,請訪問如下教程:

三方培訓

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改的有點多,文字記不住,標記下重點,哈哈。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章