【问题标题】:Load api key to AndroidManifest.xml from .env file in flutter在flutter中从.env文件加载api密钥到AndroidManifest.xml
【发布时间】:2019-08-21 08:11:32
【问题描述】:

我正在使用flutter_dotenv [https://pub.dev/packages/flutter_dotenv] 包并定义了一个.env 文件来定义我的环境变量。但是为了使用谷歌地图,我还必须在 AndroidManifest.xml 文件中使用 maps apikey。是否可以从flutter_dotenv 包的.env 文件中读取地图apikey,而不是在AndroidManifest.xml 文件中硬编码apikey?

【问题讨论】:

    标签: android flutter


    【解决方案1】:

    以下步骤使我能够从同一个 .env 文件中的颤振代码、android 代码和 ios 代码访问我的 env 变量:

    1.通过添加到项目的pubspec.yaml 文件中来安装包flutter_config,如下所示

    dependencies:
      flutter_config: ^1.0.8
    

    2.在项目的根目录下创建一个.env 文件,并将环境变量添加到其中

    GOOGLE_MAPS_API_KEY=googlemapsapikey
    FABRIC_ID=abcdefgh
    

    3.在你的主函数中初始化插件

    import 'package:flutter_config/flutter_config.dart';
    
    void main() async {
      WidgetsFlutterBinding.ensureInitialized(); // Required by FlutterConfig
      await FlutterConfig.loadEnvVariables();
    
      runApp(MyApp());
    }
    

    4.现在在你的 dart 代码中的任何地方访问你的环境变量

    import 'package:flutter_config/flutter_config.dart';
    
    FlutterConfig.get('FABRIC_ID')
    
    1. 在项目的 android 文件中访问环境变量。

    首先,您需要手动将插件应用到您的应用程序,来自android/app/build.gradle: 正下方apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" 添加以下行: apply from: project(':flutter_config').projectDir.getPath() + "/dotenv.gradle"

    在我的情况下,我需要访问 AndroidManifest.xml 文件中的 google maps api 密钥,例如

    `<meta-data android:name="com.google.android.geo.API_KEY" android:value="@string/GOOGLE_MAPS_API_KEY" />`
    

    您还可以访问 gradle 文件和 Java/Kotlin 代码中的环境变量。更多详情请参考docs

    6.从您的项目 ios 文件中访问您的环境变量: 在我的情况下,我需要从 AppDelegate.swift 访问 maps api 密钥,比如

    import flutter_config
    FlutterConfigPlugin.env(for: "GOOGLE_MAPS_API_KEY")
    

    还可以从您的 Obj-C 类、构建设置和 Info.plist 中访问您的环境变量。更多详情请参考docs

    构建发布版本

    在构建您的 apk 以供发布时,R8 代码收缩器会混淆 BuildConfig 类,该类包含所有 env 变量,从而导致所有 env 变量为空。为了防止这种情况发生,必须做到以下几点:

    1. 将文件 android/app/proguard-rules.pro 添加到您应用的项目中。
    2. 将以下行添加到新创建的 proguard-rules.pro 文件中:

    -keep class com.yourcompany.app.BuildConfig { *; }

    com.yourcompany.app 应替换为您的应用程序包名称。

    【讨论】:

      【解决方案2】:

      下面的视频很好地解释了我们如何从 Flutter 中的 .env 文件加载 API 密钥到 AndroidManifest.xml。

      这里的变化是,我们需要添加一个不同的插件来使其工作,并按照视频教程中提到的步骤进行操作。

      插件 https://pub.dev/packages/flutter_config

      视频 https://www.youtube.com/watch?v=OtkrNQxJzBQ

      Github https://github.com/ByneappLLC/flutter_config/blob/master/doc/ANDROID.md

      【讨论】:

        【解决方案3】:

        您可以使用 dotenv 包来访问您的 Flutter 应用程序中的环境变量

        https://pub.dev/packages/dotenv
        

        【讨论】:

        • 但它是否使您的 android 和 ios 文件中的变量可用?
        猜你喜欢
        • 2021-09-12
        • 2021-03-26
        • 1970-01-01
        • 2020-04-15
        • 2010-12-17
        • 2022-01-07
        • 2017-06-20
        • 1970-01-01
        • 2022-12-17
        相关资源
        最近更新 更多