将 api 密钥从 .env 文件中的 Flutter 加载到 AndroidManifest.xml

lor*_*vcs 10 android flutter

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

lor*_*vcs 21

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

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

dependencies:
  flutter_config: ^1.0.8
Run Code Online (Sandbox Code Playgroud)

.env2.在项目的根目录创建一个文件并向其中添加环境变量

GOOGLE_MAPS_API_KEY=googlemapsapikey
FABRIC_ID=abcdefgh
Run Code Online (Sandbox Code Playgroud)

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

import 'package:flutter_config/flutter_config.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized(); // Required by FlutterConfig
  await FlutterConfig.loadEnvVariables();

  runApp(MyApp());
}
Run Code Online (Sandbox Code Playgroud)

4.现在在 dart 代码中的任何位置访问环境变量

import 'package:flutter_config/flutter_config.dart';

FlutterConfig.get('FABRIC_ID')
Run Code Online (Sandbox Code Playgroud)
  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 地图 api 密钥,例如

`<meta-data android:name="com.google.android.geo.API_KEY" android:value="@string/GOOGLE_MAPS_API_KEY" />`
Run Code Online (Sandbox Code Playgroud)

您还可以访问 gradle 文件和 Java/Kotlin 代码中的环境变量。有关更多详细信息,请参阅文档

AppDelegate.swift6.从项目的 ios 文件中访问您的 env 变量:在我的例子中,我需要从类似的位置访问地图 api 密钥

import flutter_config
FlutterConfigPlugin.env(for: "GOOGLE_MAPS_API_KEY")
Run Code Online (Sandbox Code Playgroud)

还可以从 Obj-C 类、构建设置和 Info.plist 访问环境变量。有关更多详细信息,请参阅文档

构建发布版本

当构建要发布的 apk 时,R8 代码压缩器会混淆包含所有 env 变量的 BuildConfig 类,从而导致所有 env 变量为 null。为了防止这种情况,必须执行以下操作:

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

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

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


Tri*_*kar 7

下面的视频很好地解释了如何从 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