You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Things开发求助:树莓派3向Google Cloud IoT Core发消息报错

Android Things + Raspberry Pi 3 向Google Cloud IoT Core发消息报错排查方案

嘿,我之前在做Android Things项目时,也踩过向Google Cloud IoT Core发布消息的坑,结合你给出的部分Manifest代码,咱们一步步来排查解决:

首先补全AndroidManifest.xml的关键配置

从你贴的代码来看,PAHO相关的权限没写完,而且Android Things应用有特殊的入口声明要求,这很可能是问题根源之一。以下是完整的权限和应用配置:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cacaosd.com.sample1">

    <!-- 基础网络权限:必须加,否则连不上Google Cloud -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- 检测网络状态:避免离线时无效重试 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!-- 如果用MQTT持久化存储,Android Things上需要这个权限(适配旧版本) -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
        android:maxSdkVersion="28" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        
        <!-- Android Things 核心声明:用Service作为应用入口,替代普通Activity -->
        <service
            android:name=".YourIoTMessagingService" <!-- 替换成你自己的服务类名 -->
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.IOT_LAUNCHER" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </service>
    </application>

</manifest>

代码层面的常见错误排查

  1. Google Cloud IoT Core连接配置错误

    • 必须使用正确的MQTT Broker地址:mqtt.googleapis.com,端口固定为8883(TLS加密要求)
    • 客户端ID格式严格要求:projects/[你的项目ID]/locations/[区域]/registries/[设备组ID]/devices/[你的设备ID],格式错了直接认证失败
    • 用户名留空即可,密码是用RS256/ES256算法生成的JWT令牌,有效期不能超过24小时,要确保令牌生成逻辑正确
  2. TLS证书与SSL配置问题
    Google Cloud IoT Core强制要求TLS连接,Android Things 1.0以上系统自带所需的根证书,但代码里要正确配置SSL:

    // 初始化SSL上下文
    SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
    sslContext.init(null, null, new SecureRandom());
    
    MqttConnectOptions connectOptions = new MqttConnectOptions();
    // 设置SSL Socket工厂
    connectOptions.setSocketFactory(sslContext.getSocketFactory());
    // 设置JWT令牌作为密码
    connectOptions.setPassword(generateJwtToken().toCharArray());
    connectOptions.setUserName("unused"); // 用户名固定填unused就行
    
  3. PAHO MQTT库版本兼容
    不要用太旧的PAHO版本,建议使用和Android Things 1.0兼容的版本,在app的build.gradle里添加依赖:

    dependencies {
        implementation 'com.google.android.things:androidthings:1.0'
        implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5'
    }
    
  4. 树莓派网络验证
    先确认树莓派的网络没问题:

    • 通过adb命令查看WiFi连接状态:adb shell ip addr
    • 测试能否连通Google Cloud服务器:adb shell ping mqtt.googleapis.com

如果以上步骤都排查完还是报错,建议把Logcat里的具体错误信息贴出来(比如认证失败、连接超时、权限拒绝等),这样能更精准定位问题。

内容的提问来源于stack exchange,提问作者Alkhalil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:33:10