emmm
最近看到鸿洋的一篇关于APP换皮肤的博客,于是照着弄,发现在 插件式换肤的过程中遇到了问题,记录一下.
插件式换肤加载第三方apk,资源文件找不到
报错信息如下:
W/ResourceType: No package identifier when getting value for resource number 0x00000000
W/System.err: android.content.res.Resources$NotFoundException: Resource ID #0x0
嗯,定位的错误位置就是在这里.通过getIdentifier,传入资源名称,资源类型和包名出问题…
mResources.getDrawable(mResources.getIdentifier(name,”drawable”, mPackageName));
发现出现问题主要是有以下几个原因:
-
图片名称错误
如: “skin_bg.png” ==> “skin_bg” 不需要.png | .jpg 等后缀
-
还是图片名称错误
传入图片名称,前面不需要 添加 “/drawable/”路径
-
你创建第三方的那个程序放资源,你是不是放在mipmap文件夹里面了?
23333…我就是这样,创建新的Module时,默认只有mipmap文件夹,没有drawable文件夹,也没看,直接丢mipmap文件夹里面了.这样当然获取不了.
- Type类型错误啊…你要获取图片资源就传入”drawable”,要获取颜色就传入”color”,而不是传入null
- 检查一下你的包名吧,能通过getPackageName()获取就尽量通过这个,实在不行就复制,千万别手写.
-
最后一个就是万恶的路径问题了.通过AssetManager加载.apk的路径
我最早是放在asset文件夹里面,然后通过file:///android_asset/xxx.apk加载,发现方法调用没问题,但是需要获取的资源就是获取失败.
最后只能放在sdcard的根目录了,通过
去加载了.Environment.getExternalStorageDirectory()+ File.separator+"xxx.apk";