分享

编程自动安装 Win 安卓子系统,自动安装应用,ADB 快速开发

 新用户65756011 2023-05-09 发布于广东

本文使用简单易用的 aardio 开发环境,体积只有几 MB,下载打开就可以写代码,不需要任何复杂的配置,可以方便地生成小巧的独立 EXE 程序。

▶ 自动安装安卓子系统


使用下面的 aardio 代码可以获取到安卓子系统的官方下载地址,代码很简单:

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

var ele = htmlDoc.queryEle(tagName='a',innerText='\.msixbundle$');
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 自带范例:『 操作系统 > 安卓子系统 > 一键安装 』

图片

▶ 在安卓子系统中自动安装应用


在系统搜索中输入 'android' 搜索,然后在搜索结果中单击打开安卓子系统设置。

图片

也可以调用下面的 aardio 代码直接打开安卓子系统设置:

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


在设置界面切换到『开发人员』:

图片

点下图 ❶ 处切换为启用开发人员模式:

图片

然后在上图  处可以看到连接安卓子系统的 IP 地址与端口,IP 固定是 127.0.0.1,端口默认是 58526。

如果没有看到 IP 与端口,这是因为安卓子系统还没有启动。点一下上图   处的『管理开发人员设置』就会启动安卓子系统,然后再关闭『开发人员模式』,最后再开启『开发人员模式』,连接安卓子系统的 IP 端口就会显示出来了。

使用下面的 aardio 代码就可以通过 ADB 连接安卓子系统:

import process.adb;
process.adb.connect('127.0.0.1:58526',true)


这个函数有 2 个返回值,成功则返回值 1 非空,失败则返回值 2 为错误信息(非 null 值)。

如果要完美一些可以这样写:

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

if(err){
    console.log(err)
    console.log('首次连接,请在 WSA 弹出的确认对话框中通过验证'
    return;


如果 Windows 弹出是否允许 ADB 调试连接的对话框,如下:

图片

可勾选『始终允许从此计算机』,然后点击『允许』按钮。

安装安卓应用很简单,代码如下:

import process.adb;

//连接安卓子系统,注意参数 @2 要设为 true (连接后切换为当前设备)
process.adb.connect('127.0.0.1:58526',true)

//下载并安装应用(参数可以是本地路径)。
process.adb.installUrl('https://weixin.qq.com');


▶ 查找与运行安卓子系统应用


用下面的 aardio 代码可以检测安卓子系统是否安装了指定的应用:

import fsys.lnk;
if( fsys.lnk.search('wsa\://com.tencent.mm') ){
     
}


fsys.lnk.search() 的参数支持模式匹配,所以上面的冒号前面用了转义符写为 '\:'。这个函数如果找到应用会返回 2 个值(启动路径与参数)。

用下面的 aardio 代码可以直接运行安卓子系统的应用:

raw.execute('wsa://com.tencent.mm')


打开安卓子系统内置设置:

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


运行效果如下:

图片

在设置里点击『 应用 > 所有应用』,点击应用页面的『打开』链接启动安卓应用。

可以运行 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.'');

//或者直接调用下面的函数也可以
process.adb.startUrl('https://www.'); 


通过 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 > 扫码配对。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多