1. 程式人生 > >載入第三方apk獲取資源Resources$NotFoundException: Resource ID #0x0

載入第三方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";去載入了.