获取不到AndroidManifest中的meta-data

avatar
avatar
kktoo
35
文章
7
评论
2020年3月20日20:43:06 评论 244 1270字阅读4分14秒

现象描述

最近在项目中接入穿山甲广告的sdk,快速实现了核心功能验证。接下来就准备规范代码正式使用,却掉了一个坑,略做记录。

穿山甲sdk提供了一个appid的参数,不同渠道包是不同的,所以将其配入了gradle的productFlavors部分,即如下所示中的TT_APPID:

productFlavors {
        version_vivo {
            dimension "default"
            applicationIdSuffix ".vivo"

            manifestPlaceholders = [CHANEL_ID: "vivo1000",

                                    //穿山甲广告
                                    TT_APPID    : "5657678"
            ]
        }
}

再在AndroidManifest.xml中配置meta数据:

<meta-data
    android:name="CHANEL_ID"
    android:value="${CHANEL_ID}" />

 <meta-data
    android:name="TT_APPID"
    android:value="${TT_APPID}" />

初始化穿山甲sdk的时候获取meta数据:

ApplicationInfo appInfo = this.getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
AppUtil.CHANEL_ID = appInfo.metaData.getString("CHANEL_ID");
AppUtil.TT_APPID = appInfo.metaData.getString("TT_APPID");

这一系列步骤看起来完美无缺,但偏偏当信心满满run起来的时候,发现获取不到TT_APPID。

检查了下代码,发现CHANEL_ID都能获取到,偏偏获取不到TT_APPID,这不科学啊!

气死我也,本来如行云流水的敲代码过程就被中断了。

深呼吸,一顿各种检查,各种log查看,谷歌加百度支援,终于解决了问题。

问题分析

Android在处理meta-data的时候如果value可以转化为数值类型,那么它将自动被转换为数值类型。在代码中通过getString是无法获取到这个值的。而本案例中的CHANEL之所以可以获取到,因为不可转化为数值类型,而TT_APPID是可以转化为数值类型的

解决方法

  • 将value改用非数值类型
  • 也可以将数值类型转换为带0X的16进制表示
  • 或者使用getInt方法取值

 

我选用的是第3个解决方法

ApplicationInfo appInfo = this.getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA); 
AppUtil.CHANEL_ID =appInfo.metaData.getString("CHANEL_ID"); 
AppUtil.TT_APPID = "" + appInfo.metaData.getInt("TT_APPID");

 

 

 

继续阅读
avatar
  • 文本由 发表于 2020年3月20日20:43:06
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
华为渠道接入的小细节 Android

华为渠道接入的小细节

一、集成HMS SDK 3.0报错AGConnectInitializeProvider 现象: 华为渠道接入使用的maven仓,兴冲冲配置完毕之后,一运行就crash了,真扫兴,查看logcat: ...
windows下配置Ninja Android

windows下配置Ninja

描述: mac上的android工程,改为在windows下继续开发。报错: CMake Error: CMake was unable to find a build program corresp...
挖孔屏适配小结 Android

挖孔屏适配小结

前言 关于挖孔屏的适配,网络上已经有很多完整教程写的很好,请自行搜索。 本文的重点是总结归纳在这个过程中一些容易被忽略的小疑问和小细节,希望对大家能有所帮助。 这几年手机异形屏越来越火,已经成为时尚潮...
安卓自定义build的apk文件名 Android

安卓自定义build的apk文件名

android studio打包应用默认生成的apk名称是:app-release.apk 。 如果我们想修改生成的apk文件名,比如想放入版本号,比如想放入渠道号,又比如和打包时间有关联,那我们就需...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: