Loading... 如果我们不对项目设置图标,则我们看到最终生成的 app 的图标为默认的机器人图标,事实上,我们是可以设置火山 app 自定义的图标的。你只需要准备一个 jpg 或 png 等的图标文件即可。 本例程相对上一个例程代码上没有做什么修改,但是设置好了程序的图标,图标文件放在项目文件夹 `seticon_day9\src\icon\chat.jpg` 文件夹下的 `chat.jpg` 文件。 设置方法很简单,点击菜单的 **项目 - 当前项目属性**,在 **程序图标** 一栏选择图标路径即可,尽量是英文路径,避免出现报错,若报错,可以考虑下是不是含有中文的问题。 然后附上咱们的源码下载地址: <div class="hideContent">该部分仅登录用户可见</div> 上面讲的比较简单,就不多说什么了,大家看源码效果就好。 下面我来讲一个今天遇到的无法在调试时把 app 推送安装到夜神模拟器的问题和解决方案。 首先我们需要了解到,将 app 推送到模拟器是什么原理。其实是通过安卓的 adb 工具来推送的。adb 这款工具在安卓的 sdk 包的 tools 中,可以通过它来使用命令行的方式调试一些安卓程序,获取一些高级的信息。在火山程序中的应用,应该仅仅是用来连接模拟器和推送 app。 在火山 app 的调试窗口我们可以看到例如连接到设备:127.0.0.1:62001 这样的提示。这个地址即为设备的本地连接地址。62001 表示夜神模拟器的默认端口地址,其他模拟器有其他的地址。**但夜神模拟器也不仅仅只有 62001 这个端口地址,这里还有些坑和需要了解的知识,后面我会详述。** 在火山中可以在 `工具 - 选项 - 安卓项目管理器 - 全局 - 欲连接到的设备地址` 一栏填入 62001 来表示夜神模拟器。如果留空这里的设置,则默认查找目前在线的设备来推送,当然如果你只有一个模拟器设备的话,推送的自然是正确的了。 我这次遇到的问题是,夜神模拟器提醒我升级软件,我进行了升级,升级完成后我发现在调试火山程序时提示连接失败了,说找不到设备。我想我明明开着夜神模拟器呀?怎么会连接不成功呢。 经过查资料和测试,最后发现的原因是,**adb 的版本在夜神模拟器里提供的跟在安卓 adk 提供的不一样** 。 首先我们使用 cmd(我用的是管理员模式,下同)进入安卓的 adb 所在目录:`voldev\plugins\vprj_android\sdk\android\platform-tools`,这里面有个 `adb.exe`,前面是火山程序的安装路径,大家按自己电脑的来。 输入命令: ```bash adb version ``` 显示的版本号为 1.0.39(你可能是其他的显示),而我来到夜神模拟器的安装目录:`Nox\bin`,前面的部分为夜神模拟器的安装路径,大家按自己的来。 输入下述两个命令: ```bash adb version nox_adb version ``` 显示的版本结果均为 1.0.36,这里就表示不一样了。 最后经过测试的确是版本不同的原因(吐槽一句 adb 还真是有点儿傻傻的)。 解决方案是把大家的版本号变成一样即可。 我这里是修改的安卓 sdk 中的 `adb.exe`,首先添加 `.bak` 后缀名把原有的备份,以防万一,然后把夜神模拟器安装 bin 目录中的 `adb.exe` 复制过来。 此时已经可以正常用火山 IDE 来调试 app 了。【在 飞扬 16 版本中测试,有时候能自动识别,有时候不能,需要指定正确的端口号火山才能识别,比如不为 62001 而为 62025,需要指定才能识别。如果不能识别报错,请指定后编译运行】 --- 同时我也发现了另外一个事情,就是这次正常连接后,看到火山的调试窗口显示的端口信息不再是 62001 了。而是 62025。为什么呢。 首先本质原因是因为我的打开的模拟器是多开的。夜神模拟器是支持多开的,我新建了一个用来做课程演示用。如果你打开的模拟器是它安装时默认创建的那个,通常来讲端口就是 62001,如果打开的是你新建的后面的多开的模拟器,则端口可能会有变化。 可以通过下述 cmd 命令来查看当前的模拟器端口和地址(先进入 adb 的目录或将 adb 目录加入环境变量): ```bash adb devices ``` 我们可以看到会展示地址为 127.0.0.1:62025。【特别提醒:特别需要注意的是,如果你先打开 cmd 窗口,再打开模拟器,有可能识别不到设备。**请先打开模拟器,再打开 cmd 窗口查看即可**】 我们可以用下述命令来连接到该端口地址: ```bash adb connect 127.0.0.1:62025 ``` 如果你现在确实打开着这台模拟器的话,则会返回结果: ```bash already connected to 127.0.0.1:62025 ``` 我们还可以用系统端口查询的方法来知道现在是什么端口被占用着,后面这些命令不需要进入 adb 目录或使用 adb,用的是系统自带的程序,我们可以用这里学到的知识来查询其他端口的占用情况。 如果查看现在电脑上所有端口的占用情况,可以用如下命令: ```bash netstat -ano ``` 如果需要实现我们上述的查询目的,首先我们需要打开任务管理器,比如夜神模拟器,在进程选项卡,找到 `NoxVMHandel Frontend` 这个名称,然后打开 PID 列的显示,获取它的 PID,比如本例为 13736。 然后在 cmd 中输入如下代码来查询: ```bash netstat -ano|findstr "13736"|findstr "ESTABLISHED" ``` 用来查找含有 13736 以及 ESTABLISHED 那一行,因为打开该端口被占用时,状态为 ESTABLISHED。我们可以看到返回: ```bash TCP 127.0.0.1:62025 127.0.0.1:54625 ESTABLISHED 13736 ``` 其中每一列分别表示的含义为:协议,**本地地址**,外部地址,状态,PID,其中这个本地地址就是 adb 要连接的地址了。 【补充:实际应用中,我也发现有的时候状态不一定为 ESTABLISHED 而是为 LISTENING 或者其他,这个方法不是那么适合查看当前模拟器的端口是哪个。用 `adb devices` 命令是最好的】 此处仅做研究和了解,不是重点知识,大家看个故事看一看即可。 最后修改:2021 年 08 月 17 日 © 允许规范转载 赞 赠人玫瑰,手留余香