構(gòu)建第一個ArkTS應(yīng)用(Stage模型)

2024-01-25 11:51 更新
說明

為確保運(yùn)行效果,本文以使用DevEco Studio 3.1 Release版本為例,點(diǎn)擊此處獲取下載鏈接。

創(chuàng)建ArkTS工程

  1. 若首次打開DevEco Studio,請點(diǎn)擊Create Project創(chuàng)建工程。如果已經(jīng)打開了一個工程,請?jiān)诓藛螜谶x擇File > New > Create Project來創(chuàng)建一個新工程。
  2. 選擇Application應(yīng)用開發(fā)(本文以應(yīng)用開發(fā)為例,Atomic Service對應(yīng)為元服務(wù)開發(fā)),選擇模板“Empty Ability”,點(diǎn)擊Next進(jìn)行下一步配置。

  3. 進(jìn)入配置工程界面,Compile SDK選擇“3.1.0(API 9)”,Model 選擇“Stage”,其他參數(shù)保持默認(rèn)設(shè)置即可。

    說明

    支持使用ArkTS低代碼開發(fā)方式。

    低代碼開發(fā)方式具有豐富的UI界面編輯功能,通過可視化界面開發(fā)方式快速構(gòu)建布局,可有效降低開發(fā)者的上手成本并提升開發(fā)者構(gòu)建UI界面的效率。

    如需使用低代碼開發(fā)方式,請打開上圖中的Enable Super Visual開關(guān)。

  4. 點(diǎn)擊Finish,工具會自動生成示例代碼和相關(guān)資源,等待工程創(chuàng)建完成。

ArkTS工程目錄結(jié)構(gòu)(Stage模型)

  • AppScope > app.json5:應(yīng)用的全局配置信息。
  • entry:HarmonyOS工程模塊,編譯構(gòu)建生成一個HAP包。
    • src > main > ets:用于存放ArkTS源碼。
    • src > main > ets > entryability:應(yīng)用/服務(wù)的入口。
    • src > main > ets > pages:應(yīng)用/服務(wù)包含的頁面。
    • src > main > resources:用于存放應(yīng)用/服務(wù)所用到的資源文件,如圖形、多媒體、字符串、布局文件等。關(guān)于資源文件,詳見資源分類與訪問。
    • src > main > module.json5:Stage模型模塊配置文件。主要包含HAP包的配置信息、應(yīng)用/服務(wù)在具體設(shè)備上的配置信息以及應(yīng)用/服務(wù)的全局配置信息。具體的配置文件說明,詳見module.json5配置文件
    • build-profile.json5:當(dāng)前的模塊信息、編譯信息配置項(xiàng),包括buildOption、targets配置等。其中targets中可配置當(dāng)前運(yùn)行環(huán)境,默認(rèn)為HarmonyOS。
    • hvigorfile.ts:模塊級編譯構(gòu)建任務(wù)腳本,開發(fā)者可以自定義相關(guān)任務(wù)和代碼實(shí)現(xiàn)。
  • oh_modules:用于存放三方庫依賴信息。關(guān)于原npm工程適配ohpm操作,請參考歷史工程遷移。
  • build-profile.json5:應(yīng)用級配置信息,包括簽名、產(chǎn)品配置等。

  • hvigorfile.ts:應(yīng)用級編譯構(gòu)建任務(wù)腳本。

