自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

設備端直裝Hap的具體方案:開發(fā)Shell服務提供調用

系統(tǒng) OpenHarmony
開發(fā)一個Shell命令服務放到系統(tǒng)內,用于操作bm/aa等本地shell命令去安裝和打開應用,并提供http或其他協(xié)議的接口給上層應用調用。很明顯這種方式違背了OpenHarmony的訪問控制權限機制,只需要申請一個基本的INTERNET權限用于調用本機接口即可,這種方式很不安全,只是探索研究和嘗試。

想了解更多關于開源的內容,請訪問:

51CTO 開源基礎軟件社區(qū)

https://ost.51cto.com

序言

之前在《OpenHarmony設備直裝hap脫離電腦hdc的兩種實現(xiàn)思路》一文中,我提到了兩種實現(xiàn)直裝hap的思路,上篇文章已經(jīng)講過了第一種思路(包管理API)的實現(xiàn)細節(jié)了,那這次再來分享一下第二種思路(另辟蹊徑)的實現(xiàn)細節(jié)。

第二種思路是:開發(fā)一個shell命令服務放到系統(tǒng)內,用于操作bm/aa等本地shell命令去安裝和打開應用,并提供http或其他協(xié)議的接口給上層應用調用。很明顯這種方式違背了OpenHarmony的訪問控制權限機制,只需要申請一個基本的INTERNET權限用于調用本機接口即可,這種方式很不安全,只是探索研究和嘗試。

開發(fā)shell服務

這里以go語言為例。

myshell.go:

package main

import (
	"fmt"
	"log"
	"net/http"
	"os/exec"
	"strings"
)

func main() {
	http.HandleFunc("/execCommand", ExecCommand)
	err := http.ListenAndServe("0.0.0.0:23333", nil)
	if err != nil {
		log.Fatal("ListenAndServe: ", err)
	}
}

func ExecCommand(w http.ResponseWriter, r *http.Request) {
	name := r.FormValue("name")
	args := r.FormValue("args")

	argsArr := strings.Split(args, " ")
	cmd := exec.Command(name, argsArr...)

	out, err := cmd.CombinedOutput()
	if err != nil {
		_, err := fmt.Fprintf(w, err.Error())
		if err != nil {
			return
		}
		return
	}

	_, err = fmt.Fprintf(w, string(out))
	if err != nil {
		return
	}
}

在 windows 平臺上交叉編譯生成 linux arm64 平臺的的可執(zhí)行程序。

SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=arm64
go build -o myshell myshell.go

配置shell服務開機自啟

編寫一個 myshell.cfg 文件,用于描述開機自啟shell服務的信息。

{
    "import" : [],
    "jobs" : [{
            "name" : "init",
            "cmds" : [
                "start myshell"
            ]
        }
    ],
    "services" : [{
            "name" : "myshell",
            "path" : ["/system/bin/myshell"]
        }
    ]
}

推送 myshell 和 myshell.cfg 到系統(tǒng)目錄,然后重啟設備,此服務將開機自啟。

hdc shell mount -o remount,rw /
hdc file send myshell /system/bin/myshell
hdc file send myshell.cfg /system/etc/init/myshell.cfg
hdc shell chmod 777 /system/bin/myshell
hdc shell reboot

項目權限配置

entry/src/main/module.json5:

{
  "name": "ohos.permission.INTERNET",
},

安裝應用

調用剛才開發(fā)的shell服務提供的htpp接口,傳遞兩個參數(shù),第一個name是調用本地shell的絕對路徑,第二個args是要執(zhí)行命令的參數(shù)

import http from '@ohos.net.http';

function installAppByMyShell() {
  let httpRequest = http.createHttp();
  httpRequest.request("http://127.0.0.1:23333/execCommand", {
    method: http.RequestMethod.POST,
    header: {
      'Content-Type': 'application/x-www-form-urlencoded'
    },
    extraData: "name=/bin/bm&args=install -r -p /data/local/tmp/testapp.hap",
  }, (err, data) => {
    if (!err) {
      if (data.responseCode == 200) {
        if (data.result.toString().startsWith("install bundle successfully.")) {
          promptAction.showToast({message: '安裝成功', duration: ToastDuration});
        } else {
          promptAction.showToast({message: '安裝失敗', duration: ToastDuration});
        }
      }
    } else {
      console.info('error:' + JSON.stringify(err));
      httpRequest.destroy();
    }
  }
  );
}

打開/卸載應用

由于這種實現(xiàn)方法的特殊性,你可以通過http接口調用任何本地的shell命令,因此,你可以調用bm/aa等本地shell去實現(xiàn)打開應用、卸載應用,甚至是其他的任何操作。

想了解更多關于開源的內容,請訪問:

51CTO 開源基礎軟件社區(qū)

https://ost.51cto.com

責任編輯:jianghua 來源: 51CTO 開源基礎軟件社區(qū)
相關推薦

2009-11-04 16:36:22

Windows Emb解決方案

2012-07-06 09:55:38

云服務開發(fā)工具

2023-08-01 16:29:26

鴻蒙設備安裝

2010-04-06 09:48:33

Oracle性能

2013-03-26 09:55:19

思科云服務SolveDirect

2022-12-31 14:51:48

微服務Golang

2012-05-16 13:28:18

SAP亞馬遜云計算

2010-05-17 16:31:48

Mysql臨時表

2010-05-12 12:15:11

MySQLGROUP_

2011-05-06 11:55:41

紅帽PaaS

2017-10-17 11:39:40

微服務路由解決方案

2009-08-13 12:54:29

2010-09-29 17:49:17

戴爾解決方案

2014-03-12 12:03:19

托管服務云服務昆騰

2010-03-31 22:35:06

2014-06-26 13:12:19

數(shù)據(jù)中心方案服務

2011-09-08 17:23:43

賽門鐵克VMware虛擬桌面

2009-12-14 10:50:34

多路由接入

2010-06-07 10:23:34

MySQL GUI T
點贊
收藏

51CTO技術棧公眾號