天天看點

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

(目錄)

想到就開始行動,比想更重要。

可以忽略的一些廢話😂😂😂

這篇文章到底為什麼存在?存在的價值到底在哪兒?

我并沒有思考這些,僅僅是想将在開發OpenHarmony應用程式路上遇到的一些問題或者解決方法記錄下來,以便于在某個天氣晴朗的下午我又遇到時可以友善查閱。~~

最終經曆了4個炎熱的10小時,我還是失敗了😂😂😂,

system_core

授權成功,截圖傳回

undefined

😒😒😒,赤裸裸的嘲諷😰😰😰~~

1 安裝VMware Workstation Player

1.1 下載下傳VMware Workstation Player(文章中别名:VM Player)

VM Player下載下傳位址

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

1.2 安裝VM Player

1.2.1 點選VMware-player-full-xxx.exe,進入安裝向導
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
1.2.2 勾選接受許可協定條款
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
1.2.3 更改安裝位置(如果僅有一個磁盤,請移至1.2.4)
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
1.2.4 使用者體驗設定,可預設,也可以取消勾選
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
1.2.5 快捷方式預設
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
1.2.6 開始安裝
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
1.2.7 完成安裝(個人使用跳過許可即可)
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

1.3 打開VM Player

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

1.4 設定USB插入後直接連接配接到主機(Player --> 檔案 --> 首選項)

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

*═—═—═—═—═—═—*至此VM Player安裝完成*═—═—═—═—═—═—*

2 準備Ubuntu20.04系統鏡像包

2.1 Ubuntu系統下載下傳 | Ubuntu

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

2.2 由于下載下傳下來的檔案格式為.torrent,需要使用迅雷下載下傳完整的ISO檔案。

*═—═—═—═—═—═—*Ubuntu鏡像包準備完畢*═—═—═—═—═—═—*

3. 建立OpenHarmony虛拟機

3.1 打開VM Player,點選首頁的建立新虛拟機

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

3.2 勾選稍後安裝作業系統,點選下一步

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

3.3 選擇客戶機作業系統和版本

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

3.4 設定虛拟機名稱和位置(如果有多個盤的話,建議存儲在非C槽中)

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

3.5 指定磁盤大小

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

3.6 完成虛拟機建立

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

3.7 編輯虛拟機設定

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
3.7.1 設定記憶體(建議多點)
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
3.7.2 指定ISO鏡像檔案位置
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
2.7.3 開啟共享檔案夾
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
3.7.4 移除USB控制器
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

*═—═—═—═—═—═—*名為OpenHarmony的Ubuntu虛拟機建立成功*═—═—═—═—═—═—*

4 開始安裝Ubuntu作業系統

4.1 點選VM Player首頁的播放虛拟機

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

4.2 在安裝向導界面左側語言欄選擇中文(簡體),當然也可以使用預設

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

4.3 點選安裝向導界面試用Ubuntu(由于安裝時無法正常顯示,是以需要調分辨率)

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

4.4 在虛拟機桌面右鍵打開終端,輸入

xrandr -s 1280x800

,回車即可

4.5 點選虛拟機桌面安裝Ubuntu20.04LTS,進行安裝

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
4.5.1 以下圖不需要文字描述
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
4.5.2 點選選擇位置
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
4.5.3 填寫必要的資訊
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
4.5.4 等待安裝完成,耗時比較久,可以做點其他事
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

*═—═—═—═—═—═—*Ubuntu作業系統安裝成功*═—═—═—═—═—═—*

5 準備标準系統環境

5.1 搭建Ubuntu環境

5.1.1 将Ubuntu Shell 環境修改為

bash

a. 執行指令檢視是否為

bash

,如果不是則按照[b]操作,若是則跳過

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

b. 執行指令,将Shell由

dash

改為

bash

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

c. 更改成功

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
5.1.2 下載下傳華為內建開發環境IDE DevEco Device Tool下載下傳 | HarmonyOS裝置開發 Linux版本
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
5.1.3 解壓DevEco Device Tool軟體包,并對解壓後的檔案夾進行賦權
unzip devicetool-linux-tool-3.0.0.401.zip
chmod u+x devicetool-linux-tool-3.0.0.401.sh
           
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
5.1.4 執行指令按照DevEco Device Tool
sudo ./devicetool-linux-tool-3.0.0.401.sh
           
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

等待安裝完成

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

出現圖中紅框内容,則表示安裝成功

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
5.1.5 安裝SSH服務

a. 執行指令

sudo apt-get install openssh-server

安裝SSH服務

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

b. 執行指令

sudo systemctl start ssh

啟動SSH服務,執行指令

sudo systemctl status ssh

