我正在构建一个具有多种风格的 Flutter 应用程序(类似于 使用多个 env 文件),并且我需要访问我的
app/build.gradle
文件中的 Envied 类,如下面的代码所示,以获取 google_maps_api_key - (firebaseAndroidApiKeyDev )。我该如何解决这个问题?
productFlavors {
dev {
dimension "app"
resValue "string", "app_name", "App Dev"
resValue "string", "google_maps_api_key", firebaseAndroidApiKeyDev
}
prod {
//More flavors configs....
我浏览了羡慕的文档并向GPT询问了这个问题,但仍然不知道如何解决这个问题。我也在他们的存储库中提出了一个问题(在 build.gradle 中访问令人羡慕的值)。
StackOverflow 中也有类似的问题:如何读取属性文件并使用项目 Gradle 脚本中的值?、如何在 build.gradle 文件中包含附加配置文件、如何创建文件并在环境中设置变量并获取 build.gradle 中文件内的数据? 但它们严格指的是开发的原生 Android 端,我需要访问 Flutter 生成的类。
要以本机方式访问 flutter 代码中的某些键,您可以使用(以及其他一些选项)包 flutter_config。 在包的描述中有一个记录良好的示例,但总的来说:
1 - 使用键值结构创建一个 .env 文件(将其包含在 .gitignore 中,这样就不会公开共享):
API_URL=https://myapi.com
FABRIC_ID=abcdefgh
2 - 在您的
main.dart
中初始化它:
import 'package:flutter_config/flutter_config.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized(); // Required by FlutterConfig
await FlutterConfig.loadEnvVariables();
runApp(MyApp());
}
3 - 在 flutter 级别,您可以使用以下方式访问这些变量:
import 'package:flutter_config/flutter_config.dart';
FlutterConfig.get('FABRIC_ID') // returns 'abcdefgh'
4 - 在本机级别,您可以访问 (Android):
4.1 - 在
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
中的 build.gradle
行之后,添加:
apply from: project(':flutter_config').projectDir.getPath() + "/dotenv.gradle"
这一行在android中配置插件
4.2 - 将其加载到
build.gradle
:
defaultConfig {
applicationId project.env.get("APP_ID")
}
欲了解更多解释文档,请访问:
您不需要在 build.gradle 中添加 api key。在
android/app/src/
中创建flavors文件夹就像
在 android/app/scr/main/AndroidManifest.xml 中定义 api 密钥
<manifest ...
<application ...
<meta-data android:name="com.google.android.geo.API_KEY"
android:value="@string/map_api_key"/>
在每个文件夹内创建一个 res 文件夹,并在 res 文件夹内创建值,然后创建 strings.xml
在 strings.xml 中添加地图 api 密钥
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="map_api_key">12345678910</string>
</resources>
这应该获取不同口味的相关密钥