目录
[1. 环境搭建(windows)](#1. 环境搭建(windows))
[Connect IQ SDK | Garmin Developers 下载SDK](#Connect IQ SDK | Garmin Developers 下载SDK)
[Visual Studio Code - 开源的 AI 代码编辑器 VScode下载](#Visual Studio Code - 开源的 AI 代码编辑器 VScode下载)
[2. 工程创建和编译](#2. 工程创建和编译)
[3. 模拟器测试](#3. 模拟器测试)
[4. 真机测试](#4. 真机测试)
[5. 发布IQ应用](#5. 发布IQ应用)
1. 环境搭建(windows)
下载3个环境:
- SDK
2.VScode
- Java
Connect IQ SDK | Garmin Developers 下载SDK
-
选择安装器:根据你的操作系统下载对应的安装程序。
-
Windows :
.exe安装程序,推荐使用默认路径(如C:\Garmin\ConnectIQ-Sdk)。 -
macOS :
.dmg镜像文件。 -
Linux :
.sh脚本文件或.tar.gz压缩包。
-
-
运行安装:按照向导完成安装。安装程序会自动配置部分环境。(SDK下载后,需要申请一个账号,有了就可以进去下载对应的SDK)
Visual Studio Code - 开源的 AI 代码编辑器VScode下载
-
安装插件 :在 VS Code 扩展商店中搜索并安装 "Garmin Connect IQ" 官方插件。

-
创建key:ctrl+shift+P;选择monkeyc:generate a Developer Key (这个一般你需要你下载好SDK)
-
配置 SDK 路径:
你下载的SDK路径需要加到工程编译中;
- SDK:C:\Garmin\ConnectIQ\Sdks\connectiq-sdk-win-8.4.0-2025-12-03-5122605dc
- key:C:\work-monkeyC\work\App\new_program\key
java环境下载
- Oracle Java 11 :可从 Oracle官网 下载(可能需要注册账户)。
- OpenJDK 11 :推荐从 Adoptium(Temurin) 下载,这是开源免费的发行版。
如何验证安装成功?
为了确保一切就绪,你可以检查以下几点:
Java 版本:终端中 java -version 输出为 11。
SDK 命令:在终端中运行 monkeyc -v 能输出编译器版本号。
IDE 插件:VS Code 或 Eclipse 中已安装 Connect IQ 插件且 SDK 路径正确。
设备连接:手表在 Garmin 模式下能被 monkeydo -d 命令识别。
模拟器运行:按 F5 可以成功启动模拟器并看到示例应用。
2. 工程创建和编译
在 VS Code 中操作最为直观:
创建工程(vscode的插件都下载了就可以)
-
创建项目 :按下
Ctrl+Shift+P(Cmd+Shift+P),输入 "Monkey C:new Project" 并选择。 -
填写信息 :按向导填写项目名(如
MyFirstApp)、设备类型(选择venu3)等。 -
运行与调试:
-
在模拟器中运行 :按
F5或点击运行按钮,SDK 模拟器将启动并运行你的应用。所有System.println()的调试信息会实时输出在 VS Code 的 "输出" 面板中(选择 "Connect IQ" 频道)。 -
在真机中运行 :确保手表已连接,在 VS Code 底部的状态栏,将运行目标从模拟器切换到你的设备(如
venu3),再次运行即可安装到手表。
-
创建Garmin APP工程
编译key
- 创建开发者key:按下
Ctrl+Shift+P(Cmd+Shift+P),输入"MonkeyC:generate a developer Key" 点击确认,选择一个保存你key的文件下。(这步的操作是在你安装好你的SDK的情况下,不要关闭它去产生的)
进行编译工程
我写了一个python脚本进行编译,可以编译出iq(发行版用)和prg(测试用)文件;
import subprocess
import time
import os
import sys
def execute_command(command, description):
"""执行命令并返回结果"""
print(f"\n{'='*50}")
print(f"执行: {description}")
print(f"命令: {command}")
print('='*50)
try:
result = subprocess.run(
command,
shell=True,
check=True,
capture_output=True,
text=True,
encoding='utf-8',
errors='ignore'
)
print("执行成功!")
if result.stdout:
print("\n输出:")
print(result.stdout)
return True
except subprocess.CalledProcessError as e:
print(f"\n执行失败!错误码: {e.returncode}")
if e.stdout:
print("\n标准输出:")
print(e.stdout)
if e.stderr:
print("\n错误输出:")
print(e.stderr)
return False
except Exception as e:
print(f"\n执行出错: {str(e)}")
return False
def main():
"""主函数"""
#下面的是需要你自己根据自己工程实际情况的,sdk,key的位置决定的
#工程路径:C:\work-monkeyC\work\App\new_program\APP2\APP2
#SDK路径:C:\Garmin\ConnectIQ\Sdks\connectiq-sdk-win-8.4.0-2025-12-03-5122605dc\bin
#key路径:key\developer_key
config = {
'project_path': r'C:\work-monkeyC\work\App\new_program\APP2\APP2',
'sdk_path': r'C:\Garmin\ConnectIQ\Sdks\connectiq-sdk-win-8.4.0-2025-12-03-5122605dc\bin',
'real_device_output': r'bin\APP2V251230.iq',
'simulator_output': r'bin\APP2V251230.prg',
'device': 'venu3',
'jungle_file': 'monkey.jungle',
'key_file': r'key\developer_key'
}
print("Garmin ConnectIQ 自动化编译与测试工具")
print("="*60)
# 检查路径是否存在
if not os.path.exists(config['project_path']):
print(f"错误:项目路径不存在 - {config['project_path']}")
sys.exit(1)
monkeyc_path = os.path.join(config['sdk_path'], 'monkeyc.bat')
if not os.path.exists(monkeyc_path):
print(f"错误:monkeyc.bat 不存在 - {monkeyc_path}")
sys.exit(1)
simulator_path = os.path.join(config['sdk_path'], 'simulator.exe')
if not os.path.exists(simulator_path):
print(f"错误:simulator.exe 不存在 - {simulator_path}")
sys.exit(1)
monkeydo_path = os.path.join(config['sdk_path'], 'monkeydo.bat')
if not os.path.exists(monkeydo_path):
print(f"错误:monkeydo.bat 不存在 - {monkeydo_path}")
sys.exit(1)
# 0. clean 编译内容
clean_command = (
f'powershell -Command "Remove-Item \'{os.path.join(config["project_path"], "bin", "*.prg")}\' -Force -ErrorAction SilentlyContinue; '
f'Remove-Item \'{os.path.join(config["project_path"], "bin", "*.bar")}\' -Force -ErrorAction SilentlyContinue; '
f'Remove-Item \'{os.path.join(config["project_path"], "bin", "external-mir")}\' -Recurse -Force -ErrorAction SilentlyContinue; '
f'Remove-Item \'{os.path.join(config["project_path"], "bin", "gen")}\' -Recurse -Force -ErrorAction SilentlyContinue; '
f'Remove-Item \'{os.path.join(config["project_path"], "bin", "mir")}\' -Recurse -Force -ErrorAction SilentlyContinue; '
f'Write-Host \'Clean completed\'"'
)
execute_command(clean_command, "清理旧的编译产物")
# 1. 编译真实板子版本
real_device_compile_command = (
f'powershell -Command "cd \'{config["project_path"]}\'; '
f'& \'{monkeyc_path}\' -e -o \'{config["real_device_output"]}\' '
f'-d {config["device"]} -f \'{config["jungle_file"]}\' '
f'-y \'{config["key_file"]}\'"'
)
if not execute_command(real_device_compile_command, "编译真实板子版本"):
sys.exit(1)
# 2. 编译模拟器版本
simulator_compile_command = (
f'powershell -Command "cd \'{config["project_path"]}\'; '
f'& \'{monkeyc_path}\' -o \'{config["simulator_output"]}\' '
f'-d {config["device"]} -f \'{config["jungle_file"]}\' '
f'-y \'{config["key_file"]}\'"'
)
if not execute_command(simulator_compile_command, "编译模拟器版本"):
sys.exit(1)
# 3. 启动模拟器
simulator_command = (
f'powershell -Command "Start-Process -FilePath \'{simulator_path}\'"'
)
if execute_command(simulator_command, "启动模拟器"):
print("\n等待模拟器启动...")
time.sleep(5) # 等待模拟器完全启动
else:
print("\n模拟器启动失败,跳过模拟测试")
sys.exit(1)
# 4. 模拟测试
run_command = (
f'powershell -Command "cd \'{config["project_path"]}\'; '
f'& \'{monkeydo_path}\' \'{config["simulator_output"]}\' {config["device"]}"'
)
execute_command(run_command, "运行模拟测试")
print("\n" + "="*60)
print("所有命令执行完成!")
print("="*60)
if __name__ == "__main__":
main()
这个脚本你要关注的是

你要根据实际的情况下你的路径,修改就可以了,它可以直接在powershell中进行编译。
如果你疑惑我为啥不拿vscode编译,是因为vscode用的少,自己会脚本所以就使用了比较熟悉的方法,你如果擅长vscode,那你就使用vscode编译就好。
得修改两个参数,不然创建工程的图位置放的不对


编译产生的执行文件

3. 模拟器测试
如果进行编译工程你是成功的,那就可以测试你的APP工程了。
我是用的方案是log信息;因为我主要是维护,开发的话,应该还会有更好的方案;
System.println("item 1")
4. 真机测试
这个最花我时间,我给大家节省下时间,因为这个就是信息差。(信息平权)
-
手表和电脑USB连接
-
电脑等1-3秒会弹出一个文件夹

-
继续打开文件,在我写的路径位置下五角星的地方放置你的工程产生的后缀prg的文件(假设五角星是AAA.prg)

-
接下来最关键的你需要保留下来你真机测试的log信息来分析,进入LOGS文件夹,在里面创建一个文件,它的名字是(假设你五角星处放的是AAA.prg),所以你的LOGS文件夹中就需要创建一个AAA.txt文件,这个文件就会保留你的log信息出来(其他名字就不会保存你的APP log信息)。

-
放好AAA.prg和创建好AAA.txt文件,你就可以断开手表USB,等1-3秒,就会显示你的应用安装成功。
-
接下来你就可以按照这个操作反复去迭代测试了。
5. 发布IQ应用
这个你有开发者账户就可以去做了。(这个我不负责,所以就不写了)
参考:
(99+ 封私信 / 80 条消息) 2023Garmin watch App开发指南 - 知乎
欢迎有任何garmin安装维护相关问题,可以讨论;不过我维护只做了2-3周,目前正提交出去给测试去测试了,测试好了就发布了,应该后期不再做这个了。