檢視狀态,為

active(running)

則啟動成功

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
5.1.6 擷取标準系統源碼

a. 執行指令

sudo apt-get install git git-lfs

安裝git用戶端和git-lfs

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

b. 配置使用者資訊

git config --global user.name "yourname"
git config --global user.email "your-email-address"
git config --global credential.helper store
           
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

c. 安裝碼雲repo工具

curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 -o /usr/local/bin/repo  #如果沒有權限,可下載下傳至其他目錄,并将其配置到環境變量中
chmod a+x /usr/local/bin/repo
pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests
           

如果提示

Command 'curl' not found, but can be installed with: sudo apt install curl

則執行指令

sudo apt-get install curl

安裝

curl

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

若提示權限不夠,則在指令前加

sudo

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

d. 使用repo+https下載下傳釋出Tag節點源碼

  • 建立源碼存放目錄
    #DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
  • 進入建立的源碼存放目錄,執行以下指令下載下傳源碼
repo init -u https://gitee.com/openharmony/manifest -b refs/tags/OpenHarmony-v3.2-Beta1 --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'
           

提示

/usr/bin/env: "python": 沒有那個檔案或目錄

,則執行指令

sudo ln -sf /usr/bin/python3 /usr/bin/python

建立一個連結

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

e. 在源碼目錄下執行

bash build/prebuilts_download.sh

安裝編譯器及二進制工具

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

5.2 搭建Windows環境

5.2.1 下載下傳華為內建開發環境IDE DevEco Device Tool下載下傳 | HarmonyOS裝置開發 Windows版本
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
5.2.2 安裝DevEco Device Tool

a. 點選devicetools-windows-tool-xxx.exe打開安裝向導

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

b. 選擇安裝位置

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

c. 同時安裝VSCode

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

d. 選擇python路徑(如果安裝過),沒有安裝,則選擇下載下傳安裝

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

e. 選擇其他元件,預設即可

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

f. 接受協定

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

g. 等待安裝完成,安裝過程會彈出python安裝界面,切勿操作。

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

h. 完成安裝

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

i. 打開VSCode,等待檢查更新完成後重新開機

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
5.2.3 安裝Remote-SSH

a. 在左側擴充中搜尋Remote-SSH,并安裝

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

b. 配置Ubuntu遠端連接配接

在Ubuntu虛拟機中執行

ifconfig

擷取虛拟機IP位址,若提示

Command 'ifconfig' not found, but can be installed with: sudo apt install net-tools

則執行

sudo apt-get install net-tools

指令,然後再次執行

ifconfig

擷取虛拟機IP位址

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

c. 輸入遠端連接配接資訊

ssh [email protected] -A

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

d. 選擇配置檔案

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

e. 在遠端資料總管中出現剛才配置的IP位址時,則配置成功

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
5.2.4 連接配接遠端Ubuntu
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

a. 選擇Linux

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

b. 選擇Continue

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

c. 輸入設定的password(兩個字竟然是敏感資訊)

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
若提示DevEco Device Tool需要重載,則點選重載即可。
5.2.5 為了不用頻繁輸入遠端虛拟機password,需要配置遠端通路Ubuntu環境公鑰

a. 打開Git bash指令(如果沒有安裝,則安裝Git),執行指令,生成SSH公鑰

ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
           
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

b. 配置公鑰

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

c. 斷開連接配接,重新連接配接遠端Ubuntu,需要輸入配置SSH Key時輸入的password

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

*═—═—═—═—═—═—*OpenHarmony标準系統環境準備完畢*═—═—═—═—═—═—*

6 導入、編譯、燒錄

6.1 導入源碼工程

a. 打開VSCode, 首先連接配接遠端虛拟機,然後點選左側DevEco,主界面 --> 首頁 --> 導入工程

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

b. 導入工程界面快速通路選擇虛拟機(tetcl),選擇源碼所在目錄

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

c. 首次導入時,會出現如下提示框,點選導入

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

d. 在選擇工程導入類型界面中選擇從OpenHarmony源碼導入

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

e. 導入工程界面中,産品選擇hihope下的rk3568,OpenHarmony版本選擇3.x,其他預設

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

f. 打開源碼,将在資料總管下看到源碼目錄結構

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

6.2 編譯源碼

a. 打開主界面工程,點選配置工程

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

c. 在toolchain頁簽中,會自動檢測依賴的編譯工具鍊是否完備,如果提示部分工具鍊缺失,點選安裝即可自動安裝。

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

c. 在blank配置頁中,設定源碼的編譯類型

build_type

,預設即可,然後單擊右上角儲存按鈕。

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

d. 在PROJECT TASKS中,點選對應的開發闆下的Build進行編譯。

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

