[Recovery] Recovery下找不到sdcard路徑
做升級的時候,把更新包拷貝到sd卡中,然後呼叫介面進行重啟升級
之後進入Recovery模式後報錯:
Supported API: 3 charge_status 3, charged 0, status 0, capacity 62 Finding update package... Opening update package... E:unknow volume for path [/storage/emulated/0/update.zip] E:failed to map file Installation aborted.
說是找不到/storage/emulated/0
這個路徑?
因為上層用Java寫路徑的時候,獲取的是Android的路徑,我們知道,adb shell裡面是有/sdcard
的路徑的,這個路徑實際上並不是插入的SD卡路徑,而是一個內建路徑。
內建路徑通過 ls -l 可以看到 /sdcard 的對映
lrwxrwxrwx1 rootroot21 1970-01-01 08:00 sdcard -> /storage/self/primary
也就是說下面幾個路徑是一樣的
/sdcard/
/storage/emulated/0
/storage/self/primary
而外接sd卡路徑是
/storage/0658-0900
所以,我們程式碼裡寫的是/sdcard
但是傳到Recovery的路徑就變成/storage/emulated/0
了。
我們的需求是把升級包放到sdcard裡面去,所以就需要修改Recovery裡的檔案路徑。
實際要做的就是把獲得到的路徑裡面/storage/emulated/0
替換成/sdcard
即可:
Recovery裡面的sd卡路徑就是/sdcard/
if (update_package) { // For backwards compatibility on the cache partition only, if // we're given an old 'root' path "CACHE:foo", change it to // "/cache/foo". if (strncmp(update_package, "CACHE:", 6) == 0) { int len = strlen(update_package) + 10; char* modified_path = (char*)malloc(len); if (modified_path) { strlcpy(modified_path, "/cache/", len); strlcat(modified_path, update_package+6, len); printf("(replacing path \"%s\" with \"%s\")\n", update_package, modified_path); update_package = modified_path; } else printf("modified_path allocation failed\n"); } else if(strncmp(update_package, "/storage/emulated/0/", 20) == 0) { int len = strlen(update_package) + 20; char* modified_path = (char*)malloc(len); if (modified_path) { strlcpy(modified_path, "/sdcard/", len); strlcat(modified_path, update_package+20, len); printf("(replacing path \"%s\" with \"%s\")\n", update_package, modified_path); update_package = modified_path; } else printf("modified_path allocation failed\n"); }
Refofollow,noindex">https://blog.csdn.net/wed110/article/details/9943915?utm_source=blogxgwz1