flutter編譯和構建鴻蒙應用程序(windows環境)
問題背景
針對 OpenHarmony 的 Flutter 版本已經開源,參考 https://gitee.com/openharmony-sig/flutter_flutter。
本文為實踐該流程,實現flutter打包鴻蒙hap包的流程。目前流程已經走完,不過最后打包hap包依賴于flutter engine構建,目前還沒構建完成。下次持續更新。
問題分析
構建環境:
flutter tools指令支持Linux、Mac和Windows下使用。
構建依賴:
依賴flutter engine(https://github.com/flutter/engine)構建產物:ohos_debug_unopt_arm64 與 ohos_release_arm64,請在flutter tools指令運行參數中添加:–local-engine=<engine產物目錄>
構建步驟:
1、下載命令行工具,并配置環境變量ohpm與sdkmanager,
下載地址: https://developer.harmonyos.com/cn/develop/deveco-studio#download_cli ,使用指導: https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/ide-command-line-ohpm-0000001490235312-V3
(1)解壓文件,進入“ohpm/bin”目錄,打開命令行工具,執行OHPM安裝腳本,
Windows環境下執行命令:
init.bat
(2)將ohpm配置到環境變量中
Windows環境變量設置方法:
在此電腦 > 屬性 > 高級系統設置 > 高級 > 環境變量中,在系統或者用戶的PATH變量中,添加ohpm安裝位置下bin文件夾的路徑。(bin路徑配置了ohpm、ohsdkmgr、codelinter三個工具,如下圖所示)。
配置環境變量:
OHPM_HOME
...\ohcommandline-tools-windows-2.0.0.2\oh-command-line-tools\ohpm
(3)安裝完成之后,重新打開命令行,執行如下命令
ohpm -v
,
終端輸出為版本號,則表示安裝成功。執行效果如下:
2、下載sdk并配置環境變量,
ohsdkmgr使用指導,(參考 https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/ide-command-line-ohsdkmgr-0000001545647965-V3)
注意:使用ohsdkmgr要求java版本必須大于17,java17的安裝和配置參考 https://blog.csdn.net/tiehou/article/details/129575138 。
(1)下載api為9的sdk
(2)配置對應的環境變量:
export OHOS_SDK_HOME=/home/<user>/env/sdk
export HDC_HOME=/home/<user>/env/sdk/10/toolchains
export PATH=$PATH:$HDC_HOME# 配置HarmonyOS sdk
export HOS_SDK_HOME=/home/<user>/env/{HarmonyOS sdk}
3、置Gradle:
下載 gradle 7.1 并解壓,配置到環境變量中。gradle下載地址: https://gradle.org/releases/
配置到環境變量:
PATH=/home/<user>/env/gradle-7.1/bin
4、下載Flutter,
下載完成后配置環境:
git clone https://gitee.com/openharmony-sig/flutter_flutter.gitexport PATH=/home/<user>/ohos/flutter_flutter/bin:$PATH
export PUB_HOSTED_URL=https://pub.flutter-io.cn
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn
5、簽名工具需進行下列配置
(1)下載簽名工具(下載地址: https://gitee.com/openharmony/developtools_hapsigner,下載命令: git clone https://gitee.com/openharmony/developtools_hapsigner.git),并配置環境變量SIGN_TOOL_HOME。
export SIGN_TOOL_HOME=/home/<user>/ohos/developtools_hapsigner/autosign
(2)進入…\developtools_hapsigner\hapsigntool目錄,執行以下命令編譯得到hap-sign-tool.jar,確保其在目錄:./hapsigntool/hap_sign_tool/build/libs/hap-sign-tool.jar。
gradle build
注意:剛才配置了jdk版本為17,目前這個代碼選擇的gradle版本為7.1,對應的jdk版本需要配置還原1.8的版本。
(3)編輯autosign目錄下autosign.config和createAppCertAndProfile.config文件,并修改其中值:
sign.profile.inFile=profile_tmp.json
在autosign目錄下,新增profile_tmp_template.json文件,編輯如下:
{"version-name": "2.0.0","version-code": 2,"app-distribution-type": "os_integration","uuid": "5027b99e-5f9e-465d-9508-a9e0134ffe18","validity": {"not-before": 1594865258,"not-after": 1689473258},"type": "release","bundle-info": {"developer-id": "OpenHarmony","distribution-certificate": "-----BEGIN CERTIFICATE-----\nMIICSTCCAc+gAwIBAgIFAJV7uNUwCgYIKoZIzj0EAwIwYzELMAkGA1UEBhMCQ04x\nFDASBgNVBAoMC09wZW5IYXJtb255MRkwFwYDVQQLDBBPcGVuSGFybW9ueSBUZWFt\nMSMwIQYDVQQDDBpPcGVuSGFybW9ueSBBcHBsaWNhdGlvbiBDQTAeFw0yMjAxMjkw\nNTU0MTRaFw0yMzAxMjkwNTU0MTRaMGgxCzAJBgNVBAYTAkNOMRQwEgYDVQQKDAtP\ncGVuSGFybW9ueTEZMBcGA1UECwwQT3Blbkhhcm1vbnkgVGVhbTEoMCYGA1UEAwwf\nT3Blbkhhcm1vbnkgQXBwbGljYXRpb24gUmVsZWFzZTBZMBMGByqGSM49AgEGCCqG\nSM49AwEHA0IABAW8pFu7tHGUuWtddD5wvazc1qN8ts9UPZH4pecbb/bSFWKh7X7R\n/eTVaRrCTSSdovI1dhoV5GjuFsKW+jT2TwSjazBpMB0GA1UdDgQWBBScyywAaAMj\nI7HcuIS42lvZx0Lj+zAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUE\nDDAKBggrBgEFBQcDAzAYBgwrBgEEAY9bAoJ4AQMECDAGAgEBCgEAMAoGCCqGSM49\nBAMCA2gAMGUCMFfNidGo6uK6KGT9zT1T5bY1NCHTH3P3muy5X1xudOgxWoOqIbnk\ntmQYB78dxWEHLQIxANfApAlXAD/0hnyNC8RDzfLOPEeay6jU9FXJj3AoR90rwZpR\noN9sYD6Oks4VGRw6yQ==\n-----END CERTIFICATE-----\n","bundle-name": "{{ohosId}}","apl": "normal","app-feature": "hos_normal_app"},"acls": {"allowed-acls": [""]},"permissions": {"restricted-permissions": []},"issuer": "pki_internal"
}
6、構建
(1)運行 flutter doctor -v 檢查環境變量配置是否正確
(2)創建工程
# 創建工程
flutter create --platforms ohos flutter_demo
執行上面的創建工程命令,報錯提示需要鴻蒙的sdk。
這里我之前下載過鴻蒙版的deveco studio開發過鴻蒙原生項目,環境變量直接增加直接鴻蒙的sdk,重新創建項目OK。
(3)編譯命令,編譯產物在flutter_demo/ohos/entry/build/default/outputs/default/entry-default-signed.hap下。
# 進入工程根目錄編譯
flutter build hap --local-engine-src-path /home/<user>/ohos/engine/src --local-engine ohos_release_arm64
編譯依賴flutter engine的編譯產物,所以我們在編譯項目之前要先對flutter engine進行編譯構建。
由于時間關系,下次持續更新。