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

Flutter项目修改AndroidManifest的android:name属性集成涂鸦SDK问题

Flutter 集成 Tuya SDK Android 端初始化适配方案

Flutter 项目默认通过 Gradle 占位符 ${applicationName} 注入引擎依赖的 FlutterApplication 实现类,直接硬编码替换 Manifest 里的该占位符会导致 Flutter 引擎初始化失败,按以下步骤修改即可正常完成初始化:

1. 自定义兼容Flutter的Application类

不要直接继承原生Application类,改为继承Flutter官方提供的FlutterApplication,在保留Flutter引擎初始化逻辑的基础上,添加涂鸦SDK的初始化代码。
在Android端源码路径(android/app/src/main/java/你的项目包名/ 或对应Kotlin目录)下创建TuyaSmartApp.java,代码如下:

import io.flutter.app.FlutterApplication;
import com.tuya.smart.home.sdk.TuyaHomeSdk;

public class TuyaSmartApp extends FlutterApplication {
    @Override
    public void onCreate() {
        super.onCreate();
        // 必须在super.onCreate调用后再执行第三方SDK初始化
        TuyaHomeSdk.init(this);
        // 正式发版时请关闭debug模式
        TuyaHomeSdk.setDebugMode(true);
    }
}

2. 修改Gradle配置替换占位符指向

不要修改AndroidManifest.xml里的${applicationName}占位符,打开android/app/build.gradle文件,在defaultConfig块的manifestPlaceholders配置中,将applicationName的值改为你刚创建的TuyaSmartApp的全类名:

android {
    // 省略其他已有配置
    defaultConfig {
        applicationId "替换成你自己的项目包名"
        minSdkVersion 21 // 需满足涂鸦SDK最低版本要求
        // 省略其他已有配置
        manifestPlaceholders = [
            // 原来的默认值是io.flutter.app.FlutterApplication,替换为自定义类的全路径
            applicationName: "替换成你自己的项目包名.TuyaSmartApp"
        ]
    }
}

注意:如果自定义Application类放在子包路径下,需要补全完整路径,类名写错会导致应用启动直接崩溃。

3. 补全Manifest必填配置

保留原有Manifest中android:name="${applicationName}"的配置不要动,在application标签内补充涂鸦SDK要求的AppKey、Secret元数据,同时更新tools:replace规则避免Manifest合并冲突,不要重复声明Flutter已经生成的MainActivity,否则会出现启动页冲突。
修改后的application标签参考:

<application
    tools:replace="android:label,android:allowBackup,android:supportsRtl"
    android:label="project"
    android:name="${applicationName}"
    android:icon="@mipmap/ic_launcher"
    android:allowBackup="true"
    android:supportsRtl="true">
    <!-- 替换为你在涂鸦平台申请到的对应参数 -->
    <meta-data
        android:name="TUYA_SMART_APPKEY"
        android:value="你的涂鸦AppKey" />
    <meta-data
        android:name="TUYA_SMART_SECRET"
        android:value="你的涂鸦AppSecret" />
</application>

注意事项

  • 不要直接硬编码替换Manifest里的${applicationName}占位符,这种方式会破坏Flutter的Manifest合并规则,后续接入其他需要替换Application的Flutter插件时会出现冲突。
  • 所有第三方SDK初始化逻辑必须放在super.onCreate()执行之后,避免出现Context获取失败、引擎未初始化的问题。
  • debug阶段可以开启setDebugMode(true)查看SDK日志,正式上线前务必关闭该配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:42:17