gomobile 构建,Paho mqtt 客户端无法连接到 APK 中的 mqtt 代理

gomobile build, the Paho mqtt client cannot connect to mqtt broker in APK

我正在做一个项目,我需要使用 gomobile tool 创建一个 Android 应用程序。 我在 Go 中的示例代码如下

    var broker = "127.0.0.1"
    //var broker = "broker.mqttdashboard.com"
    var port = 1883
    opts := mqtt.NewClientOptions()
    opts.AddBroker(fmt.Sprintf("tcp://%s:%d", broker, port))
    opts.SetClientID("go_mqtt_client")
    opts.SetConnectionLostHandler(connectLostHandler) // define what to do when connection is lost
    client := mqtt.NewClient(opts)
    tokenClient := client.Connect()
    if tokenClient.Wait() && tokenClient.Error() != nil {
        panic(tokenClient.Error())
    }
    ...

当我使用 “gomobile bind” 绑定此代码时,生成 Golang 插件并在 android 项目中调用它们没有问题。 连接已满足,我可以验证本地 mqtt 代理 (mosquitto) 和 mqtt 客户端应用程序也在通信。

但是当我使用 "gomobile build -target=android" 生成 APK 文件时,连接函数会生成错误。 为了能够测试日志,我使用了 public 代理而不是本地 mqtt 代理。我更换了

var broker = "127.0.0.1"

通过 HiveMQ public 代理地址(我已经验证了 public 代理功能)

var broker = "broker.mqttdashboard.com"

从 mqtt 客户端应用程序连接到 mqtt 代理似乎存在问题。这是我在日志中找到的确切错误消息:

E/Go: panic: network Error : dial tcp: lookup broker.mqttdashboard.com: No address associated with hostname goroutine 11 [running]: E/GoLog: panic: network Error : dial tcp: lookup broker.mqttdashboard.com: No address associated with hostname E/Go: main.starting()

这是由我代码中的 "panic(tokenClient.Error())" 部分生成的。

知道为什么当我使用“gomobile bind”时连接正常,但使用“gomobile build”无法建立连接吗?

这是我解决问题的方法。

  1. 我将 AndoridManifest.xml 文件添加到与主要 go 包相同的目录中。

  2. 在清单标签 () 之间添加了以下行

    <使用权限 android:name="android.permission.INTERNET">