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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/heming9174/article/details/77978098

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";去加载了.

猜你喜欢

转载自blog.csdn.net/heming9174/article/details/77978098