以拷贝/data区数据到SD卡为例子:
第一:
alps/bootable/recovery/default_device.cpp中
static const char* ITEMS[] = {"reboot system now",
"apply update from ADB",
"wipe data/factory reset",
"wipe cache partition",
"reboot to bootloader",
"power down",
"view recovery logs",
/*SPRD:update from cache partiton,external and internal storage @{*/
"update from cache",
"update from external storage",
#ifdef ENABLE_INTERNAL_STORAGE
"update from internal storage",
#endif
"delete /data/dalvik-cache/",
/*@}*/
NULL };
第二:
在此结构体指针中添加一行菜单,此菜单就会更新到Recovery界面中,并且依然在此文件中,有其相应的函数,并且也要在此
函数中添加一个case与static const char* ITEMS[]相对应:
BuiltinAction InvokeMenuItem(int menu_position) {
switch (menu_position) {
case 0: return REBOOT;
case 1: return APPLY_ADB_SIDELOAD;
case 2: return WIPE_DATA;
case 3: return WIPE_CACHE;
case 4: return REBOOT_BOOTLOADER;
case 5: return SHUTDOWN;
case 6: return READ_RECOVERY_LASTLOG;
/*SPRD:update from cache partiton,external and internal storage @{*/
case 7: return APPLY_CACHE;
case 8: return APPLY_EXT;
#ifdef ENABLE_INTERNAL_STORAGE
case 9: return APPLY_INT;
#endif
case 10: return COPY_USERDATA_TO_SDCARD;
/*@}*/
default: return NO_ACTION;
}
}
第三:
在alps/bootable/recovery/device.h中,添加参数COPY_USERDATA_TO_SDCARD:
enum BuiltinAction { NO_ACTION, REBOOT, APPLY_EXT,
// SPRD:update from cache partiton,external and internal storage
APPLY_INT,
APPLY_CACHE, // APPLY_CACHE is deprecated; has no effect
APPLY_ADB_SIDELOAD, WIPE_DATA, WIPE_CACHE,
REBOOT_BOOTLOADER, SHUTDOWN, READ_RECOVERY_LASTLOG, COPY_USERDATA_TO_SDCARD };
第四:
alps/bootable/recovery/recovery.cpp中的函数
static Device::BuiltinAction prompt_and_wait(Device* device, int status);
case Device::COPY_USERDATA_TO_SDCARD:
ensure_path_mounted("/data");
ensure_path_mounted("/system");
//ensure_path_mounted(SDCARD_ROOT);
ui->Print("\n Delete /data/dalvik-cache/ Start \n");
//system("/system/bin/toolbox mkdir /storage/sdcard0/dump_user");
//system("/system/bin/toolbox cp -r /data/system/dropbox/* /storage/sdcard0/dump_user/");
system("/system/bin/toolbox rm -r /data/dalvik-cache/*");
ui->Print("\n Delete /data/dalvik-cache/ End!\n");
break;
case Device::APPLY_ADB_SIDELOAD:
status = apply_from_adb(ui, &wipe_cache, TEMPORARY_INSTALL_FILE);
if (status >= 0) {
if (status != INSTALL_SUCCESS) {
ui->SetBackground(RecoveryUI::ERROR);
ui->Print("Installation aborted.\n");
copy_logs();
} else if (!ui->IsTextVisible()) {
return Device::NO_ACTION; // reboot if logs aren't visible
} else {
ui->Print("\nInstall from ADB complete.\n");
}
}
break;
备注:
展讯平台的default_device.cpp使用的是此目录下的default_device.cpp:
alps/vendor/sprd/open-source/libs/librecovery_ui_sp8830/default_device.cpp
若在alps/bootable/recovery/default_device.cpp修改后发现编译未起效,可在此目录下查找并修改方可
至此,添加菜单和功能完毕.
阅读(1950) | 评论(0) | 转发(0) |