e. 編譯成功後,會在out目錄下輸出對應開發闆所需的鏡像檔案

6.3 燒錄(由于VSCode無法配置燒錄分區選擇使用瑞芯微燒錄工具)

a. 打開瑞芯微燒錄工具

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

b. 将編譯好的鏡像檔案拷貝到windows磁盤中

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

c. 在瑞芯微燒錄工具加載鏡像視窗右鍵導入配置(并更改檔案所在路徑,確定能夠找到)

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

d. 連接配接開發闆,長按更新鍵,然後按RESET按鍵,再點選瑞芯微燒錄工具中的執行,在右側會顯示下載下傳Boot,然後松開更新鍵,等待燒錄完成。

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

7 制作截圖AppDemo

7.1 建立ScreenShot項目

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

7.2 選擇使用的Ability模闆

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

7.3 編寫代碼

7.3.1 導入子產品
// ScreenShot/entry/src/main/ets/MainAbility/pages/index.ets

import screenshot from '@ohos.screenshot';

// screenshot.save()傳回的是PixelMap,是以需要導入
import image from '@ohos.multimedia.image';
           
7.3.2 配置權限

a.

module.json5

中配置權限

// ScreenShot/entry/src/main/module.json5
{
    "requestPermissions": [
      {
        "name": "ohos.permission.CAPTURE_SCREEN"
      }
    ],
}
           

b. 因為

screenshot

system_core

等級,不僅僅需要在config.json中配置,還要修改profile檔案中配置(Sdk/toolchains/版本/lib/UnsgnedReleasedProfileTemplate.json&UnsgnedDebugProfileTemplate.json)

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

c. 配置完成後,對應用進行簽名

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
7.3.3 檢視權限是否授予
// MainAbility.ts onWindowStageCreate()
    onWindowStageCreate(windowStage) {
        // Main window is created, set main page for this ability
        console.log("[Demo] MainAbility onWindowStageCreate")
        var context = this.context;
        let array: Array<string> = ['ohos.permission.CAPTURE_SCREEN'];
        context.requestPermissionsFromUser(array).then((data) => {
            console.log('ScreenShot ---> MainAbility ---> data type: ' + typeof(data));
            console.log('ScreenShot ---> MainAbility ---> data: ' + JSON.stringify(data));
            console.log('ScreenShot ---> MainAbility ---> data permissions: ' + data.permissions);
            console.log('ScreenShot ---> MainAbility ---> data result: ' + data.authResults);
        }).catch(err => {
            console.error('ScreenShot ---> MainAbility ---> err: ' + JSON.stringify(err));
        })

        windowStage.setUIContent(this.context, "pages/index", null)
    }
           
7.3.4 點選按鈕,實作截圖
// 擷取螢幕截圖
screenshot.save(options?: ScreenShotOptions, callback: AsyncCallback<image.PixelMap>):void

screenshot.save(options?: ScreenShotOptions): Promise<image.PixelMap>

// 設定截圖圖像的資訊
ScreenShotOptions = {
	screenRect: {
		"left": 200,
		"top": 100,
		"width": 200,
		"height": 200
	}, // 表示截圖圖像的區域,不傳值預設為全屏
	imageSize: {
		"width": 300,
		"height": 300
	}, // 表示截取圖像的大小,不傳值預設為全屏
	rotation: 0, // 表示截圖圖像的旋轉角度,目前僅支援輸入值為0,預設值為0
	displayId: 0// 表示截圖圖像的顯示裝置Display的ID号,API8以上
}
           
getScreen = (isFullScreen: boolean) => {
    let options: screenshot.ScreenshotOptions = {
      screenRect: { left: 0, top: 0, width: 400, height: 400 },
      imageSize: { width: 400, height: 400 },
      rotation: 0,
      displayId: 0
    }
    if (isFullScreen) {
      options = {
        rotation: 0
      }
    }
    screenshot.save(options, (err, data: image.PixelMap) => {
      if (err) {
        console.error('ScreenShot --> error: ' + JSON.stringify(err));
        return;
      }
      console.info('ScreenShot --> data: ' + JSON.stringify(data));
      this.image = data;
    })
  }
           

8 存在問題

8.1

system_core

授權回顯

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作

8.2

screenshot.save()

傳回

undefined

#DAYU200體驗官# 為探究OpenHarmony 螢幕截圖API做的工作
如果有成功調用截圖Api的大佬,可以分享一下。

附件連結:

ScreenShot.rar(https://ost.51cto.com/resource/2117)

#DAYU200體驗官# 為探究OpenHarmony 螢幕截.pdf(https://ost.51cto.com/resource/2116)

繼續閱讀