å€ãã®å Žåããã¡ãŒã ãŠã§ã¢ã®ã«ãŒãåãããŸããŸãªçš®é¡ã®ã·ã¹ãã ãœãããŠã§ã¢ã®ã€ã³ã¹ããŒã«ãã«ãŒãã«ã®å€æŽãšãã¡ãŒã ãŠã§ã¢ã®ã¢ãã¯ã¢ããã«æ £ããŠãããŠãŒã¶ãŒã¯ãOTAæŽæ°ããã°ã©ã ãã€ã³ã¹ããŒã«ããããšã¯äžå¯èœã§ããããšã«æ°ä»ããŸãã ç«ã¡äžããããå€æŽãããã·ã¹ãã ãã¡ã€ã«ã誀ã£ãããžã¿ã«ããŒãªã©ã宣èªããŸãã ãã®èšäºã§ã¯ãæŽæ°ã®ä»çµã¿ãåé¡ã®åå ãããã³ãããã解決ããæ¹æ³ã«ã€ããŠèª¬æããŸãã
ä»çµã¿
åŸæ¥ã®æåã®æ°ããAndroidããŒãžã§ã³ã¯ãNexusããã€ã¹ããææ°çãååŸããŠããŸããã äžè¬åãã«æ°ãããã¡ãŒã ãŠã§ã¢ããŒãžã§ã³ãæºåã§ããããå®å šãªã€ã¡ãŒãžãdeveloper.google.com/android/nexus/imagesã§å ¥æã§ããŸãã ãã®åŸãŸããªããç¡ç·ã«ãããã¡ãŒã ãŠã§ã¢ã®é åžãéå§ãããŸãã Google Dan MorrillïŒDan MorrillïŒã®éçºè ã®1人ã«ãããš ãæåã®OTAã¯ããã€ã¹ã®1ïŒ ã«éä¿¡ãããŸãã ããã¯ãé»è©±ãã¿ãã¬ããã®è³Œå ¥å°åãå Žæã«é¢ä¿ãªããã©ã³ãã ã«çºçããŸãã ãã®æç¹ã§ãã°ãæ€åºãããå€æ°ã®ãŠãŒã¶ãŒã«ãšã£ãŠé倧ãªãšã©ãŒãçºçããŠããå Žåã«æŽæ°ãäžæåæ¢ã§ããŸãã
ãã®åŸãæ°é±éãæŽæ°ããã°ã©ã ã¯25ã50ã100ïŒ ã®ãŠãŒã¶ãŒã«é åžãããŸãã ã€ãŸããæåã®æ®µéã§ã¯ã100å°ã®ããã€ã¹ã®ãã¡1å°ãæŽæ°ãåä¿¡ããå¯èœæ§ããããŸãã æŽæ°ãåä¿¡ãããªãå Žåãããã€ã¹ã¯ãªã¹ãããåé€ããããæŽæ°ã®ç¢ºèªããã¿ã³ãç¹°ãè¿ãã¯ãªãã¯ãããšãããã€ã¹ããªã¹ãã®æåŸã«èªåçã«è»¢éãããŸãã æ°ããã¡ãŒãªã³ã°ã¹ããŒãžãéå§ããããããã¿ã³ãã¯ãªãã¯ãããšã25ïŒ ã®æŽæ°ãåãåã次ã®æ©äŒãäžããããŸãã ããã€ã¹èªäœã1æ¥ã«1åïŒãŸãã¯åèµ·åæã«ïŒã¢ããããŒãããã§ãã¯ããããããã¿ã³ãæŒããšãããèªäœãçºçãããããæ©ããæ®åœ±ãã§ããŸãã ããããåã³ããã§ãã¯ã¯äžåºŠã ãã§ãã ããã«ã¯ãªãã¯ããŠãå¹æã¯ãããŸããã ããã¯ããæåã«ã¯ãªãã¯ãã人ãæåã«ã¯ãªãã¯ãã人ããšããç¶æ³ã§ã¯ãããŸããã ãããã«ãããæ°é±é以å ã«ç©ºèŒžã«ããæŽæ°ãå šå¡ã«å±ããŸãã æããã£ãã¡ãªäººã¯ãã¢ããããŒããæåã§ãã©ãã·ã¥ããããšãã§ããŸãïŒè©³çŽ°ã¯ä»¥äžãåç §ïŒã
æŽæ°éç¥
匷å¶æŽæ°
æŽæ°ã®åä¿¡ãé«éåããã«ã¯2ã€ã®æ¹æ³ããããŸãã 1ã€ç®ã¯ãGoogle Services FrameworkããŒã¿ãã¯ãªã¢ããŠãããããã€ã¹ãåèµ·åããããšã§ãã Googleã®ãšã³ãžãã¢ã§ããéé£ãã ãéåžžã«æšå¥šãããªãæ¹æ³ã§ãã ãã®æ¹æ³ã¯å€ãã®æªåœ±é¿ãåŒãèµ·ãããŸããããã®äž»ãªãã®ã¯GCMïŒGoogle Cloud MessengerïŒã®èå¥åã®å€æŽã§ãã ãã®èå¥åã¯ããã¹ãŠã®Googleããã°ã©ã ããã³ããã·ã¥éç¥æ©èœã䜿çšããä»ã®å€ãã®ã¢ããªã±ãŒã·ã§ã³ã§å¿ èŠã§ãã ãŸããäžéšã®ããã°ã©ã ã§å¹æãå æããã®ãæ¯èŒçç°¡åãªå Žåãä»ã®å€ãã®å Žåãçµæã¯ããæ²ãããªããŸãã ãã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã¯ãæ°ããèå¥åãåä¿¡ãããŸã§GCMããŒã¹ã®ããã·ã¥éç¥ã®åãå ¥ããåæ¢ããŸãã äžéšã®ã¢ããªã±ãŒã·ã§ã³ã¯é »ç¹ã«ãã§ãã¯ããŸããããŸãã«ãã§ãã¯ããŸãã äžéšã«ã€ããŠã¯ãã¢ããªã±ãŒã·ã§ã³ããŒã¿ã®ã¯ãªãŒã³ã¢ããã圹ç«ã¡ãŸãã ãŸããGCM IDããµãŒããŒã®èå¥åãšããŠäœ¿çšããã¢ããªã±ãŒã·ã§ã³ã«ã¯ãããã«æ·±å»ãªåé¡ãçºçããå¯èœæ§ããããŸãã
åšåº«å埩
2ã€ç®ã¯ãå埩ã³ã³ãœãŒã«ããæåã§æŽæ°ããã°ã©ã ãã€ã³ã¹ããŒã«ããããšã§ãã OTAã®èµ·åçŽåŸã«ãããã·ã¥ã¿ã€ãã®ãã¡ã€ã«signed-hammerhead-LRX21O-from-KTU84P.c1a33561.zipãw3bsit3-dns.comããã³XDAãªãœãŒã¹ã®ããã€ã¹ã®ãããã¡ã€ã«ãããã¯ã«è¡šç€ºãããŸããååã«ã¯ãã¡ã€ã«ã®ããã·ã¥ãããã€ã¹ãã©ã³ããããã³æŽæ°çšã®ãã¡ãŒã ãŠã§ã¢ããŒãžã§ã³ãå«ãŸããŸãã©ããã©ãã§ïŒã ã³ã³ãã¥ãŒã¿ãŒã«ã¯ãADBããã³fastbootãŠãŒãã£ãªãã£ãå«ããã©ã«ããŒãå¿ èŠã§ãã Android SDKã®ææ°ããŒãžã§ã³ã䜿çšããŠããŸãã åããã©ã«ããŒã«ãããŠã³ããŒãããã¢ãŒã«ã€ããOTAã¢ããããŒããšãšãã«é 眮ããå¿ èŠããããŸãã ãŸããããã€ã¹çšã®ãã©ã€ããŒãæ£ããã€ã³ã¹ããŒã«ããå¿ èŠããããŸããããã¯ãä»ã®ããã€ã¹çšã«ä»¥åã«ã€ã³ã¹ããŒã«ãããã©ã€ããŒãšç«¶åããå¯èœæ§ããããŸãã
ããã€ã¹èªäœãå埩ã¢ãŒãã«ããå¿ èŠããããŸãã ãããè¡ãã«ã¯ãé»æºãåã£ãããã€ã¹ã§ã<Power + VolDown>ãã¿ã³ãåæã«æŒãããŸãŸããŒãããŒããŒã«å ¥ããé³éãã¿ã³ã§å埩ã¢ãŒããéžæããé»æºãã¿ã³ã§å ¥åããŸãã ãªã«ã³ãã³ãAndroidã«æå笊ã衚瀺ãããŸãã ããã¯ééãã§ã¯ãªããæãããªãã§ãã ããã ãã®ç»é¢ã§<Power + VolUp>ãçãæŒãå¿ èŠããããŸãããã®åŸãã¹ããã¯ãªã«ããªãããŒããããŸãã ãã®äžã§ãé³éãã¿ã³ã§ADBã¢ã€ãã ããæŽæ°ãé©çšãéžæããé»æºãã¿ã³ã§ç¢ºèªããå¿ èŠããããŸãã 次ã«ãæºåž¯é»è©±/ã¿ãã¬ãããã³ã³ãã¥ãŒã¿ãŒã«æ¥ç¶ããå¿ èŠããããŸãã ã³ã³ãœãŒã«ãèµ·åããADBãšæŽæ°ã¢ãŒã«ã€ãã®ãããã©ã«ããŒã«ç§»åããŠã次ã®ã³ãã³ããå ¥åããŸãïŒäžèšã®ãã¡ã€ã«ã«å¯ŸããŠïŒïŒ
$ adb sideload .signed-hammerhead-LRX21O-from-KTU84P.c1a33561.zip
ãã®åŸãOTAãé»è©±ã«ã€ã³ã¹ããŒã«ãããåèµ·åããŸãã
ãµã€ãããŒïŒã»ã«ã©ãŒãããã¯ãŒã¯çµç±ã§ã¢ããããŒããããŠã³ããŒãããæ¹æ³
ããã€ã¹ãWi-Fiã«æ¥ç¶ãããŠããªãå ŽåãOTAå¯çšæ§éç¥ãå±ãããšããããŸãã ãã¡ã€ã«ãç¹å®ã®æ¥ä»ïŒçŽ1é±éïŒãŸã§Wi-Fiçµç±ã§ããŠã³ããŒãã§ããããšã瀺ãã¡ã¢ã衚瀺ããã[ããŠã³ããŒã]ãã¿ã³èªäœã¯ç¡å¹ã«ãªããŸãã ããã¯ããŠãŒã¶ãŒã®ãéãç¯çŽããããã«è¡ãããŸãã è¿ãå°æ¥ã«Wi-Fiæ¥ç¶ãäºå®ãããŠããªãå Žåã¯ãéç¥ã§æå®ãããæ¥ä»ããåŸã®é»è©±ã®æ¥ä»ãåçŽã«é²ããããã€ã¹ãåèµ·åããããšã«ããã3G / 4Gãä»ããŠé»è©±ãã ãŸããŠæŽæ°ãããŠã³ããŒãã§ããŸãã
æ å ±
åšåº«ïŒåšåº«-ã¹ãã¢ããïŒãã¡ãŒã ãŠã§ã¢ã¯ãå·¥å Žã®ã³ã¢ã®ååšãå埩ãã«ãŒãã®äœ¿çšãå«ãååŸãããå€æŽã®äžåšãç解ããŠããŸãã
å€æŽããããã¡ãŒã ãŠã§ã¢
ããŒãããŒããŒã®ããã¯ã解é€ãããŠããå Žåãã«ã¹ã¿ã ãªã«ããªããããã«ãŒããååŸãããããŸããŸãªããã°ã©ã ã§ã¢ã¯ãã£ãã«äœ¿çšãããããŸããŸãªå€æŽãé©çšãããŸãã99ïŒ ã®ç¢ºçã§æŽæ°ããã°ã©ã ã¯ã€ã³ã¹ããŒã«ãããŸããã åšåº«å埩ãè¿ãããå Žåã§ããADBçµç±ã®ãã¡ãŒã ãŠã§ã¢äžã«ã¹ããŒã¿ã¹7ãšã©ãŒãçæãããã«ã¹ã¿ã å埩ã¯ãšã©ãŒãæžã蟌ã¿ãå€æŽããããã¡ã€ã«ã宣èªããŸãã ãã®åé¡ã¯ãã¹ããŒããã©ã³ãå·¥å Žåºè·æã®ãã¡ãŒã ãŠã§ã¢ã«æ»ãããšã§è§£æ±ºã§ããŸãããããã¯ç§ãã¡ã®æ¹æ³ã§ã¯ãããŸããã æŽæ°ãã¡ã€ã«ãã¯ã©ããã³ã°ããã€ã³ã¹ããŒã«ãã€ãŸãããå ŽæãèŠã€ããåé¡ãä¿®æ£ããããšã§å¯ŸåŠããŸãã æ倧ã®Nexus 5ã¢ããããŒãã®äŸ-ããŒãžã§ã³4.4.4ïŒKTU84PïŒãã5.0ïŒLRX21OïŒãžã
OTAã®ä»çµã¿
ãã®ããã4.4.4ãã5.0ãžã®ã¢ããã°ã¬ãŒãã¯ãã¢ãŒã«ã€ããŠã§ã€ãã491 MBã§ãè¿å¹Žæ倧ã«ãªããŸããã DalvikããARTãžã®å€æŽã«é¢é£ããŠãã»ãšãã©ãã¹ãŠã®ã³ãŒããå€æŽãããŸããã ã§ã¯ãã¢ãŒã«ã€ãã«ã¯äœãå«ãŸããŠããŸããïŒ ã¹ã¯ãªãŒã³ã·ã§ããã5.0ã«ã¢ããã°ã¬ãŒãããã¢ãŒã«ã€ãã®ãã¡ã€ã«ãã§ãããããã«ãã¢ãŒã«ã€ãå ã«ã¯ããŒãããŒããŒã€ã¡ãŒãžïŒããŸããŸãªã»ã¯ã·ã§ã³ïŒãMETA-INFãããããããã³ã·ã¹ãã ãã£ã¬ã¯ããªããããŸãã
5.0ã«ã¢ããã°ã¬ãŒãããã¢ãŒã«ã€ãã®ãã¡ã€ã«
ãã©ãã£ãã¯ã®éãæå°éã«æãããµãŒããŒã®è² è·ã軜æžãããšã³ããŠãŒã¶ãŒã®ã³ã¹ããåæžããããã«ãæŽæ°æ§é ã¯ãå€æ°ã®å€æŽããããã¡ã€ã«ãŸãã¯æåããæžã蟌ãŸãããã¡ã€ã«ãã·ã¹ãã ãã£ã¬ã¯ããªã«é 眮ãããå®å šã«å€æŽãããããã«èšèšãããŠããŸãã ãŸããGoogleã®æšæºã«ãã£ãŠå°ããªå€æŽãå ãããããã¡ã€ã«ã¯çœ®ãæãããããããããé©çšãããŸããã€ãŸãããã¡ã€ã«å ã®ã³ãŒãã®äžéšãå€æŽãããŸãã ãããã®ãã¡ã€ã«ã¯ããããã£ã¬ã¯ããªå ã«ãããæ¡åŒµåã¯.pã§ãã ããã¯ã/ system / binããã³/ patch / system / binå ã®ãã¡ã€ã«ãæ¯èŒããå Žåã«æããã«èŠãããŸãã åæã«ãããç¥ãããŠããunixoid bsdiffã䜿çšããŠããããäœæããŸããããã«ããã2ã€ã®ãã€ããªïŒãã¡ã€ã«éã®å·®åãæã€ãã¡ã€ã«ïŒãããã«ã¿ãååŸã§ããŸãã
éæ³èªäœã¯ã/ META-INF / com / google / androidã«ããupdater-scriptã®æå¿ã«ãã£ãŠçºçããŸãã 詳现ã«æ€èšããŸãã ãã¡ã€ã«èªäœã®éãã¯463 Kbã§ãOTAæŽæ°ã®é©çšããã»ã¹ãæ åœããã³ãŒãè¡ãå«ãŸããŠããŸãïŒå®éãããã¯ã¹ã¯ãªããèšèªEdifyã§ããããã®ã€ã³ã¿ãŒããªã¿ãŒã¯åããã£ã¬ã¯ããªã«ãããupdate-binaryãšåŒã°ããŸãã-EdãïŒã ãããç§ãã¡ã®ã±ãŒã¹ã«å«ãŸãããã®ã§ãã æåã«ã/ã·ã¹ãã ããŒãã£ã·ã§ã³ãããŠã³ããããŸãïŒ/ etc / fstabã«ãããã®ã«äŒŒãLinuxã®ããªãæšæºçãªããŠã³ãã©ã€ã³ïŒïŒ
mount("ext4", "EMMC", "/dev/block/platform/msm_sdcc.1/by-name/system", "/system", "max_batch_time=0,commit=1,data=ordered,barrier=1,errors=panic,nodelalloc");
次ã«ãã¹ã¯ãªããã¯ã·ã¹ãã å€æ°ro.build.fingerprintãèªã¿åã£ãŠããã€ã¹ã¢ãã«ãšãã¡ãŒã ãŠã§ã¢ããŒãžã§ã³ããã§ãã¯ããŸãïŒ/system/build.propãã¡ã€ã«ããã¯ååŸããŸãããããªã«ããªèªäœãèŠæ±ãããããæŽæ°ã¯ã«ã¹ã¿ã ã³ã³ãœãŒã«ã䜿çšããŠé ä¿¡ã§ããŸããïŒå埩ããã ã5.0以åã§ã¯å¯èœã ã£ãïŒã 以äžãçç¥èšå·ã¯ç¥èªã§ãïŒ
getprop("ro.build.fingerprint") == "google/hammerhead/hammerhead:4.4.4/KTU84P/1227136:user/release-keys" || getprop("ro.build.fingerprint") == "google/hammerhead/hammerhead:5.0/LRX21O/1570415:user/release-keys" || abort("Package expects build fingerprint of google/hammerhead/hammerhead:4.4.4 ..."); getprop("ro.product.device") == "hammerhead" || abort("This package is for \"hammerhead\" devices ...");
äžèšãããããããã«ãæŽæ°ã¯ãéãã€ãã£ããããã€ã¹ã«ã¯é©çšãããŸããããããŒãžã§ã³5.0ã«åããŒã«ã§ããŸãã ã¹ã¯ãªããã¯ããã¡ãŒã ãŠã§ã¢ãå ¬åŒã®GoogleããŒïŒãªãªãŒã¹ããŒïŒã§çœ²åãããŠãããã©ããããã§ãã¯ããŸãã ãã®ãããå€ãã®ãŠãŒã¶ãŒã«åé¡ããããŸãã 次ã®ã¹ãããã¯ãSHA-1ããã·ã¥ã調æŽããããšã«ãããåã ã®ãã¡ã€ã«ã®ååšãšæŽåæ§ãæ€èšŒããããšã§ãã ããã«ã¯2ã€ã®é¢æ°ã䜿çšãããŸããsha1_checkïŒïŒã¯ãã¡ã€ã«åãšããã·ã¥ãåŒæ°ãšããŠåãåããapply_patch_checkïŒïŒã¯3ã€ã®åŒæ°ãåãåããŸãïŒãã¡ã€ã«åãš2ã€ã®ããã·ã¥ã§ãã 1ã€ç®ã¯åã«ãã¡ã€ã«ã®æŽåæ§ããã§ãã¯ããããã«äœ¿çšããã2ã€ç®ã¯ãã¡ã€ã«ã«æ¢ã«ããããé©çšãããŠãããã©ããããã§ãã¯ããŸãã ç°¡åã«ããããã«ã以äžã®ã³ãŒãã®é·ãããã·ã¥ã¯æ¥åã«çœ®ãæããããŸãã
sha1_check(read_file ("system/app/Drive/Drive.apk"), ...) || apply_patch_check("/system/app/Drive.apk", ...) || abort("\"/system/app/Drive.apk\" has unexpected contents."); sha1_check(read_file("system/app/Drive/lib/arm/libdocsimageutils.so"), ...) || apply_patch_check("/system/lib/libdocsimageutils.so", ...) || abort ("\"/system/lib/libdocsimageutils.so\" has unexpected contents.");
ããšãã°ã2ã€ã®ãã§ãã¯ã®ã¿ã衚瀺ãããŸãã å®éããããã«ãã眮æãŸãã¯å€æŽã®å¯Ÿè±¡ãšãªããã¹ãŠã®ãã¡ã€ã«ããã§ãã¯ãããŸãã ãã®ã³ãŒãã¯ãããšãã°/system/app/Drive.apkãã¡ã€ã«ãå€æŽãŸãã¯åé€ãããå ŽåãæŽæ°ã«ãããšã©ãŒãçºçããããšã瀺ããŠããŸãã ãã§ãã¯ãããã¯ã®æåŸã«ãã¹ã¯ãªããã¯ã«ãŒãã«ã/ã·ã¹ãã ã®ç©ºãé åãããã³ã©ãžãªããã§ãã¯ããŸãã
apply_patch_check("EMMC:/dev/block/platform/msm_sdcc.1/by-name/boot:8908800:...") || abort("..."); apply_patch_space(23999236) || abort("Not enough free space on /system to apply patches."); apply_patch_check("EMMC:/dev/block/platform/msm_sdcc.1/by-name/modem:46499328:...") || abort("...");
ã€ãŸããã«ã¹ã¿ã ã«ãŒãã«ãŸãã¯ç¡ç·ã®å€æŽãããå Žåããã®æŽæ°ããã°ã©ã ã¯èµ·åããŸããã 次ã®ã¹ãããã¯ãããã€ã¹ããå€ããã¡ã€ã«ãåé€ããŠããæ°ãããã¡ã€ã«ãšäº€æããæ°ãããã¡ãŒã ãŠã§ã¢ã§äžèŠãªãã¡ã€ã«ãåé€ããããšã§ãã
delete("/system/app/BasicDreams/", "/system/app/BasicDreams/arm/", ...);
次ã«ãå¿ èŠãªãã¹ãŠã®ãã¡ã€ã«ã«ãSHA-1ããã·ã¥ã®äºåãã§ãã¯ã§ããããé©çšãããŸãã ãããã®é©çšã¯apply_patchïŒïŒé¢æ°ã䜿çšããŠå®è¡ãããŸãããã®é¢æ°ã¯ããããã®ãã¡ã€ã«åãšããã€ãã®ããã·ã¥ïŒå ã®ããã·ã¥ããããã®ããã·ã¥ãçµæã®ããã·ã¥ïŒãåãå ¥ããŸãã æåŸã®åŒæ°ã¯ãããããã¡ã€ã«ã®ååã§ãã åãšåæ§ã«ã以äžã®ã³ãŒãã®ãã¹ãŠã®ããã·ã¥ã¯çç¥èšå·ã«ççž®ãããŸãã
sha1_check(read_file("system/app/Drive/Drive.apk"), ...) || apply_patch("/system/app/Drive.apk", "-", ..., package_extract_file("patch/system/app/Drive.apk.p"));
ã«ãŒãã«ãšRAMãã£ã¹ã¯ã«ã¯æåŸã«ããããé©çšãããŸãã
apply_patch("EMMC:/dev/block/platform/msm_sdcc.1/by-name/boot:..., package_extract_file("patch/boot.img.p"));
次ã®ãããã¯ã¯ããããã«è©²åœããªãããã€ã¹ã«ãã¡ã€ã«ã転éãããããå®å šã«çœ®ãæããå¿ èŠããããŸãã ãããã®ããã€ãã¯ãã®åŸç§»åãããŸãïŒ
package_extract_dir("system", "/system"); rename("system/app/KoreanIME.apk", "system/app/KoreanIME/KoreanIME.apk"); rename("system/framework/wm.odex", "system/framework/arm/wm.odex"); ...
äžèŠãªãã¡ã€ã«ãåé€ãããã·ã³ããªãã¯ãªã³ã¯ãã¢ã¯ã»ã¹æš©ãããã³ãã©ã°ãé 眮ãããŸãïŒããã§ã¯ãã¢ã¯ã»ã¹æš©ãšãã©ã°ãæ¥åã«çœ®ãæããããŸãïŒã
delete("/system/etc/firmware/wcd9320/wcd9320_mbhc.bin", ...); symlink("/data/misc/audio/mbhc.bin", "/system/etc/firmware/wcd9320/wcd9320_mbhc.bin"); symlink("/data/misc/audio/wcd9320_anc.bin", "/system/etc/firmware/wcd9320/wcd9320_anc.bin"); ... set_metadata_recursive("/system/bin", ...); set_metadata("/system/bin/app_process32", ...);
ããŒãããŒããŒãšé¢é£ã»ã¯ã·ã§ã³ããã©ãã·ã¥ãããŸãïŒ
package_extract_file("bootloader-flag.txt", "/dev/block/platform/msm_sdcc.1/by-name/misc"); package_extract_file("bootloader.aboot.img", "/dev/block/platform/msm_sdcc.1/by-name/aboot"); package_extract_file("bootloader.rpm.img", "/dev/block/platform/msm_sdcc.1/by-name/rpm"); ...
ç¡ç·/ã¢ãã ã«ããããåœãŠãïŒ
apply_patch("EMMC:/dev/block/platform/msm_sdcc.1/by-name/modem:..., package_extract_file("radio.img.p"));
æåŸã®å€æŽã¯build.propã§ãããã«æ°ãããã¡ãŒã ãŠã§ã¢ããŒãžã§ã³ãæžã蟌ãŸããŸãã ããã¯ãæåŸã®æ®µéã§ãšã©ãŒãçºçããå Žåãã»ãŒãã¹ãŠã®ãã¡ã€ã«ããã§ã«è»¢éãããŠãããšãã«æŽæ°ãäžæããçŸåšã®ãã¡ãŒã ãŠã§ã¢ããŒãžã§ã³çªå·ãããã€ã¹äžã®ãã¡ã€ã«ã«ä¿åããããã«è¡ãããŸãã ãã®åŸã[æŽæ°ã®ç¢ºèª]ãã¿ã³ãã¯ãªãã¯ãããšãå床éå§ã§ããŸãã
apply_patch("/system/build.prop", "-", ..., package_extract_file("patch/system/build.prop.p")); set_metadata("/system/build.prop", ...);
ã¹ã¯ãªããã®æåŸã§ã/ã·ã¹ãã ããŒãã£ã·ã§ã³ãã¢ã³ããŠã³ããããæŽæ°ããã°ã©ã ã®é©çšã®æ€èšŒãéå§ãããæ°ãããã¡ã€ã«ã®SHA-1ããã·ã¥ããã§ãã¯ããã/ã·ã¹ãã ãã¢ã³ããŠã³ããããŸãã
unmount("/system"); mount("ext4", "EMMC", "/dev/block/platform/msm_sdcc.1/by-name/system", "/system", ""); assert(sha1_check(read_file("/system/app/CalendarGooglePrebuilt/CalendarGooglePrebuilt.apk"), ...)); assert(sha1_check(read_file("/system/app/CaptivePortalLogin/CaptivePortalLogin.apk"), ...)); ... unmount("/system");
次ã«ãããã€ã¹ãæ°ããã·ã¹ãã ã«ãªããŒããããŸãã
ã¢ããããŒã¿ãŒã¹ã¯ãªãããã®ãŸãŸ
ã«ã¹ã¿ã å埩
æè¿ãŸã§ãOTAæŽæ°ã¢ãŒã«ã€ãã¯ããã¡ã€ã«ãããã€ã¹ã«ã¢ããããŒãããã€ã³ã¹ããŒã«zipãéžæããã ãã§ãã«ã¹ã¿ã ãªã«ããªããã»ãšãã©ã®å ŽåïŒããã眮ãæãããªã«ããªãã§ãã¯ããªãå ŽåïŒæŽæ°ã§ããŸããã ãã ããã¢ããããŒã5.0ã®ã¹ã¯ãªããããã¯ãã¹ã¯ãªãããå€æŽãããŠããŸãã 以åã®ããŒãžã§ã³ã¯/system/build.propãã¡ã€ã«ããã§ãã¯ããŸããïŒ
file_getprop("/system/build.prop", "ro.build.fingerprint")
çŸåšã®ã¹ã¯ãªããã¯ãã¡ã€ã«ããã§ãã¯ããŸããããã·ã¹ãã å€æ°ã®å€ãçŽæ¥ãã§ãã¯ããŠãå埩ãèŠæ±ããŸãïŒ
getprop("ro.build.fingerprint")
ãŸããã«ã¹ã¿ã ãªã«ããªïŒããšãã°ãTWRPããŒãžã§ã³2.8.0.0ïŒã解æãããšã次ã®è¡ã衚瀺ãããŸãã
ro.build.description=omni_hammerhead-eng 4.4.4 KTU84P eng.dees_troy.20140910.125240 test-keys ro.build.fingerprint=Android/omni_hammerhead/hammerhead:4.4.4/KTU84P/eng.dees_troy.20140910.125240:eng/test-keys
TWRPããŒãžã§ã³2.8.6.1ã®ã³ãŒãã«ã¯æ¬¡ã®è¡ããããŸãïŒ2è¡ç®ã®omniãšããèšèã«æ³šæããŠãã ãããããã¯ããŒã Dees Troyã®TWRPéçºè ãã¢ã¯ãã£ããªOmniROMéçºè ã®1人ã§ãïŒã
ro.build.id=LRX22G ro.build.display.id=omni_hammerhead-eng 5.0.2 LRX22G eng.dees_troy.20150403.145211 test-keys ro.build.version.incremental=eng.dees_troy.20150403.145211
ãŸããCWM TouchãšPhilzã®ææ°ããŒãžã§ã³ã¯æ¬¡ã®ããã«çœ²åãããŠããŸãã
ro.build.description=hammerhead-user 4.4 KRT16M 893803 release-keys ro.build.fingerprint=google/hammerhead/hammerhead:4.4/KRT16M/893803:user/release-keys
ãããã®å€ã¯ããã§ãã¯æã«ã¹ã¯ãªãããè¿ããæåã«æŽæ°ãäžæããããã€ã¹äžã®Androidã®ããŒãžã§ã³ã®äžäžèŽã«é¢ãããšã©ãŒãè¿ããŸãã
ã«ã¹ã¿ã ãªã«ããªããNexus 7ã«ã¢ããããŒã5.0.2ãã€ã³ã¹ããŒã«ããããšãããšåŸãããçãã¯æ¬¡ã®ãšããã§ãã
æŽæ°4.4.3â4.4.4
æ¯èŒã®ããã«ãKTU84MããŒãžã§ã³ããKTU84Pãžã®ä»¥åã®æŽæ°ãåŒçšã§ããŸãã æŽæ°ã¯å°ãããééã¯ããã2.5 MBã§ãã äž»ã«ã»ãã¥ãªãã£ã®æ¹åã«é¢é£ããŠããŸãã ã¢ãŒã«ã€ããéããšãå°æ°ã®ã·ã¹ãã ãã¡ã€ã«ãšã©ãžãªã®ã¿ãããããããããããŠããããšãããããã¹ã¯ãªããã¯ãããããã§ãã¯ããã ãã§ãã ãã®æŽæ°ã¯éåžžãã«ãŒããã«ã¹ã¿ã ã«ãŒãã«ãããã³åäœããXposed Frameworkãšãšãã«ã€ã³ã¹ããŒã«ãããŸããããã¯ããã¹ãŠã®å€æŽããã§ãã¯ãããŠããªãããã§ãã
Nexus 6ããã³Nexus 9ã®ã¢ããããŒã
Googleã®æè¿ã®ããã€ã¹ã¯ãã¹ã¯ãªããæ§é ããŸã£ããç°ãªããŸãã ãããã®ããã€ã¹ããã³ïŒæããã«ïŒåŸç¶ã®ããã€ã¹ã«ã€ããŠãNexus Googleã¯OTAæŽæ°ãæ§æããã¢ã»ã³ããªã¹ã¯ãªããã«ãããã¯æŽæ°ãçæããæ©èœãè¿œå ããŸããã ãã®ãããªæŽæ°ã§ã¯ãåã ã®ãã¡ã€ã«ã®æ€èšŒãšæŽæ°ã¯è¡ãããŸãããã/ã·ã¹ãã ãã¡ã€ã«ã·ã¹ãã ã§ãããã¯ãããŸãã ããã«ãäŸã66ã...ã524256ãã«ã¯ããããã¯ã¢ãã¬ã¹ã®é·ããªã¹ãããããŸãã
if range_sha1("/dev/block/platform/msm_sdcc.1/by-name/system", "66,...,524256") == "..." then block_image_update("/dev/block/platform/msm_sdcc.1/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat");
ããã«ãããGoogleã®ãšã³ãžãã¢ã¯ããšã³ãããã€ã¹ã§ã®OTAæŽæ°ã®äœ¿çšãå€§å¹ ã«ç°¡çŽ åããã³é«éåããããšãã§ããã¢ããããŒã¿ã¹ã¯ãªããèªäœã¯ããã5 KBã«ãªããŸããã ããããããã¯äžçŽãŠãŒã¶ãŒã«ãšã£ãŠé çã®çš®ã«ãªããŸããã å®éãã·ã¹ãã ããŒãã£ã·ã§ã³ãå€æŽãããšãšã©ãŒãçºçããŸãã äœåãªãã¡ã€ã«ã®ååšãå«ã¿ãŸãã ã·ã¹ãã ãR / WãšããŠããŠã³ããããšããäºå®ã§ãããFSã¹ãŒããŒãããã¯ã®ããã·ã¥ã®å€æŽã«ã€ãªãããŸãã
ãããã«
èšäºãèŠçŽãããšã次ã®çµè«ãå°ãåºãããšãã§ããŸãã
- ã¹ãŒããŒãŠãŒã¶ãŒã®æš©å©ã ãã§ã¯ãæŽæ°ããã°ã©ã ã®æ£åžžãªé©çšã«ã¯åœ±é¿ããŸããã ãããã®æš©éãæã£ãŠãããŠãŒã¶ãŒãšããã°ã©ã ãã·ã¹ãã ã«å ããå€æŽã圱é¿ããŸãã å€ãã®å Žåããããã®å€æŽã远跡ããŠè¿ãããšã¯ã§ããŸããã
- ã«ãŒããšã·ã¹ãã ãžã®å€æŽãæŽæ°ã®æåã«åœ±é¿ãããã©ããã¯ãæŽæ°äžã®ã·ã¹ãã ã®å€æŽãšã¹ã¯ãªããããã§ãã¯ãããã¡ã€ã«ã«ãã£ãŠç°ãªããŸãã ã·ã¹ãã ãå€æŽãããå Žåãäžå¿ èŠãªã·ã¹ãã ã¢ããªã±ãŒã·ã§ã³ãTitanium Backupãä»ããŠããªãŒãº/åæãããã«ãŒãã«ãå€æŽãããã«ã¹ã¿ã ãªã«ããªãXposed FrameworkãLucky Patcherãfreedomãfranco.Kernelã¢ããããŒã¿ããã€ã€ã©ãŒçšã®modãããã³ããããçš®é¡ã®ãµãŠã³ãæ¡åŒµããã®ä»ã®èµ·åãã·ã¹ãã ãã©ã³ããªã©ãã€ã³ã¹ããŒã«ãããŸããããã«ã ãã®ãã¹ãŠãã¢ããããŒãã«åœ±é¿ãäžããå¯èœæ§ããããŸãã
- ã·ã¹ãã ãå€æŽãããšããOTAã䜿çšããŠæŽæ°ããå Žåã¯ãåžžã«å ã®ãã¡ã€ã«ãããã¯ã¢ããçšã«æ®ããŠãã ããã ã¯ã©ãŠãã«ã³ããŒãã奜ããªååã«å€æŽããŸãã / systemã»ã¯ã·ã§ã³ã®Nandroidããã¯ã¢ãããäœæã§ããŸãïŒåå·ã®Nandroidã«ã€ããŠèªãã§ãã ããïŒã
- ã·ã¹ãã ã®å€æŽç¹ãèŠããŠããã°ãã»ãŒãã€ã§ãããŒã«ããã¯ã§ããŸãã ãªã«ããªã¯åžžã«ãšã©ãŒãæžã蟌ã¿ãŸãããããã¯æŽæ°ããã°ã©ã ãèªããŸãã ãšã©ãŒã®ãã¡ã€ã«åãã°ã°ãªã³ã°ãããšãã©ã®ããã°ã©ã ããããå€æŽããããèŠã€ããããšãã§ããŸãã ããšãã°ã/ system / bin / thermal-engine-hhããã³/system/lib/power.msm8974.soã¯franco.Kernelã¢ããããŒã¿ãŒã眮ãæããã¹ããã¯ã«ãŒãã«ããã©ãã·ã¥ãããŠã¢ããªã±ãŒã·ã§ã³ãç Žå£ãããå Žåã§ããããè¿ããŸããã
- OTAãæ£åžžã«äœ¿çšããã«ã¯ãå ã®ãã¡ã€ã«ãã·ã¹ãã ã«æ»ãå¿ èŠããããŸãã æã確å®ãªæ¹æ³ã¯ãæŽæ°ãã€ã³ã¹ããŒã«ããåã«ãsystem.imgãã¹ããã¯ã«ãŒãã«ãããã³ãªã«ããªããã©ãã·ã¥ããããšã§ãïŒããŒã¿ãšã¢ããªã±ãŒã·ã§ã³ã¯å€±ãããŸããïŒã
- ããŠãäž»ãªçµè«ã ã«ãŒããšå€ãã®å€æŽãããå Žå-å¿é ããå¿ èŠã¯ãããŸããããããŒã¿ãä¿åããããã«flash-all.batã®-wã¹ã€ãããåé€ããŠãæ°ãããã¡ãŒã ãŠã§ã¢ã®å®å šãªã€ã¡ãŒãžãããã«éä¿¡ããŸãã ããŒãžã§ã³5.0ãžã®ã¢ããã°ã¬ãŒã以éãã¹ã¯ãªãããã ãŸãå¯èœæ§ã¯ã»ãšãã©ãããŸããã ã¯ãã次ã®ã¢ããããŒãã«ã¯ããããã¯ãæ§é ãå«ãŸããŠããå ŽåããããŸããããã¯ã䜿çšãããã«ãããŒã®ã¿ãååšããããšãæå³ããŸãã
ãšãã£ã¿ãŒããã®äžèš
æè¿ãŸã§ãã«ã¹ã¿ã ãã¡ãŒã ãŠã§ã¢ïŒCyanogenModãParanoidïŒã®OTAæŽæ°ã¯ãåžžã«ãã«ããŒãžã§ã³ã®ãã¡ãŒã ãŠã§ã¢ãå«ãzip圢åŒã§æäŸããããã以åã«ã·ã¹ãã ã«å ããããå€æŽã¯ãŸã£ããéèŠã§ã¯ãããŸããã§ããã ãã¡ãŒã ãŠã§ã¢ã¯åžžã«åã€ã³ã¹ããŒã«ãããŠããŸãïŒãã¡ããããŠãŒã¶ãŒãšã®ã£ããã¹ã®ããŒã¿ãä¿åããŸãïŒããã ããã€ã³ã¯ãªã¡ã³ã¿ã«æŽæ°ã®æ©èœã¯CyanogenMod 11ã«ç»å ŽããŸããããGoogleã䜿çšãããã®ã«æ¯ã¹ãŠã¯ããã«ç°¡åã§ãã ãã®æŽæ°ããã°ã©ã ã¯ããã¡ãŒã ãŠã§ã¢ã®æŽåæ§ã確èªããããããé©çšããã«ã以åã®ããŒãžã§ã³ïŒéåžžã¯å€éãã«ãïŒããå€æŽããããã¡ã€ã«ã眮ãæããã ãã§ãã ããã«ãæŽæ°ããã°ã©ã ã®1ã€ãéããå Žåãæ§åŒã®æ¹æ³ã§ã®æ¬¡ã®æŽæ°ããã°ã©ã ã¯å®å šãªæŽæ°ã®åœ¢åŒã§æäŸãããŸãã ã·ã³ãã«ã§äŸ¿å©ã
OmniROMã§ã¯ããã«èå³æ·±ãæ¹æ³ã䜿çšãããŸãã æŽæ°ã«ã¯ãã€ããªãããã䜿çšããŸãããGoogleã®ããã«ã¯ãŸã£ãã䜿çšããŸããã æåã®OTAæŽæ°ã¯åžžã«å®å šã«ããŠã³ããŒãããããã®åŸã¡ã¢ãªã«ãŒãã«ä¿åããããã©ãã·ã¥ãããŸãããã«ãŒãããã¯åé€ãããŸããã 次ã®OTAã¢ããããŒãã¯ããã§ã«åäžã®ãã€ããªãããã®åœ¢ã§æäŸãããŸãããã®åŸãã¡ã¢ãªã«ãŒãã«æåŸã«ä¿åãããã¢ããããŒãã«ããããã¹ãŒããŒã€ã³ããŒãºããããã§ã«ã¢ããããŒããããŠããŸãã ãã®æ¹æ³ã®ãã€ã©ã€ãã¯ãããããã·ã¹ãã ã«é©çšãããã®ã§ã¯ãªããæåŸã«æŽæ°ããããã¡ã€ã«ã«é©çšãããã¹ããŒããã©ã³ãæ¯åãŒããããã©ãã·ã¥ãããããšã§ãïŒãã ããããŒã¿ãšèšå®ã¯ä¿åãããŸãïŒã ã»ãŒçæ³çãªæ¹æ³ã¯ããã©ãã£ãã¯ãç¯çŽããããšã§ãããå€æŽãããã·ã¹ãã ãšã®ç«¶åãå¿é ããå¿ èŠã¯ãããŸããã
CyanogenMod 12ã®ã€ã³ã¹ããŒã«ç»é¢ãæŽæ°ãã
Hacker MagazineïŒ196ã§æåã«çºè¡ãããŸããã
äœæè ïŒDmitry "BRADA" Podkopaev
ããã«ãŒã賌èªãã