載入第三方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));
發現出現問題主要是有以下幾個原因:
圖片名稱錯誤
如: “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";
去載入了.