val bgRes = resources.getIdentifier(getString(R.string.splash_image),"drawable",packageName)
LogUtil.e(TAG, "onCreate package name:$packageName resource $bgRes real res: ${R.drawable.launch_safty_manager}");
if(bgRes!=0){
tv.visibility= View.GONE
iv_bg.visibility=View.VISIBLE
iv_bg.setImageResource(bgRes)
}else{
tv.visibility=View.VISIBLE
iv_bg.visibility=View.GONE
}
调用getIdentifier 方法获得bgRes,和用R.drawable取得的id是一摸一样的,但是image.setImageResource之后,显示的是黑色图片。如果我直接使用R.drawable.引用,图片可以顺利打印出来,甚至我加一句判断 $bgRes == R.drawable.launch_safty_manager也可以正确显示图片。很奇怪这是为什么?
怀疑:
如果没有用到R.drawable.里面的资源。会自动把里面的图片排除在apk包外面?
结果:
在花了一个5个小时查找原因之后,终于找到是混淆优化导致的问题。
因为在gradle里面配置了:
shrinkResources true
具体解释可以看这篇文章:https://blog.youkuaiyun.com/u011889786/article/details/56686492
暂时的解决方法是把资源压缩去掉。(或者在程序中引用一下这个资源?)