如何在嵌入在Android中的Flutter应用程序中使用--dart-define

5
我正在将一个Flutter应用作为一个模块嵌入到现有的Android应用程序中(https://flutter.dev/docs/development/add-to-app/android/project-setup),并想知道如何使用"--dart-define"定义编译时常量。尝试使用./gradlew -Ddart-define=myVal=Value但没有成功。
在构建典型的Flutter应用程序时,我会使用flutter命令。在我的情况下,我继续使用gradlew来构建我的应用程序,但不清楚如何传入--dart-define常量。

flutter run --dart-define=myVal=Valueflutter build --dart-define=myVal=Value 可以用于“普通”的 Flutter 移动应用程序... 但是当我将 Flutter 模块嵌入到现有的 Android 应用程序中时,我仍然使用 gradle 来构建应用程序... 我正在寻找一种方法来将 "dart-define" 添加到 gradle 命令中,以便嵌入式 Flutter 应用程序可以在运行时使用它。 - Sundog
2个回答

8
在Android Studio中,您可以编辑运行配置(点击“运行”按钮旁边的下拉菜单->“编辑配置...”),并在其中定义变量(“附加运行参数:”行):

configuration

--dart-define="http_serv=http://10.0.2.2:42627/" --dart-define="websocket=ws://10.0.2.2:42627/websocket"

在代码中获取变量:

final checkArgs = String.fromEnvironment('http_serv', defaultValue: '');

3

如果您的项目依赖于Android Archive(AAR)。

您可以在命令行中传递dart-defines

flutter build aar --dart-define=myVal=Value

如果您的项目依赖于模块源代码。

您可以在您的Android主机项目目录中的gradle.properties中设置dart-define(或在yourHostProject/yourFlutter/.android/Flutter/目录中设置)。

--dart-define=myVal=Value 

解释

  • .android/Flutter/build.gradle脚本执行"$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"脚本。当执行flutter.gradle时,您的dart文件将被编译为本地代码。

  • flutter.gradle.android/Flutter项目实例中加载dart-defines(flutter.gradle#731-L734),然后使用它(flutter.gradle#L1091-L1093)。

  • 要设置项目实例值,请将--dart-define=myVal=Value添加到gradle.properties中。(如果您有多个gradle.properties文件,请考虑配置顺序(Gradle文档中的Gradle属性)。


1
我们如何从Android应用程序中将此dart-define作为参数传递,而不是在flutter项目的gradle.properties文件中设置?例如,如果我需要根据我们在Android应用中选择的产品口味设置不同的API秘钥,我们该如何做到这一点? @SShayashi - Kannan_SJD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接