内置资源以及恢复出厂设置
2015-01-20 22:49
225 查看
MTK_2SDCARD_SWAP=yes
#yes means Internal && SDcard, no means Internal && Phone
打开时应用可选安装位置是内部存储空间或外置SD卡
关闭时应用仅可以装在内部存储空间或内置SD卡上。
MTK_2SDCARD_SWAP=no
MTK_SHARED_SDCARD=yes
这种情况下APK只能安装在设备内存(internal device storage),无法安装到内置T卡;
内置资源:
(1)MTK_SHARED_SDCARD=no
当MTK_SHARED_SDCARD=no,参考文档Make_And_DL_FAT_Image.pdf
1.
linux下,以root登录,用mkfs.vfat建立loop device for FAT Image
adb remount && adb shell
//取得FAT partition id
# cat /proc/emmc
//根据ID得到FAT partition size
# cat /proc/partitions
//mmcblk0p8 1760768
mkfs.vfat -v -C fat.img 1760768
2.
把fat.img mount到指定目录
mkdir fat_disk
sudo mount -o loop,iocharset=utf8 fat.img fat_disk/
用df命令可以看到/dev/loopx被mount到此
3.
将预置资源放入fat_disk
sudo cp -r '../apks_preInstall' .
4.
sudo umount fat_disk/
5.
压缩
cd '../mediatek/build/tools'
chmod +x trim
./trim '../fat.img' fat_sparse.img
6.
修改scatter.txt
partition_name: FAT
is_download: true
参考FAQ12384,处理Recovery时的状况
1,预置同样的资源到user不可见的分区,misc\system\data\apks_preInstall.
2,recovery结束,拷贝资源到SD卡上。
...\bootable\recovery\Recovery.cpp
/*----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
(2)MTK_SHARED_SDCARD=yes
参考FAQ11640 FAQ11614
alps\vendor\mediatek\project_name\artifacts\out\target\product\your_project_name\
下创建data\media\目录,将预制资源放于此目录下,重新build new之后,userdata image中就带有您的预制资源。
FAQ10734(MTK_SPECIAL_FACTORY_RESET)
# When enable, executing factory reset will preserve the data in /data/app/
MTK_SPECIAL_FACTORY_RESET=yes
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
[FAQ11954]实现恢复出厂后不重新启动手机
/bootable/recovery/recovery.cpp文件如下处修改:
// Otherwise, get ready to boot the main system...
finish_recovery(send_intent);
return EXIT_SUCCESS;//添加这一句,直接return,进入recovery mode
ui->Print("Rebooting...\n");
android_reboot(ANDROID_RB_RESTART, 0, 0);
return EXIT_SUCCESS;
}
#yes means Internal && SDcard, no means Internal && Phone
打开时应用可选安装位置是内部存储空间或外置SD卡
关闭时应用仅可以装在内部存储空间或内置SD卡上。
MTK_2SDCARD_SWAP=no
MTK_SHARED_SDCARD=yes
这种情况下APK只能安装在设备内存(internal device storage),无法安装到内置T卡;
内置资源:
(1)MTK_SHARED_SDCARD=no
当MTK_SHARED_SDCARD=no,参考文档Make_And_DL_FAT_Image.pdf
1.
linux下,以root登录,用mkfs.vfat建立loop device for FAT Image
adb remount && adb shell
//取得FAT partition id
# cat /proc/emmc
//根据ID得到FAT partition size
# cat /proc/partitions
//mmcblk0p8 1760768
mkfs.vfat -v -C fat.img 1760768
2.
把fat.img mount到指定目录
mkdir fat_disk
sudo mount -o loop,iocharset=utf8 fat.img fat_disk/
用df命令可以看到/dev/loopx被mount到此
3.
将预置资源放入fat_disk
sudo cp -r '../apks_preInstall' .
4.
sudo umount fat_disk/
5.
压缩
cd '../mediatek/build/tools'
chmod +x trim
./trim '../fat.img' fat_sparse.img
6.
修改scatter.txt
partition_name: FAT
is_download: true
参考FAQ12384,处理Recovery时的状况
1,预置同样的资源到user不可见的分区,misc\system\data\apks_preInstall.
2,recovery结束,拷贝资源到SD卡上。
...\bootable\recovery\Recovery.cpp
static int restore_dir_file(char *des_dir_path, char *src_dir_path) { int ret= 0; DIR* dir_des = NULL; DIR* dir_src = NULL; struct dirent* de_des = NULL; struct dirent* de_src = NULL; FILE * fdes = NULL; FILE * fsrc = NULL; char src_file_path[256] = {0}; char des_file_path[256] = {0}; char buf[256] = {0}; int name_len = 0; int size = 0, file_len = 0; printf("\n\nenter, %s \n\n", __func__); printf("src dir:%s\n", src_dir_path); printf("des dir:%s\n", des_dir_path); //open dir dir_src = opendir(src_dir_path); if(dir_src == NULL) { printf("open src dir error:%s\n", src_dir_path); return -1; } dir_des = opendir(des_dir_path); if(dir_des == NULL) { ret = -1; if(errno == ENOENT) { printf("des dir not exist:%s\n", des_dir_path); ret = mkdir(des_dir_path, (S_IRWXU | S_IRWXG | S_IRWXO)); } if(ret < 0) { closedir(dir_src); printf("open des dir error:%s\n", des_dir_path); return -1; } else { printf("mkdir des dir:%s\n", des_dir_path); dir_des = opendir(des_dir_path); } } printf("dir_src=%d, dir_des=%d\n", dir_src, dir_des); while ((de_src = readdir(dir_src)) != NULL) { printf("d_name: %s\n", de_src->d_name); if (de_src->d_type == DT_DIR) { name_len = strlen(de_src->d_name); // skip "." and ".." entries if ((name_len == 1 && de_src->d_name[0] == '.') || (name_len == 2 && de_src->d_name[0] == '.' && de_src->d_name[1] == '.')) { continue; } else { //src dir path append the folder's d_name sprintf(src_file_path, "%s/%s", src_dir_path, de_src->d_name); printf("src dir path: %s\n", src_file_path); //des dir path append the folder's d_name sprintf(des_file_path, "%s/%s", des_dir_path, de_src->d_name); printf("des dir path: %s\n", des_file_path); printf("---entry sub dir to restore\n"); ret = restore_dir_file(des_file_path, src_file_path); printf("sub dir restore ret=%d\n", ret); } } else if (de_src->d_type == DT_REG) { //open src file sprintf(src_file_path, "%s/%s", src_dir_path, de_src->d_name); printf("src_file_path: %s\n", src_file_path); fsrc = fopen(src_file_path, "r"); printf("fsrc=%d\n", fsrc); //create des file sprintf(des_file_path, "%s/%s", des_dir_path, de_src->d_name); printf("des_file_path: %s\n", des_file_path); fdes = fopen_path(des_file_path, "w"); printf("fdes=%d\n", fdes); //read from src file, write to des file file_len= 0; while (!feof(fsrc)) { size = fread(buf, sizeof(char), sizeof(buf), fsrc); fwrite(buf, sizeof(char), size, fdes); memset(buf, 0, sizeof(buf)); file_len += size; } fflush(fdes); printf("%s: file_len=%d\n", de_src->d_name, file_len); //close file fclose(fsrc); fclose(fdes); } } //close dir closedir(dir_src); closedir(dir_des); printf("\n\nexit, %s \n\n", __func__); return 0; } int recovery_restore_special(char *des_dir_path, char *src_dir_path) { int ret= 0; printf("\n\n++ %s ++\n\n", __func__); printf("src dir:%s\n", src_dir_path); printf("des dir:%s\n", des_dir_path); //mount path ret = ensure_path_mounted(src_dir_path); if(ret < 0) { printf("mount src dir error:%s\n", src_dir_path); return -1; } printf("mount:%s ret=%d\n", src_dir_path, ret); ret = ensure_path_mounted(des_dir_path); if(ret < 0) { printf("mount des dir error:%s\n", des_dir_path); ensure_path_unmounted(src_dir_path); return -1; } printf("mount:%s ret=%d\n", des_dir_path, ret); //restore dir and file ret = restore_dir_file(des_dir_path, src_dir_path); printf("restore ret=%d\n", ret); //unmount ensure_path_unmounted(src_dir_path); ensure_path_unmounted(des_dir_path); printf("\n\n-- %s --\n\n", __func__); return 0; } int main(int argc, char **argv) { ... //data/apks_preInstall/ ---> /sdcard/apks_preInstall/ recovery_restore_special("/sdcard/apks_preInstall", "/system/data/apks_preInstall"); // Otherwise, get ready to boot the main system... finish_recovery(send_intent); ui->Print("Rebooting...\n"); property_set(ANDROID_RB_PROPERTY, "reboot,"); return EXIT_SUCCESS; }
/*----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
(2)MTK_SHARED_SDCARD=yes
参考FAQ11640 FAQ11614
alps\vendor\mediatek\project_name\artifacts\out\target\product\your_project_name\
下创建data\media\目录,将预制资源放于此目录下,重新build new之后,userdata image中就带有您的预制资源。
FAQ10734(MTK_SPECIAL_FACTORY_RESET)
# When enable, executing factory reset will preserve the data in /data/app/
MTK_SPECIAL_FACTORY_RESET=yes
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
[FAQ11954]实现恢复出厂后不重新启动手机
/bootable/recovery/recovery.cpp文件如下处修改:
// Otherwise, get ready to boot the main system...
finish_recovery(send_intent);
return EXIT_SUCCESS;//添加这一句,直接return,进入recovery mode
ui->Print("Rebooting...\n");
android_reboot(ANDROID_RB_RESTART, 0, 0);
return EXIT_SUCCESS;
}
相关文章推荐
- android 不打开Shared sdcard功能,内置SD卡中预制资源,删除资源,恢复出厂设置恢复
- 思科IP电话7945恢复出厂设置以及重装firmware操作步骤
- android恢复出厂设置以及系统升级流程
- android恢复出厂设置以及系统升级流程
- android恢复出厂设置以及系统升级流程
- android恢复出厂设置以及系统升级流程
- 2610XM路由器的恢复出厂设置,备份配置文件,修改密码,以及升级
- android恢复出厂设置以及系统升级流程
- MTK平台修改默认时间,以及恢复出厂设置后的默认时间显示
- netscreen ssg 140 恢复出厂设置的方法
- S1恢复出厂设置
- 将诺基亚5800恢复成出厂设置,包括软件程序都和出厂的一样
- 海尔HC-C60恢复出厂设置与手机上网设置
- 交换机恢复出厂设置及其基本配置
- Android 如何才能捕获系统的恢复出厂设置事件
- HTC touch2/T3333恢复出厂设置(硬格式化)
- nokia和LG手机的恢复出厂设置
- DHCP不成功问题通过把路由器恢复出厂设置解决了
- 通过回收应用程序池设置,可以控制如何恢复系统资源。以下几节介绍如何指定回收应用程序池设置。