项目中要根据打不同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了。

更多相关文章

  1. Android(安卓)UI日志
  2. android通过servlet上传文件到服务器
  3. Android培训班(14)
  4. Android为textView设置setText的时候报错
  5. ListView分页(带图片)显示用法案例
  6. Android中写文本文件的方法
  7. Android(安卓)Settings 导入eclipse(含有调试好的源代码)
  8. avd 配置
  9. 使用NDK编译CMU Sphinx

随机推荐

  1. 第一行代码(三)
  2. android日记-
  3. Android无视屏幕解锁保护界面
  4. Android(安卓)中TextView中跑马灯效果的
  5. Android(安卓)display架构分析(三)
  6. 关于Android(安卓)列表多布局的那些事
  7. Android(安卓)纯代码加入点击效果
  8. 四大组件_Service_AIDL_1
  9. Manifest.xml中的属性
  10. Android相机对焦问题