天天看点

加载第三方apk获取资源Resources$NotFoundException: Resource ID #0x0

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));

发现出现问题主要是有以下几个原因:

  1. 图片名称错误

    如: “skin_bg.png” ==> “skin_bg” 不需要.png | .jpg 等后缀

  2. 还是图片名称错误

    传入图片名称,前面不需要 添加 “/drawable/”路径

  3. 你创建第三方的那个程序放资源,你是不是放在mipmap文件夹里面了?

    23333…我就是这样,创建新的Module时,默认只有mipmap文件夹,没有drawable文件夹,也没看,直接丢mipmap文件夹里面了.这样当然获取不了.

  4. Type类型错误啊…你要获取图片资源就传入”drawable”,要获取颜色就传入”color”,而不是传入null
  5. 检查一下你的包名吧,能通过getPackageName()获取就尽量通过这个,实在不行就复制,千万别手写.
  6. 最后一个就是万恶的路径问题了.通过AssetManager加载.apk的路径

    我最早是放在asset文件夹里面,然后通过file:///android_asset/xxx.apk加载,发现方法调用没问题,但是需要获取的资源就是获取失败.

    最后只能放在sdcard的根目录了,通过

    Environment.getExternalStorageDirectory()+ File.separator+"xxx.apk";

    去加载了.