Flutter项目中从JSON读取值配置到AndroidManifest.xml
在Flutter中从本地JSON读取AdMob应用ID并注入AndroidManifest.xml
方案一:通过Gradle动态替换Manifest占位符(满足Manifest配置需求)
1. 修改AndroidManifest.xml,设置占位符
打开android/app/src/main/AndroidManifest.xml,将AdMob的meta-data值替换为占位符:
<meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="${admob_app_id}" />
2. 编写Gradle脚本读取JSON值
打开android/app/build.gradle,在文件顶部添加读取JSON的函数,然后在defaultConfig中配置占位符:
// 读取assets中的JSON文件,提取AdMob应用ID def getAdMobAppId() { def jsonFilePath = "../assets/jsons/text.json" def jsonFile = file(jsonFilePath) if (!jsonFile.exists()) { throw new GradleException("JSON文件未找到:${jsonFile.path}") } def jsonContent = new groovy.json.JsonSlurper().parse(jsonFile) return jsonContent.someValue ?: "" } android { defaultConfig { // 其他配置... manifestPlaceholders = [ admob_app_id: getAdMobAppId() ] } }
打包时Gradle会自动将占位符替换为JSON中someValue字段的值。
方案二:Flutter代码中直接传入APP_ID(无需修改Manifest)
如果不需要在Manifest中配置meta-data,可以直接在初始化AdMob时传入读取到的ID,更灵活:
1. 读取本地JSON文件
创建工具函数读取assets/jsons/text.json中的值:
import 'dart:convert'; import 'package:flutter/services.dart'; Future<String> fetchAdMobAppId() async { try { final jsonString = await rootBundle.loadString('assets/jsons/text.json'); final jsonData = json.decode(jsonString) as Map<String, dynamic>; return jsonData['someValue'] as String; } catch (e) { print('读取AdMob ID失败: $e'); return ''; } }
2. 初始化AdMob时使用该ID
依赖google_mobile_ads包,初始化时传入读取到的APP_ID:
import 'package:google_mobile_ads/google_mobile_ads.dart'; void initAdMob() async { final appId = await fetchAdMobAppId(); if (appId.isNotEmpty) { await MobileAds.instance.initialize( initializationSettings: InitializationSettings( android: AndroidInitializationSettings(appId), ), ); } }
注意事项
- 确保
pubspec.yaml中已注册assets路径:flutter: assets: - assets/jsons/text.json - 检查JSON文件格式是否正确,
someValue字段需为字符串类型的AdMob应用ID。
内容的提问来源于stack exchange,提问作者Ahmed Zaman
相关产品推荐
相关产品推荐

