Android(安卓)获取manifest.xml中meta-data值遇到的问题
16lz
2021-01-24
项目中要根据打不同flave包,包名和一些配置信息要一键切换,所有把部分信息写到build.gradle文件中了,如下
entpRelease { buildConfigField "boolean", "DEV_MODE", "false" applicationIdSuffix ".preview" debuggable true zipAlignEnabled true minifyEnabled true shrinkResources true ndk { debuggable true } proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.release manifestPlaceholders = ["WEIXIN_APP_ID" : "wxae8serw56d41411", "WEIXIN_APP_SECRET" : "d3b0fa119esdf2a447b7b6sdfsadfc78a", "QQ_APP_ID" : "1106323496", "QQ_APP_SECRET" : "Zea4D35gt3RPGZXS", "Sina_APP_ID" : "3242287343", "Sina_APP_SECRET" : "5d0cf6d2swfd652f20bb15b6776fd"]}// 测试环境entpDebug { buildConfigField "boolean", "DEV_MODE", "true" applicationIdSuffix ".preview.debug" debuggable true zipAlignEnabled true minifyEnabled true shrinkResources true ndk { debuggable true } proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.release manifestPlaceholders = ["WEIXIN_APP_ID" : "wxc11e8dfsdfasdf1e656d", "WEIXIN_APP_SECRET" : "d3b0fa119ea73e0aaaafc9447b7b6c78a", "QQ_APP_ID" : "1106302696", "QQ_APP_SECRET" : "Zea432655RPGZXS", "Sina_APP_ID" : "3266549287", "Sina_APP_SECRET" : "5d0cf6d74a45dfasdf52f20bb15b6776fd"]}
但是又要能够在代码中获取到这些值,所有我只能在AndroidManifest.xml文件中引用这些变量,如下:
android:name="WEIXIN_APP_ID" android:value="${WEIXIN_APP_ID}" /> android:name="WEIXIN_APP_SECRET" android:value="${WEIXIN_APP_SECRET}" /> android:name="QQ_APP_ID" android:value="${QQ_APP_ID}" /> android:name="QQ_APP_SECRET" android:value="${QQ_APP_SECRET}" /> android:name="Sina_APP_ID" android:value="${Sina_APP_ID}" /> android:name="Sina_APP_SECRET" android:value="${Sina_APP_SECRET}" />
代码中通过如下代码获取这些配置信息:
/** * 获取manifest文件中配置的字符串 */public static String getMetaDataString(Context context, String key) { Bundle metaData = null; try { metaData = context.getPackageManager().getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA).metaData; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } if (metaData != null) { String result = String.valueOf(metaData.get(key)); return result; } return "";}
代码运行其他的没问题,就是获取微信和新浪的 APP_ID的时候,老是获取到的null,这就比较恼火了,我检查配置是一样的啊。
然后就怀疑可能是哪抛异常了,一看控制台果然是,异常是 Float/Integer cannot cast to String,一看微信和新浪的APP_ID果然全是数字,可能系统给解析成整形或浮点型给保存到Bundle中了,难道要手动判断类型然后解析吗?
如果那样就太麻烦了,检查AndroidManifest.xml文件,看到微信的配置里有这样的代码
我灵机一动,我是不是也可以在配置文件中添加一些字符,这样就统一用字符串来解析就可以了,然后修改配置,改成如下
运行,然后代码中再把获取到的字符串中的sina,tencent给去掉,就OK了。
更多相关文章
- Android(安卓)UI日志
- android通过servlet上传文件到服务器
- Android培训班(14)
- Android为textView设置setText的时候报错
- ListView分页(带图片)显示用法案例
- Android中写文本文件的方法
- Android(安卓)Settings 导入eclipse(含有调试好的源代码)
- avd 配置
- 使用NDK编译CMU Sphinx