構(gòu)建第一個頁面

  1. 使用文本組件。

    工程同步完成后,在“Project”窗口,點(diǎn)擊“entry > src > main > ets > pages”,打開“Index.ets”文件,可以看到頁面由Text組件組成?!?span>Index.ets”文件的示例如下:

    1. // Index.ets
    2. @Entry
    3. @Component
    4. struct Index {
    5. @State message: string = 'Hello World'
    6. build() {
    7. Row() {
    8. Column() {
    9. Text(this.message)
    10. .fontSize(50)
    11. .fontWeight(FontWeight.Bold)
    12. }
    13. .width('100%')
    14. }
    15. .height('100%')
    16. }
    17. }
  2. 添加按鈕。

    在默認(rèn)頁面基礎(chǔ)上,我們添加一個Button組件,作為按鈕響應(yīng)用戶點(diǎn)擊,從而實(shí)現(xiàn)跳轉(zhuǎn)到另一個頁面。“Index.ets”文件的示例如下:

    1. // Index.ets
    2. @Entry
    3. @Component
    4. struct Index {
    5. @State message: string = 'Hello World'
    6. build() {
    7. Row() {
    8. Column() {
    9. Text(this.message)
    10. .fontSize(50)
    11. .fontWeight(FontWeight.Bold)
    12. // 添加按鈕,以響應(yīng)用戶點(diǎn)擊
    13. Button() {
    14. Text('Next')
    15. .fontSize(30)
    16. .fontWeight(FontWeight.Bold)
    17. }
    18. .type(ButtonType.Capsule)
    19. .margin({
    20. top: 20
    21. })
    22. .backgroundColor('#0D9FFB')
    23. .width('40%')
    24. .height('5%')
    25. }
    26. .width('100%')
    27. }
    28. .height('100%')
    29. }
    30. }
  3. 在編輯窗口右上角的側(cè)邊工具欄,點(diǎn)擊Previewer,打開預(yù)覽器。第一個頁面效果如下圖所示:

構(gòu)建第二個頁面

  1. 創(chuàng)建第二個頁面。

    • 新建第二個頁面文件。在“Project”窗口,打開“entry > src > main > ets ”,右鍵點(diǎn)擊“pages”文件夾,選擇“New > ArkTS File”,命名為“Second”,點(diǎn)擊“Finish”。可以看到文件目錄結(jié)構(gòu)如下:

      說明

      開發(fā)者也可以在右鍵點(diǎn)擊“pages”文件夾時,選擇“New > Page”,則無需手動配置相關(guān)頁面路由。

    • 配置第二個頁面的路由。在“Project”窗口,打開“entry > src > main > resources > base > profile”,在main_pages.json文件中的“src”下配置第二個頁面的路由“pages/Second”。示例如下:

      1. {
      2. "src": [
      3. "pages/Index",
      4. "pages/Second"
      5. ]
      6. }
  2. 添加文本及按鈕。

    參照第一個頁面,在第二個頁面添加Text組件、Button組件等,并設(shè)置其樣式?!?span>Second.ets”文件的示例如下:

    1. // Second.ets
    2. @Entry
    3. @Component
    4. struct Second {
    5. @State message: string = 'Hi there'
    6. build() {
    7. Row() {
    8. Column() {
    9. Text(this.message)
    10. .fontSize(50)
    11. .fontWeight(FontWeight.Bold)
    12. Button() {
    13. Text('Back')
    14. .fontSize(25)
    15. .fontWeight(FontWeight.Bold)
    16. }
    17. .type(ButtonType.Capsule)
    18. .margin({
    19. top: 20
    20. })
    21. .backgroundColor('#0D9FFB')
    22. .width('40%')
    23. .height('5%')
    24. }
    25. .width('100%')
    26. }
    27. .height('100%')
    28. }
    29. }

實(shí)現(xiàn)頁面間的跳轉(zhuǎn)

