天天看點

安卓子系統一鍵安裝,快速添加應用,adb 程式設計入門

作者:aardio

本文使用簡單易用的 aardio 開發環境,體積隻有幾 MB,下載下傳打開就可以寫代碼,不需要任何複雜的配置,可以友善地生成小巧的獨立 EXE 程式。

自動安裝安卓子系統

使用下面的 aardio 代碼可以擷取到安卓子系統的官方下載下傳位址,代碼很簡單:

import web.rest.htmlClient 
var htmlDoc = web.rest.htmlClient.post("https://store.rg-adguard.net/api/GetFiles",{
    type: "ProductId",
    url: "9P3395VX91NR",
    ring: "WIS",
    lang: "zh"
})

var ele = htmlDoc.queryEle(tagName="a",innerText="\.msixbundle#34;);
var url = ele.href;            

傳回的下載下傳連結如果不夠快,重新擷取幾次一般就變快了。

用下面的代碼下載下傳安卓子系統(支援斷點續傳),然後自動安裝:

//下載下傳安卓子系統
import inet.downBox;
var downBox = inet.downBox(winform,"下載下傳安卓子系統(WSA)",1);
var wsaPath = downBox.download(url,"/download/wsa")

//自動安裝安卓子系統 
import process.popen;
process.popen.ps(`-command`,`&{Add-AppxPackage "`+wsaPath+`"}`);           

用下面的代碼可以檢測系統是否已安裝安卓子系統:

import com.shell;
if( com.shell.findApp(,"WindowsSubsystemForAndroid") ){
    
}           

用下面的代碼打開安卓子系統設定界面:

com.shell.activateApp("WindowsSubsystemForAndroid");           

完整的安卓子系統自動安裝工具源代碼請參考 aardio 自帶範例:『 網絡應用 > 安卓子系統 > 一鍵安裝 』

安卓子系統一鍵安裝,快速添加應用,adb 程式設計入門

在安卓子系統中自動安裝應用

在系統搜尋中輸入 "android" 搜尋,然後在搜尋結果中單擊打開安卓子系統設定。

安卓子系統一鍵安裝,快速添加應用,adb 程式設計入門

也可以調用下面的 aardio 代碼直接打開安卓子系統設定:

import com.shell;
com.shell.activateApp("WindowsSubsystemForAndroid");           

在設定界面切換到『開發人員』:

安卓子系統一鍵安裝,快速添加應用,adb 程式設計入門

點下圖 ❶ 處切換為啟用開發人員模式:

安卓子系統一鍵安裝,快速添加應用,adb 程式設計入門

然後在上圖 ❷ 處可以看到連接配接安卓子系統的 IP 位址與端口,IP 固定是 127.0.0.1,端口預設是 58526。

如果沒有看到 IP 與端口,這是因為安卓子系統還沒有啟動。點一下上圖 ❸ 處的『管理開發人員設定』就會啟動安卓子系統,然後再關閉『開發人員模式』,最後再開啟『開發人員模式』,連接配接安卓子系統的 IP 端口就會顯示出來了。

使用下面的 aardio 代碼就可以通過 ADB 連接配接安卓子系統:

import process.adb;
process.adb.connect("127.0.0.1:58526")           

這個函數有 2 個傳回值,成功則傳回值 1 非空,失敗則傳回值 2 為錯誤資訊(非 null 值)。

如果要完美一些可以這樣寫:

import console.int;
import process.adb;
var ret,err = process.adb.connect("127.0.0.1:58526");

if(err){
    console.log(err)
    console.log("首次連接配接,請在 WSA 彈出的确認對話框中通過驗證") 
    return;
}            

如果 Windows 彈出是否允許 ADB 調試連接配接的對話框,如下:

安卓子系統一鍵安裝,快速添加應用,adb 程式設計入門

可勾選『始終允許從此計算機』,然後點選『允許』按鈕。

安裝安卓應用很簡單,代碼如下:

import process.adb;

//連接配接安卓子系統,注意參數 @2 要設為 true (連接配接後切換為目前裝置)
process.adb.connect("127.0.0.1:58526",true)

//下載下傳并安裝應用(參數可以是本地路徑)。
process.adb.installUrl("https://d.toutiao.com/PqXU");           

查找與運作安卓子系統應用

用下面的 aardio 代碼可以檢測安卓子系統是否安裝了指定的應用:

import fsys.lnk;
if( fsys.lnk.search("wsa\://com.ss.android.article.news") ){
     
}           

fsys.lnk.search() 的參數支援模式比對,是以上面的冒号前面用了轉義符寫為 "\:"。這個函數如果找到應用會傳回 2 個值(啟動路徑與參數)。

用下面的 aardio 代碼可以直接運作安卓子系統的應用:

raw.execute("wsa://com.ss.android.article.news")           

打開安卓子系統内置設定:

raw.execute("wsa://com.android.settings")           

運作效果如下:

安卓子系統一鍵安裝,快速添加應用,adb 程式設計入門

在設定裡點選『 應用 > 所有應用』,點選應用頁面的『打開』連結可以啟動安卓應用。

可以運作 aardio 中的『工具 > 視窗探測器』,将視窗探針拖到安卓應用視窗上。在視窗探測器裡顯示了安卓應用的視窗類名,在類名前加上 wsa:// 就是這個應用的啟動連結。

例如内置安卓應用『檔案』的視窗類名是

"com.android.documentsui"           

,那麼打開這個應用的連結就是

"wsa://com.android.documentsui"           

,在 aardio 代碼中運作下面的代碼可以打開『檔案』應用:

raw.execute("wsa://com.android.documentsui")           

其他我們自己安裝的安卓應用,在 Windows 開始菜單裡可以看到連結,右鍵看連結屬性,在啟動參數裡也可以看到 wsa:// 開頭的連結。

adb 開發

adb 可以做的事很多,不僅可以控制安卓子系統,也可以控制安卓手機。

下面是一個簡單的例子:

import console.int;
import process.adb;

/*
查找已連接配接裝置,找不到傳回 null,
找到多個裝置會自動設定預設裝置,找到單個裝置時不限定預設裝置。
*/
if(!process.adb.findDevice()){
    return console.log("未連接配接手機裝置")   
}
 
//擷取所有裝置
var devices = process.adb.getDevices();
console.dumpJson(devices);
 
//擷取目前裝置
var serialNo = process.adb.getSerialNo(); 
console.log("目前裝置",serialNo)

var state = process.adb.getState();
console.log(state=="device"?"已連接配接":"未連接配接")

//執行 ADB 指令并擷取結果,成功傳回程序輸出,失敗傳回 null,錯誤資訊。
console.log(process.adb.get("get-state"))

//執行 Shell 指令
var adb = process.adb.shell("ls"); 
var out = adb.readAll(); //讀取程序輸出,adb 是一個 process.popen 對象,請參考該庫函數文檔。
console.log(out);

//執行 am start 指令打開程式,例如調用浏覽器打開網址
var adb = process.adb.shell("am start -a android.intent.action.VIEW -d 'https://www.example.com'");

//或者直接調用下面的函數也可以
process.adb.startUrl("https://www.example.com");            

通過 adb 模拟按鍵發送手機短信:

import process.adb;
process.adb.connect("IP:端口",true)

//發送短信
process.adb.shellGet(`am start -a android.intent.action.SENDTO -d sms:目标手機号碼 --es sms_body "短信内容" --ez exit_on_sent true`)

//模拟按鍵
process.adb.keyDpadRight();
process.adb.keyEnter();
process.adb.keyHome()           

adb 還支援無線連接配接,掃碼配對,在 aardio 中實作掃碼配對很簡單,幾句代碼就可以了,如下:

import process.adb.qrCode;
var qrBmp = process.adb.qrCode(winform );
winform.plus.setBackground(qrBmp.copyBitmap(winform.plus.width));           

aardio 範例中已經自帶了一個掃碼配對工具,範例位置:網絡應用 > adb > 掃碼配對。

繼續閱讀