读书人

Android Recovery 复制大量预装apk步骤

发布时间: 2012-07-04 19:33:54 作者: rapoo

Android Recovery 复制大量预装apk方法

  1. 方法二的实现:??
  2. 实现的位置在流程中见图片。?在install_package()的结尾的try_update_binary函数结尾();?在src/bootable/recovery/install.c?
  3. ?下面是具体实现:?
  4. ?//copy?some?res?file?to?/data/?
  5. ?static?char?*res_list[]?=?{?"/sdcard/?res1.zip",?"/sdcard/?res2.zip"};?
  6. ?static?void?unzip_res_to_data(void)?
  7. {?????int?i?=?0;?
  8. ?????for(i?=?0;?i?<?sizeof(?res_list)/sizeof(char?*);?++i)?
  9. ????{?????????ZipArchive?zip_res;?
  10. ????????int?err?=?mzOpenZipArchive(?res_list[i],?&zip_res);?????????if?(err?!=?0)?{?
  11. ????????????LOGI("Can't?open?%s\n",??res_list[i]);?????????}?
  12. ????????else?{?????????????LOGI("start?update?%s\n",?res_list[i]);?
  13. ????????????//?To?create?a?consistent?system?image,?never?use?the?clock?for?timestamps.?????????????struct?utimbuf?timestamp?=?{?1217592000,?1217592000?};??//?8/1/2008?default?
  14. ????????????bool?success?=?mzExtractRecursive(&zip_res,?"res-private",?"/data/res-private",?????????????????????MZ_EXTRACT_FILES_ONLY,?&timestamp,?
  15. ????????????????????NULL,?NULL);?????????????LOGI("update?%s?%s\n",?res_list[i],?((success==true)?"success":"failed"));?
  16. ????????????mzCloseZipArchive(&zip_res);?????????}?
  17. ????}??
  18. ????dirSetHierarchyPermissions("/data/res-private",?1000,?1000,?0777,?0666);?}?
  19. ?//copy?some?app?file?to?/data/app?
  20. void?cpfiles(){??
  21. ????ZipArchive?zip_apps;?????int?err?=?mzOpenZipArchive("/sdcard/myapps.zip",?&zip_apps);?
  22. ????if?(err?!=?0)?{?????????LOGI("Can't?open?%s\n",?"/sdcard/myapps.zip");?
  23. ????}?????else?{?
  24. ????????//here?need?fix?mount?for?your?device?????????if?(mount("/dev/block/mmcblk0p13",?"/data",?"ext4",?
  25. ????????????????????MS_NOATIME?|?MS_NODEV?|?MS_NODIRATIME,?"")?<?0)?{?????????????fprintf(stderr,?"%s:?failed?to?mount",?strerror(errno));?
  26. ????????}??
  27. ????????LOGI("start?update?3rd-apps\n");?????????//?To?create?a?consistent?system?image,?never?use?the?clock?for?timestamps.?
  28. ????????struct?utimbuf?timestamp?=?{?1217592000,?1217592000?};??//?8/1/2008?default?????????bool?success?=?mzExtractRecursive(&zip_appss,?"app",?"/data/app",?
  29. ????????????????MZ_EXTRACT_FILES_ONLY,?&timestamp,?????????????????NULL,?NULL);?
  30. ????????dirSetHierarchyPermissions("/data/app",?1000,?1000,?0771,?0644);?????????LOGI("update?myapps?%s\n",?((success==true)?"success":"failed"));?
  31. ????????mzCloseZipArchive(&zip_apps);??
  32. //cp?res?to?/data/?????????unzip_res_to_data();?
  33. ?????????scan_mounted_volumes();?
  34. ????????const?MountedVolume*?vol?=?find_mounted_volume_by_mount_point("/data");?????????if?(vol?==?NULL)?{?
  35. ????????????fprintf(stderr,?"unmount?of?%s?failed;?no?such?volume\n",?"/data");?????????}?else?{?
  36. ????????????unmount_mounted_volume(vol);?????????}?
  37. ????}??
  38. }??
  39. ?//?If?the?package?contains?an?update?binary,?extract?it?and?run?it.?
  40. static?int?try_update_binary(const?char?*path,?ZipArchive?*zip)?{?
  41. ??.......?
  42. ?????cpfiles();?
  43. ????return?INSTALL_SUCCESS;?}

读书人网 >Android

热点推荐