用鴻蒙開(kāi)發(fā)AI應(yīng)用(四)Helloworld
想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
https://harmonyos.51cto.com/#zz
前言
上一篇,我們把編譯和燒錄環(huán)境都搭建好了,這一篇我們來(lái)初探一下鴻蒙OS的應(yīng)用開(kāi)發(fā)流程。
環(huán)境準(zhǔn)備
距我們上次搭建環(huán)境有段時(shí)間了,先來(lái)更新一下開(kāi)發(fā)工具和相關(guān)開(kāi)源代碼。
1. 更新 DevEco Device Tools
在 vscode 里 擴(kuò)展 -> 從VSIX安裝... -> 選擇DevEcoDeviceTool-1.0.1.vsix

2. 同步代碼倉(cāng)
- cd ~/harmony/openharmony
- repo sync -c
3. 下載開(kāi)發(fā)工具
- mkdir -p ~/developtools && cd ~/developtools
- URL_PREFIX=https://repo.huaweicloud.com/harmonyos/develop_tools/
- wget $URL_PREFIX/hapsigntoolv2.jar
- wget $URL_PREFIX/hmos_app_packing_tool.jar
下載應(yīng)用打包和簽名工具。
第一個(gè)程序
1. 創(chuàng)建程序目錄
在源碼 applications\sample 目錄下,我們新建一個(gè) myApp 目錄放置新增代碼。
2. 創(chuàng)建主程序
新建主程序 my_first_app.c,簡(jiǎn)單打印一個(gè)Hello World。
- #include <stdio.h>
- #include "los_sample.h"
- int main(int argc, char **argv)
- {
- printf("\n************************************************\n");
- printf("\n\t\tHello bluishfish!\n");
- printf("\n************************************************\n\n");
- LOS_Sample(g_num);
- return 0;
- }
stdio.h 為標(biāo)準(zhǔn)庫(kù),los_sample.h為子程序的頭文件。
3. 創(chuàng)建子程序
創(chuàng)建子程序los_sample.c, 也是簡(jiǎn)單打印一下。
- #include <stdio.h>
- int g_num = 81;
- void LOS_Sample(int param)
- {
- printf("This is a sample: Param = %d\n", param);
- }
在include目錄下創(chuàng)建一個(gè)頭文件los_sample.h
- #ifndef _LOS_SAMPLE_H
- #define _LOS_SAMPLE_H
- #ifdef __cplusplus
- extern "C" {
- #endif /* __cplusplus */
- extern int g_num;
- extern void LOS_Sample(int param);
- #ifdef __cplusplus
- }
- #endif /* __cplusplus */
- #endif /* _LOS_SAMPLE_H */
4. 配置BUILD.gn文件
創(chuàng)建BUILD.gn, 寫入配置信息
- import("//build/lite/config/component/lite_component.gni")
- static_library("my_app_lib") {
- sources = [
- "my_first_app.c",
- "los_sample.c"
- ]
- include_dirs = [
- "include",
- ]
- }
- lite_component("camera_my_app") {
- target_type = "executable"
- features = [
- ":my_app_lib",
- ]
- }
首先導(dǎo)入 gni 組件,將源碼my_first_app.c和los_sample.c編譯成my_app_lib庫(kù)文件,這里指定include為頭文件路徑。
然后將my_app_lib打包成 lite_component命名為camera_my_app組件。
5. 修改 json 配置
在 build\lite\目錄下 新建my_hi3516dv300.json
- {
- "ohos_version": "OpenHarmony 1.0",
- "board": "hi3516dv300",
- "kernel": "liteos_a",
- "compiler": "clang",
- "subsystem": [
- {
- "name": "applications",
- "component": [
- { "name": "mycamera", "dir": "//applications/sample/camera/myApp:camera_my_app", "features":[] }
- ]
- }
- ],
- "vendor_adapter_dir": "//vendor/hisi/hi35xx/hi3516dv300/hi3516dv300_adapter",
- "third_party_dir": "//third_party",
- "ohos_product_type":"",
- "ohos_manufacture":"",
- "ohos_brand":"",
- "ohos_market_name":"",
- "ohos_product_series":"",
- "ohos_product_model":"",
- "ohos_software_model":"",
- "ohos_hardware_model":"",
- "ohos_hardware_profile":"",
- "ohos_serial":"",
- "ohos_bootloader_version":"",
- "ohos_secure_patch_level":"",
- "ohos_abi_list":""
- }
將剛才生成的camera_my_app組件,打包為applications應(yīng)用,放入鴻蒙的子系統(tǒng)中。
6. 編譯
可以通過(guò)ssh登錄虛擬機(jī)或直接在虛擬機(jī)上進(jìn)行編譯,

- python build.py my_hi3516dv300 -b debug
注意:一定要帶上 debug參數(shù),這樣才能啟動(dòng)后才能方便進(jìn)入OHOS的命令行模式。
如遇到找不到j(luò)ava路徑的情況,是由于新開(kāi)源代碼中加入了應(yīng)用打包工具引起的,前文已下好工具包。

再安裝 java即可修復(fù)。
- sudo apt install openjdk-11-jre-headless
- java -version
7. 燒錄系統(tǒng)
在上一篇完成過(guò)燒錄后,這里只需要選擇userfs.img文件燒錄即可。

注意這里的輸出目錄為my_hi3516dv300

點(diǎn)擊燒錄,然后重啟開(kāi)發(fā)板即可。
8. 運(yùn)行
燒錄完成后,我們?cè)诖谙逻M(jìn)行調(diào)試,根據(jù)usb分配的串口號(hào)進(jìn)行連接

在開(kāi)發(fā)板啟動(dòng)完成后,按回車進(jìn)入OHOS命令行
- ./bin/camera_my_app
這里camera_my_app就是我們之前定義的組件名稱,能正??吹捷敵?,那恭喜您已經(jīng)在鴻蒙上運(yùn)行了第一個(gè)程序了。

注意這里的命名對(duì)應(yīng)關(guān)系,官方示例中采用源文件、庫(kù)文件、組件名稱和應(yīng)用名稱都采用相同命名,會(huì)便于項(xiàng)目管理。不過(guò)對(duì)新人來(lái)說(shuō)不容易理解,這里我都區(qū)分開(kāi)了,可以再仔細(xì)梳理一下流程。
從源碼到庫(kù),從庫(kù)到組件,再?gòu)慕M件到應(yīng)用,最后進(jìn)入OHOS系統(tǒng)執(zhí)行。
資料下載

下一篇預(yù)告
下一篇,我們將開(kāi)發(fā)一個(gè)有界面的HAP應(yīng)用,并介紹一下更多的組件功能,敬請(qǐng)期待...

©著作權(quán)歸作者和HarmonyOS技術(shù)社區(qū)共同所有,如需轉(zhuǎn)載,請(qǐng)注明出處,否則將追究法律責(zé)任
想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
https://harmonyos.51cto.com/#zz