頁面間的導(dǎo)航可以通過頁面路由router來實(shí)現(xiàn)。頁面路由router根據(jù)頁面url找到目標(biāo)頁面,從而實(shí)現(xiàn)跳轉(zhuǎn)。使用頁面路由請導(dǎo)入router模塊。

  1. 第一個頁面跳轉(zhuǎn)到第二個頁面。

    在第一個頁面中,跳轉(zhuǎn)按鈕綁定onClick事件,點(diǎn)擊按鈕時跳轉(zhuǎn)到第二頁?!?span>Index.ets”文件的示例如下:

    1. // Index.ets
    2. // 導(dǎo)入頁面路由模塊
    3. import router from '@ohos.router';
    4. @Entry
    5. @Component
    6. struct Index {
    7. @State message: string = 'Hello World'
    8. build() {
    9. Row() {
    10. Column() {
    11. Text(this.message)
    12. .fontSize(50)
    13. .fontWeight(FontWeight.Bold)
    14. // 添加按鈕,以響應(yīng)用戶點(diǎn)擊
    15. Button() {
    16. Text('Next')
    17. .fontSize(30)
    18. .fontWeight(FontWeight.Bold)
    19. }
    20. .type(ButtonType.Capsule)
    21. .margin({
    22. top: 20
    23. })
    24. .backgroundColor('#0D9FFB')
    25. .width('40%')
    26. .height('5%')
    27. // 跳轉(zhuǎn)按鈕綁定onClick事件,點(diǎn)擊時跳轉(zhuǎn)到第二頁
    28. .onClick(() => {
    29. console.info(`Succeeded in clicking the 'Next' button.`)
    30. // 跳轉(zhuǎn)到第二頁
    31. router.pushUrl({ url: 'pages/Second' }).then(() => {
    32. console.info('Succeeded in jumping to the second page.')
    33. }).catch((err) => {
    34. console.error(`Failed to jump to the second page.Code is ${err.code}, message is ${err.message}`)
    35. })
    36. })
    37. }
    38. .width('100%')
    39. }
    40. .height('100%')
    41. }
    42. }
  2. 第二個頁面返回到第一個頁面。

    在第二個頁面中,返回按鈕綁定onClick事件,點(diǎn)擊按鈕時返回到第一頁?!?span>Second.ets”文件的示例如下:

    1. // Second.ets
    2. // 導(dǎo)入頁面路由模塊
    3. import router from '@ohos.router';
    4. @Entry
    5. @Component
    6. struct Second {
    7. @State message: string = 'Hi there'
    8. build() {
    9. Row() {
    10. Column() {
    11. Text(this.message)
    12. .fontSize(50)
    13. .fontWeight(FontWeight.Bold)
    14. Button() {
    15. Text('Back')
    16. .fontSize(25)
    17. .fontWeight(FontWeight.Bold)
    18. }
    19. .type(ButtonType.Capsule)
    20. .margin({
    21. top: 20
    22. })
    23. .backgroundColor('#0D9FFB')
    24. .width('40%')
    25. .height('5%')
    26. // 返回按鈕綁定onClick事件,點(diǎn)擊按鈕時返回到第一頁
    27. .onClick(() => {
    28. console.info(`Succeeded in clicking the 'Back' button.`)
    29. try {
    30. // 返回第一頁
    31. router.back()
    32. console.info('Succeeded in returning to the first page.')
    33. } catch (err) {
    34. console.error(`Failed to return to the first page.Code is ${err.code}, message is ${err.message}`)
    35. }
    36. })
    37. }
    38. .width('100%')
    39. }
    40. .height('100%')
    41. }
    42. }
  3. 打開“Index.ets”文件,點(diǎn)擊預(yù)覽器中的按鈕進(jìn)行刷新。效果如下圖所示:

使用真機(jī)運(yùn)行應(yīng)用

運(yùn)行HarmonyOS應(yīng)用可以使用遠(yuǎn)程模擬器和物理真機(jī)設(shè)備,區(qū)別在于使用遠(yuǎn)程模擬器運(yùn)行應(yīng)用不需要對應(yīng)用進(jìn)行簽名。接下來將以物理真機(jī)設(shè)備為例,介紹HarmonyOS應(yīng)用的運(yùn)行方法,關(guān)于模擬器的使用請參考使用Remote Emulator運(yùn)行應(yīng)用/服務(wù)。

  1. 將搭載HarmonyOS系統(tǒng)的真機(jī)與電腦連接。具體指導(dǎo)及要求,可查看使用本地真機(jī)運(yùn)行應(yīng)用/服務(wù)。
  2. 點(diǎn)擊File > Project Structure... > Project > SigningConfigs界面勾選“Support HarmonyOS”和“Automatically generate signature”,點(diǎn)擊界面提示的“Sign In”,使用華為帳號登錄。等待自動簽名完成后,點(diǎn)擊“OK”即可。如下圖所示:

  3. 在編輯窗口右上角的工具欄,點(diǎn)擊按鈕運(yùn)行。效果如下圖所示:

恭喜您已經(jīng)使用ArkTS語言開發(fā)(Stage模型)完成了第一個HarmonyOS應(yīng)用,快來探索更多的HarmonyOS功能吧。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號