Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
´ÓCMË¢»ú¹ý³ÌºÍÔ­Àí·ÖÎöAndroidϵͳ½á¹¹
 
×÷Õß ÂÞÉýÑô£¬»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-07-28
  4814  次浏览      32
 

Èç¹ûÄÜÈÃAndroidϵͳԴÂëÔÚÕæÊµÉ豸ÉÏÅÜÅÜ¿´Ð§¹û£¬ÄǸöàºÃ¡£Õâ²»¾ÍÊÇ´«ËµÖеÄË¢ROMÂð£¿Ë¢ROMÕâ¸ö»°ÌâÊÇÀÏÂÞÒÔǰһֱ±ÜÃâ̸µÄ£¬ÒòΪ¾õµÃûÓÐÈ«ÃæÁ˽âAndroidϵͳǰ¾Í̸ROMÊDz»ÍêÕûµÄ¡£Ð´ÍêÁË101ƪÎÄÕºó£¬ÀÏÂÞ¾õµÃÎÄÕ¸Ã̸̸Õâ¸ö»°ÌâÁË£¬²¢ÇÒÑ¡ÔñCMÕâ¸öÓдú±íÐÔµÄROMÀ´Ì¸£¬Ä¿±êÊǼÓÉî´ó¼Ò¶ÔAndroidϵͳµÄÁ˽⡣

˵ÆðË¢ROMµÄ¶¯»ú£¬³ýÁËÉÏÃæËµµÄÓÃÀ´¿´AndroidϵͳԴÂëÔÚÕæÊµÉ豸ÉϵÄÔËÐÐЧ¹û£¬»¹ÓкܶàÖµµÃ˵µÄ¡£»ØÏëÆðPCʱ´ú£¬ÎÒÃǶÔÎÒÃÇ×Ô¼ºÓµÓеÄÉ豸£¨µçÄÔ£©£¬»ù±¾ÉÏÄÜ×öµÄ¾ÍÊÇÔÚÉÏÃæÖØ×°ÏµÍ³¡£Õâ¸öϵͳÊdz§ÉÌ×öºÃ¸øÎÒÃǵģ¬ÀïÃæÓÐʲôÎÒÃǾÍÓÃʲô£¬²»ÄÜËæÐÄËùÓûµØ¶¨ÖÆ¡£µ±È»£¬Èç¹ûÄãÓõÄÊÇLinuxϵͳ£¬ÄãÊÇ¿ÉÒÔËæÐÄËùÓûµØ¶ÔËü½øÐж¨ÖƵġ£²»¹ý¿ÉϧµÄÊÇ£¬ÎÒÃǵÄÅ®ÉñÓõͼÊÇWindowsϵͳ¡£ÄãºÍÅ®Éñ˵ÄãÏëҪʲôÑùµÄLinuxϵͳ£¬ÎÒ¸øÄã¶¨ÖÆÒ»¸ö£¬Ëý»á²»ÖªµÀÄã˵µÄÊÇʲô¡ª¡ªËýÐèÒªµÄÊÇÒ»¸ö²»»áÖж¾µÄÓÖÅܵÿìµÄWindowsϵͳ¶øÒÑ¡£ÏÖÈç½ñËäÈ»ºÜ¶àÅ®ÉñÓõÄÊÇÈÔÈ»ÊÇÎÒÃDz»ÄÜËæÐÄËùÓû¶¨ÖƵÄiOSϵͳ£¬µ«ÊÇÔÚÒÆ¶¯É豸ÉÏ£¬iOSϵͳ±Ï¾¹²»ÄÜ×öµ½WindowsÔÚPCÄÇÑùµÄÒ»¼Ò¶À´ó¡ª¡ªÎÒÃÇ»¹Óв»ÉÙÅ®ÉñÊÇÓÃAndroidϵͳµÄ¡£ËùÒÔ£¬Èç¹ûÄãÏÖÔÚºÍÅ®Éñ˵£¬ÎÒ¿ÉÒÔ°ïÄãË¢Ò»¸öרÊôµÄ¾«¼òAndroidϵͳ£¬ÀïÃæÃ»ÓÐÒ»¶ÑÄã²»ÐèÒªµÄԤװÈí¼þ£¬»áÈÃÄãµÄÊÖ»úÅܵúܿ죬ÄÇÅ®ÉñµÃÓжà³ç°ÝÄã°¡¡£

µ±È»£¬Ë¢ROMµÄ¶¯»ú²»ÄÜÖ»ÊÇΪÁËÈÃÅ®Éñ³ç°Ý£¬×÷Ϊһ¸ö³ÌÐòÔ³£¬ÎÒÃǵÄÊ×ÒªÈÎÎñÊÇά»¤ÓîÖæºÍƽ¡£Ôõôά»¤ÄØ£¿ÖÁÉÙ³ÌÐòÓÐBUG²»Äܲ»¸Ä°É¡£Äã²»¸ÄµÄ»°£¬ÀϰåÊDz»»á·Å¹ýÄãµÄ¡£µ«ÊÇ£¬Åöµ½ÄÇЩºÜ¼¬ÊÖµÄBUG£¬Ôõô°ìÄØ£¿ÀýÈ磬ÄãÊÇÒ»¸öAndroidÓ¦Óÿª·¢Õߣ¬µ÷ÓÃÒ»¸öAPI½Ó¿ÚµÄʱºò£¬×ÜÊÇÅ׳öÒ»¸öÒì³££¬¶øÕâ¸öÒì³£²»¸úµ½APIÄÚ²¿ÊµÏÖÈ¥¿´¿´ÊµÔÚÊDz»ÖªµÀʲôԭÒòÔì³ÉµÄ¡£Õâʱºò£¬Èç¹ûÄãÊÖÍ·ÉÏÓÐÕâ¸öÊÖ»úµÄϵͳԴ´úÂ룬ÕÒÕâ¸öAPIÄÚ²¿ÊµÏֵĵط½£¬¼ÓÒ»Á½Ðе÷ÊÔ´úÂ룬ÔÙ±àÒë»ØÊÖ»úÉÏÈ¥ÅÜ£¬ÊDz»ÊǾͺÜÈÝÒ×¶¨Î»ÎÊÌâÁËÄØ£¿

ËùÒÔ˵£¬»áË¢ROM£¬²»Ö»ÊÇ¿ÉÒÔ»ñµÃÅ®Éñ³ç°Ý£¬»¹¿ÉÒÔά»¤ÊÀ½çºÍƽ£¬×÷Ϊһ¸öAndroid¿ª·¢Õߣ¬Ä㻹ÓÐʲôÀíÓɲ»È¥Ñ§Ï°Ë¢ROMÄØ£¿¼ÈÈ»Äã¾ö¶¨Ñ§Ï°Ë¢ROMÁË£¬ÄÇÄã¾ÍµÃÏȸãÇå³þÁ½¸öÎÊÌ⣺1. ʲôÊÇË¢ROM£»2. ÔõôѧϰˢROM¡£

ÔڻشðµÚÒ»¸öÎÊÌâ֮ǰ£¬ÎÒÃÇÏÈÀ´¿´¿´AndroidÉ豸´ÓÓ²¼þµ½ÏµÍ³µÄ½á¹¹£¬Èçͼ1Ëùʾ£º

ͼ1 Androidϵͳ¼Ü¹¹

×îµ×²ãµÄÊǸ÷ÖÖÓ²¼þÉ豸£¬ÍùÉÏÒ»²ãÊÇBootloader¡£BootloaderÊÇʲô¸ÅÄîÄØ£¿ÎÒÃǶ¼ÖªµÀ£¬PCÖ÷°åÉÏÓÐһС¶Î³ÌÐò½Ð×öBIOS£¬Ö÷°å¼ÓµçʱËüÊǵÚÒ»¸öÅÜÆðÀ´µÄ³ÌÐò£¬¸ºÔð³õʼ»¯Ó²¼þ£¬ÒÔ¼°½«OSÆô¶¯ÆðÀ´¡£ÔÚǶÈëʽÊÀ½çÀÊÖ»úÒ²ÊÇÊôÓÚǶÈëʽÉ豸£©£¬Ò²ÓÐһС¶ÎÀàËÆBIOSµÄ³ÌÐò£¬²»¹ýËü²»½ÐBIOS£¬¶øÊǽÐBootloader¡£Ê¹ÓÃ×î¹ã·ºµÄBootloaderÊÇÒ»¸ö½ÐubootµÄ³ÌÐò£¬ËüÖ§³Ö·Ç³£¶àµÄÌåϵ½á¹¹¡£¾­¹ý±àÒëºó£¬uboot»áÉú³ÉÒ»¸öuboot.bin¾µÏñ£¬½«Õâ¸ö¾µÏñÉÕµ½É豸ÉϵÄÒ»¸öÌØ¶¨·ÖÇøÈ¥£¬¾Í¿ÉÒÔ×÷ΪBootloaderʹÓÃÁË¡£

BootloaderÖ§³Ö½»»¥Ê½Æô¶¯£¬Ò²¾ÍÊÇÎÒÃÇ¿ÉÒÔÈÃBootloader³õʼ»¯Íê³ÉÓ²¼þÖ®ºó£¬²»ÊÇÂíÉÏÈ¥Æô¶¯OS£¬¶øÊÇÍ£ÁôÔÚµ±Ç°×´Ì¬£¬µÈ´ýÓû§ÊäÈëÃüÁî¸æËßËü½ÓÏÂÀ´¸Ã¸Éʲô¡£ÕâÖÖÆô¶¯Ä£¿é¾Í³ÆÎªFastbootģʽ¡£¶ÔÓÚAndroidÉ豸À´Ëµ£¬ÎÒÃÇ¿ÉÒÔͨ¹ýadb reboot bootloaderÃüÁîÀ´ÈÃËüÖØÐÂÆô¶¯²¢ÇÒ½øÈëµ½FastbootģʽÖÐÈ¥¡£

ÔÚÌÖÂÛFastbootģʽ֮ǰ£¬ÎÒÃÇÏÈÁ˽âÒ»ÏÂǶÈëʽÉ豸µÄROM½á¹¹£¨NAND flashÖ®ÀàµÄоƬ£©¡£Í¨³££¬Ò»¸öÄܹ»Õý³£Æô¶¯µÄǶÈëʽÉ豸µÄROM°üº¬ÓÐÒÔÏÂËĸö·ÖÇø£º

1. Bootloader·ÖÇø£¬Ò²¾ÍÊÇ´æ·Åuboot.binµÄ·ÖÇø

2. BootloaderÓÃÀ´±£´æ»·¾³±äÁ¿µÄ·ÖÇø

3. Kernel·ÖÇø£¬Ò²¾ÍÊÇ´æ·ÅOSÄں˵ķÖÇø

4. Rootfs·ÖÇø£¬Ò²¾ÍÊÇ´æÈëϵͳµÚÒ»¸ö½ø³Ìinit¶ÔÓ¦µÄ³ÌÐòµÄ·ÖÇø

µ±É豸´¦ÓÚFastbootģʽʱ£¬ÎÒÃÇ¿ÉÒÔͨ¹ýÁíÍâÒ»¸ö¹¤¾ßfastbootÀ´ÈÃÉ豸ִÐÐÖ¸¶¨µÄÃüÁî¡£¶Ô¸ã»úÕßÀ´Ëµ£¬×î³£ÓõÄÃüÁî¾ÍÊÇË¢Èë¸÷ÖÖ¾µÏñÎļþÁË£¬ÀýÈ磬ÍùKernel·ÖÇøºÍRootfs·ÖÇøË¢ÈëÖ¸¶¨µÄ¾µÏñ¡£

¶ÔÓÚAndroidÉ豸À´Ëµ£¬µ±Ëü´¦ÓÚFastbootģʽʱ£¬ÎÒÃÇ¿ÉÒÔ½«Ò»¸ö°üº¬ÓÐKernelºÍRootfsµÄRecovery.img¾µÏñͨ¹ýfastboot¹¤¾ßË¢Èëµ½Ò»¸ö³ÆÎªÉ豸ÉÏÒ»¸ö³ÆÎªRecoveryµÄ·ÖÇøÈ¥¡£Õâ¸ö¹ý³Ì¾ÍÊÇË¢RecoveryÁË£¬ËüÒ²ÊÇÊôÓÚË¢ROMµÄÒ»ÖÖ¡£ÓÉÓÚRecovery·ÖÇø°üº¬ÓÐKernelºÍRootfs£¬Òò´Ë½«Recovery.imgË¢Èëµ½É豸ºó£¬ÎÒÃǾͿÉÒÔÈÃÉ豸Õý³£µØÆô¶¯ÆðÀ´ÁË¡£ÕâÖÖÆô¶¯·½Ê½¾Í³ÆÎªRecoveryģʽ¡£ ¶ÔÓÚAndroidÉ豸À´Ëµ£¬ÎÒÃÇ¿ÉÒÔͨ¹ýadb reboot recoveryÃüÁîÀ´ÈÃËü½øÈëµ½RecoveryģʽÖÐÈ¥¡£

µ±É豸´¦ÓÚRecoveryģʽʱ£¬ÎÒÃÇ¿ÉÒÔ×öÐ©Ê²Ã´ÄØ£¿´ð°¸ÊÇÈ¡¾öÓÚË¢ÈëµÄRecovery.imgËù°üº¬µÄRootfsËù°üº¬µÄ³ÌÐò¡£¸üÈ·ÇеØËµ£¬ÊÇÈ¡¾öÓÚRootfs¾µÏñÀïÃæµÄinit³ÌÐò¶¼×öÁËЩʲôÊÂÇé¡£²»¹ý¹ËÃû˼Ò壬Recovery¾ÍÊÇÓÃÀ´»Ö¸´ÏµÍ³µÄÒâ˼£¬Ò²°üº¬ÓиüÐÂϵͳµÄÒâ˼¡£ÕâÀïËù˵µÄϵͳ£¬ÊÇÓû§Õý³£Ê¹ÓõÄϵͳ£¬ÀïÃæ°üº¬ÓÐAndroidÔËÐÐʱ¿ò¼Ü£¬Ê¹µÃÎÒÃÇ¿ÉÒÔÔÚÉÏÃæ°²×°ºÍʹÓø÷ÖÖAPP¡£

Óû§Õý³£Ê¹ÓÃAndroidÉ豸ʱµÄϵͳ£¬Ö÷ÒªÊǰüº¬ÓÐÁ½¸ö·ÖÇø£ºSystem·ÖÇøºÍBoot·ÖÇø¡£System·ÖÇø°üº¬ÓÐAndroidÔËÐÐʱ¿ò¼Ü¡¢ÏµÍ³APPÒÔ¼°Ô¤×°µÄµÚÈý·½APPµÈ£¬¶øBoot·ÖÇø°üº¬ÓÐKernelºÍRootfs¡£Ë¢Èëµ½System·ÖÇøºÍBoot·ÖÇøµÄÁ½¸ö¾µÏñ³ÆÎªsystem.imgºÍboot.img£¬ÎÒÃÇͨ³£½«ËüÃÇ´ò°üºÍѹËõΪһ¸özipÎļþ£¬ÀýÈçupdate.zip£¬²¢ÇÒ½«ËüÉÏ´«µ½AndroidÉ豸ÉϵÄsdcardÉÏÈ¥¡£ÕâÑùµ±ÎÒÃǽøÈëµ½Recoveryģʽʱ£¬¾Í¿ÉÒÔÔÚRecovery½çÃæÉÏÓÃÎÒÃÇ֮ǰÉÏ´«µ½sdcardµÄzip°üÀ´¸üÐÂÓû§Õý³£Ê¹ÓÃAndroidÉ豸ʱËùÓõÄϵͳÁË¡£Õâ¸ö¹ý³Ì¾ÍÊÇͨ³£Ëù˵µÄË¢ROMÁË¡£

²»ÖªµÀ´ó¼Ò¿´Ã÷°×ÁËûÓУ¿¹ãÒåÉϵÄË¢ROM£¬Êµ¼ÊÉϰüº¬¸üÐÂRecoveryºÍ¸üÐÂÓû§Õý³£Ê¹ÓõÄϵͳÁ½¸öÒâ˼£»¶øÏÁÒåÉϵÄË¢ROM£¬Ö»ÊǸüÐÂÓû§Õý³£Ê¹ÓõÄÄǸöϵͳ¡£¸üÐÂRecoveryÐèÒª½øÈëµ½FastbootģʽÖУ¬¶ø¸üÐÂÓû§Õý³£Ê¹ÓõÄÄǸöϵͳÐèÒª½øÈëµ½RecoveryģʽÖС£AndroidÉ豸ÔÚÆô¶¯µÄ¹ý³ÌÖУ¬ÔÚĬÈÏÇé¿öÏ£¬Ò»µ©BootloaderÆô¶¯Íê³É£¬¾Í»áÖ±½ÓÆô¶¯Óû§Õý³£Ê¹ÓõÄÄǸöϵͳ£¬¶ø²»»á½øÈëµ½Recoveryģʽ£¬»òÕßÍ£ÁôÔÚBootloaderÖУ¬Ò²¾ÍÊÇÍ£ÁôÔÚFastbootģʽÖС£Ö»ÓÐͨ¹ýÌØ¶¨µÄÃüÁÀýÈçadb reboot recoveryºÍadb reboot bootloader£¬»òÕßÌØ¶¨µÄ°´¼ü£¬ÀýÈçÔÚÉ豸Æô¶¯¹ý³ÌÖÐͬʱ°´×¡ÒôÁ¿¼õС¼üºÍµçÔ´¿ª¹Ø¼ü£¬²ÅÄÜÈÃÉ豸½øÈëµ½Recoveryģʽ»òÕßFastbootģʽÖС£

Òò´Ë£¬Ò»¸öÍêÕûµÄË¢ROM¹ý³Ì£¬°üº¬ÒÔÏÂÁ½¸ö²½Ö裺

1. ÈÃÉ豸½øÈëµ½Fastbootģʽ£¬Ë¢ÈëÒ»¸örecovery.img¾µÏñ

2. ÈÃÉ豸½øÈëµ½Recoveryģʽ£¬Ë¢ÈëÒ»¸ö°üº¬system.img¾µÏñºÍboot.img¾µÏñµÄzip°ü

²»¹ýÐèҪעÒâµÄÊÇ£¬system.img¾µÏñºÍboot.img¾µÏñ²»Ò»¶¨ÊÇÖ»ÓÐÔÚRecoveryģʽ²ÅÄÜË¢È룬ÔÚFastbootģʽÏÂÒ²ÊÇ¿ÉÒÔË¢ÈëµÄ£¬¾ÍÏñÔÚFastbootģʽÖÐË¢Èërecovery.img¾µÏñÒ»Ñù£¬Ö»²»¹ýÔÚRecoveryģʽÏÂË¢ÈëËüÃǸüÓѺÃһЩ¡£Ëµµ½ÕâÀ¾Í²»µÃ²»ËµÁíÍâÒ»¸ö¸ÅÄ¾ÍÊÇËùνµÄBootloaderËø¡£ÔÚËø¶¨BootloaderµÄÇé¿öÏ£¬ÎÒÃÇÊÇÎÞ·¨Ë¢Èë·Ç¹Ù·½µÄrecovery.img¡¢system.imgºÍboot.img¾µÏñµÄ¡£ÕâÊǸú³§ÉÌʵÏÖµÄBootloaderÏà¹ØµÄ£¬ËüÃÇ¿ÉÒÔͨ¹ýÒ»¶¨µÄËã·¨£¨ÀýÈçÇ©Ãû£©À´Ñé֤ҪˢÈëµÄ¾µÏñÊÇ·ñÊǹٷ½·¢²¼µÄ¡£ÔÚÕâÖÖÇé¿öÏ£¬±ØÐëÒª¶ÔBootloader½øÐнâËø£¬ÎÒÃDzſÉÒÔË¢Èë·Ç¹Ù·½µÄ¾µÏñ¡£

ºÃÁË£¬ÒÔÉϾͻشðÁËʲôÊÇË¢ROMÕâ¸öÎÊÌ⣬½ÓÏÂÀ´ÎÒÃÇÒª»Ø´ðµÄÊÇÈ糣ѧϰˢROMÕâ¸öÎÊÌâ¡£

Ç°ÃæÎÒÃÇÌáµ½ÁËË¢ROMµÄÁ½¸ö²½Ö裬ʵ¼ÊÉÏÎÒÃÇ»¹ÉÙÁËÒ»¸öÖØÒªµÄ²½Ö裬ÄǾÍÊÇÏÈÒªÖÆ×÷recovery.img¡¢system.imgºÍboot.img¡£ÓÐÈË¿ÉÄÜ»á˵£¬ÍøÉϲ»ÊǺܶàÏֳɵÄË¢»ú°üÂð£¿Ö±½ÓÄùýÀ´Óò»¾ÍÊÇÐÐÁËÂ𣿵«ÊDZðÍüÁËÇ°ÃæÎÒÃÇËù˵µÄË¢ROM¶¯»ú£ºËæÐÄËùÓûµØ¶¨ÖÆ×Ô¼ºµÄϵͳ¡£È¥ÄñðÈËÖÆºÃµÄË¢»ú°ü¾ÍʧȥÁËËæÐÄËùÓû¶¨ÖƵÄÄÜÁ¦¡£ÄǾÍÖ»ÄÜ×Ô¼ºÈ¥±àÒëAOSPÔ´ÂëÉú³ÉË¢»ú°üÁË¡£

È»¶ø£¬´ÓÁ㿪ʼ´ÓAOSPÔ´ÂëÖбàÒë³öÄÜÔÚ×Ô¼ºÊ¹ÓõÄÊÖ»úÉÏÔËÐеÄϵͳ£¬¿É²»ÊÇÒ»¼þÈÝÒ×µÄÊÂÇé¡£²»¹ý£¬ºÃÔÚÓкܶàÏֳɵĻùÓÚAOSPµÄµÚÈý·½¿ªÔ´ÏîÄ¿£¬¿ÉÒÔ±àÒë³öÀ´ÔÚĿǰÊг¡Éϴ󲿷ֵÄÊÖ»úÉÏÔËÐС£ÆäÖУ¬×îÖøÃûµÄ¾ÍÊÇCyanogenModÁË£¬¼ò³ÆCM¡£¹úÄڴ󲿷ֵĵÚÈý·½Androidϵͳ£¬¶¼ÊÇ»ùÓÚCMÀ´¿ª·¢µÄ£¬°üÀ¨MIUIºÍ´¸×Ó¡£

Ñ¡ÔñCMÀ´½²½âË¢ROMµÄ¹ý³ÌÊDZ¾ÎĵÄÖ÷Ìâ¡£²»¹ýµ¥¾ÍË¢ROMÕâ¸ö¹ý³ÌÀ´Ëµ£¬CM¹ÙÍøÉÏÒѾ­ÓкÜÏêϸµÄ¹ý³Ì£¬°üÀ¨´ÓCMÔ´Âë±àÒë³öÊÊÓÃÌØ¶¨»úÐ͵ÄË¢»ú°ü£¬ÒÔ¼°½«±àÒë³öÀ´µÄË¢»ú°üË¢µ½ÊÖ»úÀïÃæÈ¥µÄ¹ý³Ì¡£Òò´Ë£¬±¾ÎIJ»Êǵ¥´¿µØ½²½âË¢ROM¹ý³Ì£¬¶øÊÇÒª½áºÏÔ­ÀíÀ´½²½âË¢ROM¹ý³ÌµÄ¹Ø¼ü²½Ö裬À´´ïµ½°ïÖú´ó¼Ò¸ü½øÒ»²½µØÀí½âAndroidµÄÄ¿µÄ¡£

ÒªÕæÕý×öµ½Àí½âCM ROMµÄË¢»úÔ­Àí£¬³ýÁËÒª¶ÔAndroidϵͳ±¾ÉíÓÐÒ»¶¨µÄÈÏʶ֮Í⣬»¹ÊìÁ·ÕÆÎÕAndroidµÄÔ´Âë¹ÜÀíϵͳºÍ±àÒëϵͳ¡£Òò´Ë£¬ÔÚ¼ÌÐøÔĶÁÏÂÃæµÄÄÚÈÝ֮ǰ£¬Ï£Íû¿ÉÒÔÏÈÔĶÁÇ°ÃæAndroidÔ´´úÂë²Ö¿â¼°Æä¹ÜÀí¹¤¾ßRepo·ÖÎöºÍAndroid±àÒëϵͳ¼òÒª½éÉܺÍѧϰ¼Æ»®ÕâÁ½¸öϵÁеÄÎÄÕ¡£½ÓÏÂÀ´ÎÒÃǾͿªÊ¼½²½âCM ROMµÄË¢»ú¹ý³ÌºÍÔ­Àí¡£

ÎÒÃÇÊ×ÏÈÊÇҪ׼±¸ºÃ»·¾³ÒÔ¼°ÊÖ»ú¡£ÕâÊDZ¾´Î²Ù×÷ËùÓõĻ·¾³ÒÔ¼°ÊÖ»ú£º

1. Ubuntu 13.04

2. CM-10.1

3. OPPO Find 5

Ò²¾ÍÊÇ˵£¬ÎÒÃǽ«ÔÚUbuntu 13.04ÉÏΪOPPO Find 5ÖÆ×÷CM-10.1µÄRecoveryºÍROM¡£

²»¹ýÏȱð¼±×ÅÖÆ×÷×Ô¼ºµÄROM¡£ÎªÁ˱£Ö¤½ÓÏÂÀ´µÄ²½Öè¿ÉÒÔ˳ÀûÖ´ÐУ¬ÎÒÃÇÊ×Ïȳ¢ÊÔË¢Ò»ÏÂCM¹Ù·½¶ÔÓ¦°æ±¾µÄRecoveryºÍROMµ½ÎÒÃǵÄOPPO Find 5ÊÖ»úÉÏ¡£Èç¹ûÒ»ÇÐÕý³££¬¾Í˵Ã÷ÎÒÃÇʹÓÃCMµÄÔ´ÂëÀ´ÖÆ×÷µÄRecoveryºÍROMÒ²ÊÇ¿ÉÒÔÔËÐÐÔÚOPPO Find 5Éϵġ£

ÊʺÏOPPO Find 5µÄCM¹Ù·½RecoveryÏÂÔØµØÖ·£ºhttp://download2.clockworkmod.com/recoveries/recovery-clockwork-6.0.4.6-find5.img¡£¼ÙÉèÎÒÃÇÏÂÔØºÃÖ®ºó£¬±£´æÔÚ±¾µØµÄ·¾¶Îª$CM/recovery-clockwork-6.0.4.6-find5.img¡£

ÊʺÏOPPO Find 5µÄCM¹Ù·½10.1.3°æ±¾ROMÏÂÔØµØÖ·£ºhttp://download.cyanogenmod.org/get/jenkins/42498/cm-10.1.3-find5.zip¡£¼ÙÉèÎÒÃÇÏÂÔØºÃÖ®ºó£¬±£´æÔÚ±¾µØµÄ·¾¶Îª$CM/cm-10.1.3.find5.zip¡£

×¢Ò⣬ÓÉÓÚÎÒÃǼƻ®ÓÃCM-10.1Ô´ÂëÀ´ÖÆ×÷×Ô¼ºµÄROM£¬ËùÒÔÎÒÃÇÔÚÏÂÔØCM¹Ù·½ROM£¬Ò²ÒªÏÂÔØ¶ÔÓ¦10.1°æ±¾µÄ¡£

ÔÚË¢RecoveryºÍROMµÄ¹ý³ÌÖУ¬ÎÒÃÇÐèÒª½èÖúÓÚAndroid SDKÀïÃæµÄfastbootºÍadb¹¤¾ß£¬Òò´Ë£¬ÎªÁË·½±ãÖ´ÐÐÕâЩÃüÁÎÒÃÇÏȽ«ÕâЩ¹¤¾ßµÄĿ¼¼ÓÈëµ½PATH»·¾³±äÁ¿È¥¡£¼ÙÉèÎÒÃÇÏÂÔØµÄAndroid SDK±£´æÔÚĿ¼$ASDKÖУ¬ÄÇô´ò¿ªÒ»¸öÖÕ¶Ë£¬Ö´ÐÐÒÔÏÂÃüÁî¼´¿É£º

$ export PATH=$ASDK/platform-tools:$PATH

ÏÈË¢Recovery£¬²½ÖèÈçÏÂËùʾ£º

1. ±£³ÖOPPO Find 5ÔÚÕý³£¿ª»ú״̬£¬²¢ÇÒͨUSBÁ¬½Óµ½½«ÓÐUbuntu 13.04µÄµçÄÔÉÏ¡£

2. »¹ÊÇÔڸղŴò¿ªµÄÖÕ¶ËÉÏ£¬²¢ÇÒ½øÈëµ½±£´ærecovery-clockwork-6.0.4.6-find5.imgµÄĿ¼$CM¡£

$ cd $CM

3. Ö´ÐÐÒÔÏÂÃüÁîÈÃOPPO Find 5ÖØÆô£¬²¢ÇÒ½øÈëFastbootģʽ¡£

$ adb reboot bootloader

4. ¿ÉÒÔ¿´µ½OPPO Find 5Í£ÁôÔÚFastboot½çÃæÉÏ£¬Ö´ÐÐÒÔÏÂÃüÁîÈ·±£fastboot¹¤¾ßÄܹ»Á¬½Óµ½OPPO Find 5¡£

$ fastboot devices

Èç¹ûÄܹ»Á¬½Ó£¬ÄÇôÉÏÊöÃüÁ»áÊä³öÒ»´®±êʶOPPO Find 5µÄID¡£

5. Ë¢ÈëÎÒÃǸղÅÏÂÔØµÄRecovery¡£

$ fastboot flash recovery recovery-clockwork-6.0.4.6-find5.img

6. ÌáʾˢÈë³É¹¦ºó£¬Ö´ÐÐÒÔÏÂÃüÁîÕý³£ÖØÆôÊÖ»ú¡£

$ fastboot reboot

Èç¹ûÒ»ÇÐÕý³££¬ÊÖ»ú½«½øÈëµ½Ô­À´µÄϵͳÖС£

¼ÌÐøÔÚÉÏÊö´ò¿ªµÄÖÕ¶ËÉÏ£¬Ë¢CM-10.1.3 ROM£¬²½ÖèÈçÏÂËùʾ£º

1. ½«ÏÂÔØºÃµÄcm-10.1.3.find5.zipÉÏ´«ÖÁOPPO Find 5µÄsdcardÉÏ

$ adb push cm-10.1.3.find5.zip /sdcard/cm-10.1.3.find5.zip

2. Ö´ÐÐÒÔÏÂÃüÁîÈÃOPPO Find 5ÖØÆô£¬²¢ÇÒ½øÈëRecoveryģʽ¡£

$ adb reboot recovery

½øÈëµ½Recoveryģʽºó£¬ÎÒÃǽ«¿´µ½ÏÔʾµÄRecovery°æ±¾ºÅΪ6.0.4.6£¬Õâ±íÃ÷ÎÒÃÇÏÖÔÚ½øÈëµÄ¾ÍÊǸղÅÎÒÃÇË¢ÈëµÄRecovery¡£

3. ÔÚË¢ÈëеÄROMǰ£¬ÎÒÃÇÏȱ¸·Ýһϵ±Ç°µÄROM£¬ÒÔ·ÀÍòһˢ»úʧ°Ü£¬¿ÉÒÔ½øÐлָ´¡£ÔÚRecovery½çÃæÖУ¬Í¨¹ýÒôÁ¿Ôö´ó/¼õС¼ü£¬Ñ¡ÖС°backup and restore¡±Ñ¡Ï°´ÏµçÔ´¼ü£¬½øÈëÏÂÒ»¸ö½çÃæ£¬Í¬ÑùÊÇͨ¹ýÒôÁ¿Ôö´ó/¼õС¼ü£¬Ñ¡ÖС°backup¡±£¬°´ÏµçÔ´¼ü£¬¾Í¿ÉÒÔ¶Ôµ±Ç°ÏµÍ³½øÐб¸·ÝÁË¡£

4. ±¸·ÝÍê³ÉÖ®ºó£¬ÎÒÃÇ»¹ÒªÇå³ýÊÖ»úÉϵÄÊý¾Ý£¬»Ö¸´ÖÁ³ö³§ÉèÖ᣻ص½Recovery½çÃæÖУ¬Í¨¹ýÒôÁ¿Ôö´ó/¼õС¼ü£¬Ñ¡ÖÐ"wipe data/factory reset"£¬°´ÏµçÔ´¼ü£¬È·ÈϺ󼴿ɽøÐÐÇå³ýÊý¾Ý£¬²¢ÇÒ»Ö¸´ÖÁ³ö³§ÉèÖá£

5. Çå³ýÊý¾ÝÍê³ÉÖ®ºó£¬Ôٻص½Recovery½çÃæÉÏ£¬Í¨¹ýÒôÁ¿Ôö´ó/¼õС¼ü£¬Ñ¡ÖС°install zip¡±Ñ¡Ï°´ÏµçÔ´¼ü£¬½øÈëÏÂÒ»¸ö½çÃæ£¬Í¬ÑùÊÇͨ¹ýÒôÁ¿Ôö´ó/¼õС¼ü£¬Ñ¡ÖС°choose zip from sdcard¡±£¬°´ÏµçÔ´¼ü£¬ÕÒµ½Ç°ÃæÎÒÃÇÉÏ´«ÖÁsdcardµÄcm-10.1.3.find5.zip£¬È·ÈÏÖ®ºó¾Í¿ÉÒÔ½øÐÐË¢»úÁË¡£

6. Ë¢»úÍê³Éºó£¬Ôٻص½Recovery½çÃæÉÏ£¬Í¨¹ýÒôÁ¿Ôö´ó/¼õС¼ü£¬Ñ¡ÖС°reboot system now¡±Ñ¡Ï°´ÏµçÔ´¼ü£¬Õý³£Æô¶¯ÏµÍ³¡£

Èç¹ûÒ»ÇÐÕý³££¬ÊÖ»ú½«½øÈëµ½¸Õ²ÅË¢ÈëµÄCM-10.1.3ϵͳÖС£

ÏÖÔÚÎÒÃǾͿÉÒÔÈ·¶¨OPPO Find 5¿ÉÒÔÕý³£ÔËÐÐCM-10.1.3µÄϵͳÁË¡£½ÓÏÂÀ´¼¤¶¯ÈËÐĵÄʱ¿Ì¾ÍÒª¿ªÊ¼ÁË£¬ÎÒÃǽ«Òª×Ô¼ºÏÂÔØºÍ±àÒëCM-10.1Ô´Â룬²¢ÇÒ½«±àÒë³öÀ´µÄRecoveryºÍROMË¢Èëµ½OPPO Find 5È¥¡£Í¬Ê±£¬ÔÚ½ÓÏÂÀ´µÄ²½ÖèÖУ¬ÎÒÃǻὫÏà¹ØµÄÔ­Àí½²Çå³þ£¬ÒÔ±ãÎÒÃÇ¿ÉÒÔ¸üºÃµØÀí½âAndroidϵͳµÄ½á¹¹£¬ÕâÒ²ÊDZ¾ÎĵÄÖØµãÖ®Ò»¡£ÒÔϼÙÉèÎÒÃǽ«CM-10.1Ô´Âë±£´æÔÚĿ¼$CMSOURCEÖУ¬²¢ÇÒÒѾ­°´ÕÕAndroid¹ÙÍøÎĵµµÄÒªÇó³õʼ»¯ºÃAndroidµÄÔ´Âë±àÒë»·¾³£¬¼´ÔÚÎÒÃǵÄUbuntu»úÆ÷Éϰ²×°ÁËÒªÇóµÄÈí¼þ£¬ÏêÇéÇë²Î¿¼£ºhttp://source.android.com/source/initializing.html¡£

1. ½øÈëµ½$CMSOURCEĿ¼ÖС£

$ cd $CMSOURCE

2. ½«µ±Ç°Ä¿Â¼³õʼΪCM-10.1·ÖÖ§Ô´ÂëµÄGit²Ö¿â¡£

$ repo init -u git://github.com/CyanogenMod/android.git -b cm-10.1

3. ÏÂÔØCM-10.1·ÖÖ§Ô´Âë¡£

$ repo sync

ÒÔÉÏÁ½²½¶¼ÊǹØÓÚAndroidÔ´Âë²Ö¿âµÄ֪ʶ£¬¿ÉÒԲο¼AndroidÔ´´úÂë²Ö¿â¼°Æä¹ÜÀí¹¤¾ßRepo·ÖÎöÒ»ÎÄ£¬ÕâÀï²»ÔÙÏêÊö¡£

4. ½øÈëµ½$CMSOURCEĿ¼ÏµÄvendor/cm×ÓĿ¼ÖУ¬²¢ÇÒÖ´ÐÐÀïÃæµÄget-prebuilts½Å±¾£¬ÓÃÀ´»ñµÃһЩԤ±àÒëµÄAPP¡£

$ ./get-prebuilts

´ò¿ª$CMSOURCE/vendor/cm/get-prebuiltsÎļþ£¬ËüµÄÄÚÈÝÈçÏÂËùʾ£º

BASEDIR=`dirname $0`
mkdir -p $BASEDIR/proprietary
# Get Android Terminal Emulator (we use a prebuilt so it can update from the Market)
curl -L -o $BASEDIR/proprietary/Term.apk -O -L http://jackpal.github.com/Android-Terminal-Emulator/downloads/Term.apk
unzip -o -d $BASEDIR/proprietary $BASEDIR/proprietary/Term.apk lib/*

ÎÒÃÇ¿ÉÒÔ·¢ÏÖ£¬Êµ¼ÊÉÏÕâÀïÖ»ÊÇÈ¥ÏÂÔØÒ»¸ö½Ð×öAndroid Terminal EmulatorµÄAPP£¬µØÖ·ÊÇhttp://jackpal.github.com/Android-Terminal-Emulator/downloads/Term.apk¡£Õâ¸öAPP×îÖÕ»á°üº¬ÔÚÎÒÃÇ×Ô¼º±àÒë³öÀ´µÄROM¡£ËüÓÃÀ´AndroidÊÖ»úÉÏÄ£Äâ³öÒ»¸öÖÕ¶ËÀ´£¬È»ºóÎÒÃǾͿÉÒÔÏñÔÚLinuxÖ÷»úÉÏÒ»ÑùÖ´ÐÐһЩ³£ÓõÄLinuxÃüÁî¡£ÊDz»ÊǺܿáÄØ£¿Ô­À´AndroidÊÖ»ú²»µ¥Ö¹¿ÉÒÔÔËÐÐÎÒÃdz£¼ûµÄAPP£¬»¹¿ÉÒÔÔËÔËÎÒÃdz£ÓõÄLinuxÃüÁî¡£¹ØÓÚÕâ¸öAndroid Terminal EmulatorµÄ°²×°ºÍ½éÉÜ£¬²Î¿ÉÒÔÕâÀhttps://github.com/jackpal/Android-Terminal-Emulator¡£´ËÍ⣬Õâ¸öAndroid Terminal Emulator»¹¿ÉÒÔÅäºÏÁíÍâÒ»¸ö·â×°ÁËbusyboxµÄkbox¹¤¾ß£¬ÓÃÀ´ÔÚAndroidÊÖ»úÉÏ»ñµÃ¸ü¶àµÄLinux³£ÓÃÃüÁkboxµÄ°²×°ºÍ½éÉÜ£¬¿ÉÒԲο¼ÕâÀhttp://kevinboone.net/kbox2_install.html

5. »Øµ½$CMSOURCEĿ¼ÖУ¬½«build×ÓĿ¼ÏµÄenvsetup.sh½Å±¾¼ÓÔØµ½µ±Ç°ÖÕ¶ËÀ´¡£

$ source build/envsetup.sh

²Î¿¼Android±àÒëϵͳ»·¾³³õʼ»¯¹ý³Ì·ÖÎöÒ»ÎÄ£¬envsetup.sh½Å±¾¼ÓÔØµ½µ±Ç°Öն˺ó£¬ÎÒÃǾͿÉÒÔ»ñµÃһϵÁÐÓëAndroid±àÒëϵͳÏà¹ØµÄÃüÁÀýÈçlunch/m/mm/mmm£¬ÒÔ¼°ÏÂÒ»²½ÒªÖ´ÐеÄbreakfastÃüÁî¡£

6. ΪOPPO Find 5ÏÂÔØÏà¹ØµÄÔ´Âë¡£

$ breakfast find5

ÔÚAndroid±àÒëϵͳ¼òÒª½éÉܺÍѧϰ¼Æ»®Õâ¸öϵÁеÄÎÄÕÂÖУ¬ÎÒÃÇÌáµ½£¬ÔÚ±àÒëAndroidµÄ¹Ù·½Ô´Âë֮ǰ£¬ÎÒÃÇÐèÒªÖ´ÐÐÒ»¸ölunchÃüÁîÀ´ÎªÎÒÃǵÄÄ¿±êÉ豸³õʼ»¯±àÒë»·¾³¡£Õâ¸ölunchÃüÁîÊÇÓÉAndroid¹Ù·½Ô´ÂëµÄenvsetup.sh½Å±¾ÌṩµÄ¡£CMÐÞ¸Äenvsetup.sh½Å±¾£¬¶îÍâÌṩÁËÒ»¸öbreakfastÃüÁÓÃÀ´´ÓÍøÉÏѰÕÒÖ¸¶¨µÄÉ豸Ïà¹ØµÄÔ´Â룬ÒÔ±ãÎÒÃÇ¿ÉÒÔΪ¸ÃÉ豸±àÒë³öÄÜÔËÐеÄROMÀ´¡£

´ò¿ªenvsetup.shÎļþ£¬²é¿´breakfastµÄʵÏÖ£º

function breakfast()
{
target=$1
CM_DEVICES_ONLY="true"
unset LUNCH_MENU_CHOICES
add_lunch_combo full-eng
for f in `/bin/ls vendor/cm/vendorsetup.sh 2> /dev/null`
do
echo "including $f"
. $f
done
unset f
if [ $# -eq 0 ]; then
# No arguments, so let's have the full menu
lunch
else
echo "z$target" | grep -q "-"
if [ $? -eq 0 ]; then
# A buildtype was specified, assume a full device name
lunch $target
else
# This is probably just the CM model name
lunch cm_$target-userdebug
fi
fi
return $?
}

º¯ÊýbreakfastÖ÷ÒªÊÇ×öÁËÒÔÏÂÁ½¼þÊÂÇé¡£

µÚÒ»¼þÊÂÇéÊǼì²évendor/cmĿ¼ÏÂÊÇ·ñ´æÔÚÒ»¸övendorsetup.shÎļþ¡£Èç¹û´æÔڵϰ£¬¾Í½«Ëü¼ÓÔØµ½µ±Ç°ÖÕ¶ËÀ´¡£×¢Ò⣬ÕâÀïÊÇͨ¹ýlsÃüÁîÀ´¼ì²éÎļþendor/cm/vendorsetup.shÊÇ·ñ´æÔڵġ£Èç¹û²»´æÔڵϰ£¬±ê×¼Êä³ö¾ÍΪ¿Õ£¬¶ø´íÎóÐÅÏ¢»áÖØ¶¨ÏòÖÁ/dev/null¡£Èç¹û´æÔڵϰ£¬×Ö·û´®¡°endor/cm/vendorsetup.sh¡±¾Í»áÊä³öµ½±ê×¼Êä³öÀ´£¬Ò²¾ÍÊDZäÁ¿fµÄÖµ»áµÈÓÚ¡°endor/cm/vendorsetup.sh¡±¡£

½ÓÏÂÀ´ÎÒÃǾͿ´¿´Îļþendor/cm/vendorsetup.shµÄÄÚÈÝ£º

for combo in $(curl -s https://raw.github.com/CyanogenMod/hudson/master/cm-build-targets 
| sed -e 's/#.*$//' | grep cm-10.1 | awk {'print $1'})
do
add_lunch_combo $combo
done

ËüËù×öµÄ¹¤×÷¾ÍÊǽ«https://raw.github.com/CyanogenMod/hudson/master/cm-build-targetsµÄÄÚÈÝÏÂÔØ»ØÀ´£¬²¢ÇÒÈ¥µôÆäÖеĿÕÐУ¬×îºó½«º¬ÓÐ"cm-10.1"µÄÐеĵÚ1ÁÐÈ¡³öÀ´£¬²¢ÇÒͨ¹ýadd_lunch_comboÃüÁÆä¼ÓÈëµ½Android±àÒëϵͳµÄlunch²Ëµ¥È¥¡£

´Óhttps://raw.github.com/CyanogenMod/hudson/master/cm-build-targetsÏÂÔØ»ØÀ´µÄÊǹٷ½CMËùÖ§³ÖµÄ»úÐÍÁÐ±í£¬¸ñʽΪcm_<product>-<variant> <version>£¬ÒÔÏÂÁгöµÄÊDz¿·ÖÄÚÈÝ£º

# CM build target list
# <lunchcombo> <branch> [period: "D"aily, "W"eekly or "M"onthly]
# Absence of a period indicates Daily (the default)
cm_a700-userdebug cm-11.0
cm_acclaim-userdebug cm-11.0
cm_amami-userdebug cm-11.0
cm_anzu-userdebug jellybean M
cm_apexqtmo-userdebug cm-11.0
cm_aries-userdebug cm-11.0
cm_captivatemtd-userdebug cm-11.0
......

Óɴ˿ɼû£¬Ö´Ðнű¾endor/cm/vendorsetup.shÖ®ºó£¬cm-10.1ËùÖ§³ÖµÄ»úÐ;ͻáÔö¼Óµ½lunch²Ëµ¥ÖÐÈ¥¡£

»Øµ½º¯ÊýbreakfastÖУ¬ËüËù×öµÄµÚ¶þ¼þÊÂÇéÊǼì²éÖ´Ðк¯ÊýÊÇ·ñ´øÓвÎÊý£¬¼´±äÁ¿targetµÄÖµÊÇ·ñµÈÓÚ¿Õ¡£Èç¹û±äÁ¿targetµÄÖµ²»µÈÓÚ¿Õ£¬²¢ÇÒËüµÄÖµÊÇ<product>-<variant>µÄÐÎʽ£¬ÄÇô¾ÍÖ±½ÓÒÔËüΪ²ÎÊý£¬µ÷ÓÃlunchº¯Êý¡£·ñÔòµÄ»°£¬¾ÍÒÔcm_$target-userdebugΪ²ÎÊý£¬µ÷ÓÃlunchº¯Êý¡£

ÔÚÕâÒ»²½ÖУ¬ÎÒÃǵ÷ÓÃbreakfastº¯Êýʱ£¬´«½øÀ´µÄ²ÎÊýΪfind5£¬²»ÊÇ<product>-<variant>µÄÐÎʽ£¬Òò´Ë£¬º¯Êýbreakfast×îºó»áÒÔcm_find5-userdebugΪ²ÎÊý£¬µ÷ÓÃlunchº¯Êý¡£

º¯ÊýlunchµÄʵÏÖÎÒÃÇÔÚÇ°ÃæÒ»ÆªÎÄÕÂAndroid±àÒëϵͳ»·¾³³õʼ»¯¹ý³Ì·ÖÎöÒѾ­·ÖÎö¹ýÁË£¬²»¹ýµ±Ê±·ÖÎöµÄÊÇAOSP¹Ù·½°æ±¾µÄʵÏÖ£¬CM¶ÔÆä½øÐÐÁËһЩÐ޸ģ¬Ôö¼ÓÁËһЩCM×ÔÓеÄÂß¼­£¬ÏÂÃæÎÒÃǾͿ´¿´ÕâЩÐ޸ģº

function lunch()
{
......
local product=$(echo -n $selection | sed -e "s/-.*$//")
check_product $product
if [ $? -ne 0 ]
then
# if we can't find a product, try to grab it off the CM github
T=$(gettop)
pushd $T > /dev/null
build/tools/roomservice.py $product
popd > /dev/null
check_product $product
else
build/tools/roomservice.py $product true
fi

......
}

ÕâÀïµÄ±äÁ¿selectionµÄÖµ¾ÍµÈÓÚÎÒÃÇ´«½øÀ´µÄ²ÎÊý"cm_find5-userdebug"£¬Í¨¹ýsedÃüÁ"cm_find5"ÌáÈ¡³öÀ´£¬²¢ÇÒ¸³Öµ¸ø±äÁ¿product¡£½ÓÏÂÀ´µ÷ÓÃcheck_productº¯ÊýÀ´¼ì²éµ±Ç°µÄCMÔ´ÂëÖÐÊÇ·ñÖ§³Öfind5Õâ¸öÉ豸¡£

Èç¹û²»Ö§³ÖµÄ»°£¬ÄÇôËüµÄ·µ»ØÖµ¾Í²»µÈÓÚ0£¬¼´#?²»µÈÓÚ0£¬ÄÇô½ÓÏÂÀ´¾Í»áͨ¹ýbuild/tools/roomservice.pyµ½CMÔ´Âë·þÎñÆ÷È¥¼ì²éÊÇ·ñÖ§³Öfind5Õâ¸öÉ豸¡£Èç¹ûCMÔ´Âë·þÎñÆ÷Ö§³Öfind5Õâ¸öÉ豸µÄ»°£¬ÄÇôbuild/tools/roomservice.py¾Í»á½«Óëfind5Ïà¹ØµÄÔ´ÂëÏÂÔØ»ØÀ´¡£ÕâʱºòÎÒÃǾͻᷢÏÖ±¾µØCMÔ´ÂëĿ¼ÖжàÁËÒ»¸ödevice/oppo/find5Ŀ¼¡£ÀïÃæ´æ·ÅµÄ¶¼ÊDZàÒëfind5µÄROMʱËùÒªÓõÄÎļþ¡£

ÁíÒ»·½Ã棬Èç¹ûµ±Ç°µÄCMÔ´ÂëÖÐÒѾ­Ö§³Öfind5Õâ¸öÉ豸£¬ÄÇôº¯ÊýlunchÒ²»áµ÷ÓÃbuild/tools/roomservice.pyÈ¥CMÔ´Âë·þÎñÆ÷¼ì²éµ±Ç°CMÔ´ÂëĿ¼ÖÐfind5É豸ÒÀÀµµÄÆäËüÔ´ÂëÊÇ·ñÓиüУ¬»òÕßÊÇ·ñÓÐеÄÒÀÀµ¡£Èç¹ûÓеϰ£¬¾Í½«ÕâЩÒÀÀµ¸üÐÂÏÂÔØ»ØÀ´¡£

½Å±¾build/tools/roomservice.pyµÄÏêϸÄÚÈÝÕâÀï¾Í²»·ÖÎöÁË£¬ÏÂÃæÖ÷ÒªÊǽâÊÍÒ»ÏÂÓëAndroidµÄÔ´Âë²Ö¿â¹ÜÀí¹¤¾ßRepoÏà¹ØµÄÂß¼­¡£¹ØÓÚAndroidµÄÔ´Âë²Ö¿â¹ÜÀí¹¤¾ßRepoµÄÏêϸ·ÖÎö£¬¿ÉÒԲο¼AndroidÔ´´úÂë²Ö¿â¼°Æä¹ÜÀí¹¤¾ßRepo·ÖÎöÒ»ÎÄ¡£

CMÔ´Âë·þÎñÆ÷·ÅÔÚgithubÉÏ£¬µØÖ·Îªhttp://github.com/CyanogenMod£¬ÉÏÃæ±£´æµÄÊÇCMÐ޸ĹýµÄAOSP¹¤³Ì¡¢CMÖ§³ÖµÄÉ豸Ïà¹ØÔ´Â빤³Ì£¨ÏÂÔØ»ØÀ´·ÅÔÚdevice/<manufacturer>/<device>Ŀ¼ÖУ©£¬ÒÔ¼°CMÖ§³ÖµÄÉ豸¶ÔÓ¦µÄÄÚºËÔ´Â빤³Ì£¨ÏÂÔØ»ØÀ´·ÅÔÚkernel/<manufacturer>/<device>Ŀ¼ÖУ©¡£

½Å±¾build/tools/roomservice.py»á¸ù¾Ý´«½øÀ´µÄµÚÒ»¸ö²ÎÊý£¬µ½CMÔ´Âë·þÎñÉϼì²éÊÇ·ñ´æÔÚÏàÓ¦µÄ¹¤³Ì¡£ÔÚÎÒÃÇÕâ¸ö³¡¾°ÖУ¬´«¸øbuild/tools/roomservice.pyµÄµÚÒ»¸ö²ÎÊýΪcm_find5¡£ÕâʱºòÇ°ÃæµÄcm_»á±»È¥µô£¬È»ºóµ½CMÔ´Âë·þÎñÉϼì²éÊÇ·ñ´æÔÚÒ»¸öandroid_device_<manufacturer>_find5µÄ¹¤³Ì¡£Èç¹û´æÔڵϰ£¬ÄÇô¾Í»á½«ËüÏÂÔØ»ØÀ´£¬±£´æÔÚdevice/<manufacturer>/find5Ŀ¼ÖС£ÕâÀïµÄ<manufacturer>¶ÔÓ¦µÄ¾ÍÊÇoppoÁË¡£

ÏÂÔØ»ØÀ´µÄÉ豸Ïà¹ØÔ´Âëʵ¼ÊÉÏÊÇ×÷ΪÊÇÒ»¸öGit²Ö¿âÀ´¹ÜÀíµÄ£¬Òò´Ë£¬½Å±¾build/tools/roomservice.py»¹ÐèÒª½«¸ÃGit²Ö¿âÄÉÈëµ½Repo²Ö¿âÈ¥¹ÜÀí£¬ÒÔ±ãÒÔºóÖ´ÐÐrepo syncÃüÁîʱ£¬¿ÉÒÔͬʱ¶ÔÕâЩÉ豸Ïà¹ØµÄÔ´Âë½øÐиüС£

´ÓAndroidÔ´´úÂë²Ö¿â¼°Æä¹ÜÀí¹¤¾ßRepo·ÖÎöÒ»ÎÄ¿ÉÒÔÖªµÀ£¬Repo²Ö¿â±£´æÔÚ.repoĿ¼ÖУ¬¶øËüËù¹ÜÀíµÄGit²Ö¿âÓÉ.repo/manifest.xmlÎļþÃèÊö¡£Îļþ.repo/manifest.xmlʵ¼ÊÉÏÖ»ÊÇÒ»¸ö·ûºÅÁ´½Ó£¬ËüÁ´½ÓÖÁ.repo/manifests/default.xmlÎļþ¡£Ä¿Â¼.repo/manifestsʵ¼ÊÉÏÒ²ÊÇÒ»¸öGit²Ö¿â£¬ÓÃÀ´ÃèÊöµ±Ç°µÄCMÔ´ÂëĿ¼¶¼ÊÇÓÉÄÄЩ¹¤³Ì¹¹³ÉµÄ£¬²¢ÇÒÕâЩ¹¤³ÌÊÇÀ´×ÔÓÚÄÄЩGitÔ¶³Ì²Ö¿âµÄ¡£

Èç¹û°´ÕÕ±ê×¼µÄRepo²Ö¿â¹ÜÀí·½·¨£¬´ÓCMÔ´Âë·þÎñÆ÷ÉÏÏÂÔØ»ØÀ´É豸Ïà¹ØÔ´ÂëÖ®ºó£¬Ó¦¸ÃÍù.repo/manifests/default.xmlÎļþÔö¼ÓÏàÓ¦µÄÃèÊö£¬ÒÔºórepo¹¤¾ß¿ÉÒÔ¶ÔÕâЩÉ豸Ïà¹ØµÄÔ´Âë½øÐйÜÀí¡£µ«ÊÇ£¬ÓÉÓÚRepo²Ö¿âÊÇÓɹٷ½Î¬»¤µÄ£¬µ±ÎÒÃÇÔÚ±¾µØÍù.repo/manifests/default.xmlÔö¼ÓÁËеÄÄÚÈÝÖ®ºó£¬Ï´ÎÖ´ÐÐrepo syncÃüÁîʱ£¬.repo/manifests/default.xmlµÄÄÚÈÝÓֻᱻ»Ö¸´ÖÁÐÞ¸ÄǰµÄÑù×Ó£¬Òò´Ë£¬ÐÞ¸Ä.repo/manifests/default.xmlÎļþÊDz»Êʺϵġ£CM²ÉÓÃÁíÍâÒ»¸ö°ì·¨£¬ÄǾÍÊÇÔÚ.repoĿ¼ÏÂÁíÍâ´´½¨Ò»¸ölocal_manifestsĿ¼£¬ÔÚÀïÃæ¿ÉÒÔËæÒâÔö¼ÓÈÎÒâÃüÃûµÄxmlÎļþ£¬Ö»ÒªÕâЩxmlÎļþµÄ¹æ·¶Óë.repo/manifests/default.xmlÎļþµÄ¹æ·¶Ò»Ö¼´¿É¡£Ö´ÐÐrepo syncÃüÁîʱ£¬Ëü¾Í»áͬʱ´Ó.repo/manifests/default.xmlºÍ.repo/local_manifestsĿ¼ÏµÄxmlÎļþÖжÁÈ¡µ±Ç°¶¼ÓÐÄÄЩԴÂ빤³ÌÐèÒª¸üС£

ʵ¼ÊÉÏ£¬ÔÚ.repo/local_manifestsĿ¼ÏµÄxmlÎļþ£¬³ýÁË¿ÉÒÔÃèÊöÐÂÔöµÄ¹¤³ÌÖ®Í⣬»¹¿ÉÒÔÃèÊöҪɾ³ýµÄ¹¤³Ì¡£ÀýÈ磬Èç¹ûÎÒÃDz»Ï뽫ijһ¸öϵͳ¹¦ÄÜ»òÕßϵͳAPP±àÒëµ½ÎÒÃÇ×Ô¼ºÖÆ×÷µÄROMÈ¥£¬ÄÇô¾Í¿ÉÒÔÔÚ.repo/local_manifestsĿ¼ÏÂÔö¼ÓÒ»¸öxmlÎļþ£¬ÀïÃæÃèÊöÎÒÃÇÐèҪɾ³ý¶ÔÓ¦µÄ¹¤³Ì¡£ÕâÑù£¬µ±ÎÒÃÇ´Ó·þÎñÆ÷ÏÂÔØ»ØÀ´ÏàÓ¦µÄ¹¤³ÌÖ®ºó£¬ËüÃǾͻáÔÚ±¾µØÖб»É¾³ý¡£ÕâÑù¾Í×öµ½Á˺ܺõ͍֯»¯±àÒ룬¶øÇÒÓÖ²»»áÓë¹Ù·½µÄÔ´Âë½á¹¹²úÉú³åÍ»¡£¹ØÓÚCMµÄLocal Manifests»úÖÆ£¬¿ÉÒԲο¼¹Ù·½Îĵµ£ºhttp://wiki.cyanogenmod.org/w/Doc:_Using_manifests¡£

½Å±¾build/tools/roomservice.py½«ÏÂÔØ»ØÀ´µÄÉ豸Ïà¹ØÔ´ÂëÄÉÈëµ½Repo²Ö¿â¹ÜÀíµÄ°ì·¨¾ÍÊÇÔÚ.repo/local_manifestsĿ¼Ï´´½¨Ò»¸öroomservice.xmlÎļþ¡£ÀýÈ磬µ±ÎÒÃÇ´ÓCMÔ´Âë·þÎñÆ÷ÏÂÔØ»ØÀ´find5Ïà¹ØµÄÉ豸ԴÂëÖ®ºó£¬¾Í¿ÉÒÔ¿´µ½ÔÚroomservice.xmlÎļþÖп´µ½ÏàÓ¦µÄÒ»ÐÐÄÚÈÝ£º

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
......
<project name="CyanogenMod/android_device_oppo_find5" path="device/oppo/find5" remote="github" />
......
</manifest>

Õâ±íÃ÷±¾µØµÄdevice/oppo/find5Ŀ¼ÊÇÀ´×ÔÓÚÔ¶³Ì²Ö¿âgithubµÄ£¬²¢ÇÒÏà¶Ô·¾¶ÎªCyanogenMod/android_device_oppo_find5¡£
ºÃÁË£¬ÏÖÔÚÎÒÃÇÖÕÓÚ½«OPPO Find 5Ïà¹ØµÄÉ豸ԴÂëÏÂÔØ»ØÀ´ÁË£¬µ«ÊÇÔÚ±àÒë֮ǰ¡£ÐèÒª´ÓOPPO Find 5ÉÏÌáȡһЩÉ豸Ïà¹ØµÄ˽ÓÐÎļþ¡£

7. ±£³ÖOPPO Find 5¿ª»ú״̬£¬²¢ÇÒͨ¹ýUSBÁ¬½Óµ½Ubuntu 13.04ÉÏ£¬½øÐе½$CMSOURCE/device/oppo/find5Ŀ¼ÖÐ,Ö´ÐÐÒÔÏÂÃüÁîÌáÈ¡É豸˽ÓÐÎļþ¡£

$ ./extract-files.sh

½Å±¾extract-files.shµÄÄÚÈÝÈçÏÂËùʾ£º

#!/bin/sh
VENDOR=oppo
DEVICE=find5
BASE=../../../vendor/$VENDOR/$DEVICE/proprietary
rm -rf $BASE/*
for FILE in `cat proprietary-blobs.txt | grep -v ^# | grep -v ^$ | sed -e 's#^/system/##g'`; do
DIR=`dirname $FILE`
if [ ! -d $BASE/$DIR ]; then
mkdir -p $BASE/$DIR
fi
adb pull /system/$FILE $BASE/$FILE
done
./setup-makefiles.sh

Ê×ÏÈÊÇ´´½¨Ò»¸övendor/oppo/find5/proprietaryĿ¼£¬½Ó×ÅÊǶÁÈ¡Îļþproprietary-blobs.txtÖеÄÿһÐУ¬²¢ÇÒ½«Ã¿Ò»ÐÐËùÃèÊöµÄÎļþ´ÓÉ豸ÉϵÄ/systemĿ¼ÖлñÈ¡³öÀ´£¬±£´æÔÚvendor/oppo/find5/proprietary¶ÔÓ¦µÄ×ÓĿ¼ÏÂÃæ£¬×îºóÔÙÖ´ÐÐÁíÍâÒ»¸ö½Å±¾setup-makefiles.sh¡£

Îļþdevice/oppo/find5/proprietary-blobs.txt²¿·ÖµÄÄÚÈÝÈçÏÂËùʾ£º

/bin/btnvtool
/bin/ds_fmc_appd
/bin/efsks
/bin/hci_qcomm_init
/bin/ks
/bin/mm-qcamera-daemon
/bin/mpdecision
/bin/netmgrd
/bin/nv_tee
/bin/qcks
/bin/qmuxd
......

ÕâÀïÁгöµÄÎļþ·¾¶¶¼ÊÇÏà¶ÔÓÚÉ豸ÉϵÄ/systemĿ¼µÄ£¬²¢ÇÒ¶¼ÊÇÉè±¸ÌØ¶¨µÄ¡¢²»¹«¿ªÔ´ÂëµÄ£¬Òò´Ë£¬ÎÒÃÇÐèÒª´ÓÉ豸ÉÏ»ñÈ¡³öÀ´¡£

ÔÙÀ´¿´½Å±¾setup-makefiles.shµÄÄÚÈÝ£º

#!/bin/sh
VENDOR=oppo
DEVICE=find5
OUTDIR=vendor/$VENDOR/$DEVICE
MAKEFILE=../../../$OUTDIR/$DEVICE-vendor-blobs.mk
(cat << EOF) > $MAKEFILE
# Copyright (C) 2013 The CyanogenMod Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# This file is generated by device/$VENDOR/$DEVICE/setup-makefiles.sh
PRODUCT_COPY_FILES += \\
EOF
LINEEND=" \\"
COUNT=`cat proprietary-blobs.txt | grep -v ^# | grep -v ^$ | wc -l | awk {'print $1'}`
for FILE in `cat proprietary-blobs.txt | grep -v ^# | grep -v ^$ | sed -e 's#^/system##g' -e 's#^/##g'`; do
COUNT=`expr $COUNT - 1`
if [ $COUNT = "0" ]; then
LINEEND=""
fi
echo " $OUTDIR/proprietary/$FILE:system/$FILE$LINEEND" >> $MAKEFILE
done
(cat << EOF) > ../../../$OUTDIR/$DEVICE-vendor.mk
# Copyright (C) 2013 The CyanogenMod Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# This file is generated by device/$VENDOR/$DEVICE/setup-makefiles.sh
# Pick up overlay for features that depend on non-open-source files
DEVICE_PACKAGE_OVERLAYS := vendor/$VENDOR/$DEVICE/overlay
\$(call inherit-product, vendor/$VENDOR/$DEVICE/$DEVICE-vendor-blobs.mk)
EOF
(cat << EOF) > ../../../$OUTDIR/BoardConfigVendor.mk
# Copyright (C) 2013 The CyanogenMod Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# This file is generated by device/$VENDOR/$DEVICE/setup-makefiles.sh
USE_CAMERA_STUB := false
EOF

Õâ¸ö½Å±¾Ö÷Òª¾ÍÊÇÓÃÀ´ÔÚvendor/oppo/find5Ŀ¼ÏÂÉú³ÉÁ½¸öÎļþ£ºfind5-vendor-blobs.mkºÍBoardConfigVendor.mkÎļþ¡£ÕâÁ½¸öÎļþ¶¼ÊǽÓÏÂÀ´ÎªOPPO Find 5±àÒëROMʱҪÓõ½µÄ¡£

Éú³ÉµÄfind5-vendor-blobs.mkµÄ²¿·ÖÄÚÈÝÈçÏÂËùʾ£º

PRODUCT_COPY_FILES += \
vendor/oppo/find5/proprietary/bin/btnvtool:system/bin/btnvtool \
vendor/oppo/find5/proprietary/bin/ds_fmc_appd:system/bin/ds_fmc_appd \
vendor/oppo/find5/proprietary/bin/efsks:system/bin/efsks \
vendor/oppo/find5/proprietary/bin/hci_qcomm_init:system/bin/hci_qcomm_init \
vendor/oppo/find5/proprietary/bin/ks:system/bin/ks \
......

ʵ¼ÊÉϾÍÊÇͨ¹ýPRODUCT_COPY_FILES±äÁ¿¸æËß±àÒëϵͳ£¬Òª½«¸Õ²Å´ÓÉ豸ÉÏ»ñÈ¡»ØÀ´µÄÎļþ´ò°üµ½±àÒë³öÀ´µÄROMµÄsystem·ÖÇøÀïÃæÈ¥¡£

Éú³ÉµÄÎļþBoardConfigVendor.mkÖ»ÓÐ1ÐУ¬ÈçÏÂËùʾ£º

USE_CAMERA_STUB := false

ÔÚ±àÒëÉãÏñÍ·Ïà¹ØµÄ¿âÎļþʱ£¬¾Í»áµ½ÕâÀﶨÒåµÄUSE_CAMERA_STUB±äÁ¿¡£

µ½Ä¿Ç°ÎªÖ¹£¬ÎÒÃǾͷֱð´ÓCMÔ´Âë·þÎñÆ÷ºÍÄ¿±êÉ豸ÉÏ»ñÈ¡µ½Á˱àÒëOPPO Find 5µÄROMËùÐèÒªµÄÉ豸Ïà¹ØµÄÎļþÁË£¬½ÓÏÂÀ´¾Í¿ÉÒÔ¿ªÊ¼±àÒëCMÔ´ÂëÁË¡£

8. »Øµ½$CMSOUCEĿ¼ÖУ¬ÎªOPPO Find 5±àÒëROM¡£

$ brunch find5

ÃüÁîbrunchÒ²ÊÇÓÉbuild/envsetup.sh½Å±¾ÌṩµÄ£¬ËüµÄʵÏÖÈçÏÂËùʾ£º

function brunch()
{
breakfast $*
if [ $? -eq 0 ]; then
mka bacon
else
echo "No such item in brunch menu. Try 'breakfast'"
return 1
fi
return $?
}

º¯Êýbrunch×öÁËÁ½¼þÊÂÇ飺ִÐÐbreakfastÃüÁîºÍÖ´ÐÐmka baconÃüÁî¡£

Ç°ÃæÎÒÃDz»ÊÇÒѾ­Ö´ÐйýbreakfastÃüÁîÁËÂð£¿ÕâÀïΪʲôÓÖÒªÔÙÖ´ÐÐÒ»´ÎÄØ£¿´ÓÇ°ÃæµÄ·ÖÎö¿ÉÒÔÖªµÀ£¬º¯ÊýbreakfastÔÚÖ´ÐеĹý³ÌÖУ¬»áµ÷Óú¯Êýlunch£¬¶øº¯ÊýlunchÓÖ»áµ÷Óú¯Êýcheck_productÀ´¼ì²éÄ¿±êÉ豸ÊÇ·ñ´æÔÚ¡£ÒòΪÔÚǰһ²½ÖУ¬ÎÒÃÇÒѾ­½«Ä¿±êÉ豸Ïà¹ØµÄÔ´ÂëÏÂÔØ»ØÀ´ÁË£¬Òò´ËÕâʱºòÄ¿±êÉ豸Êǿ϶¨´æÔڵġ£µ±Ä¿±êÉ豸´æÔÚµÄʱºò£¬º¯Êýlunch»áͨ¹ýbuild/tools/roomservice.py½Å±¾¼ì²éÄ¿±êÉ豸Ïà¹ØµÄÔ´ÂëÊÇ·ñÒÀÀµÓÐÆäËü¹¤³Ì£¬²¢ÇÒÕâЩ¹¤³ÌÊÇ·ñÒѾ­ÏÂÔØ»ØÀ´ÁË¡£Èç¹ûÓÐÒÀÀµµÄ¹¤³Ì£¬²¢ÇÒÕâЩ¹¤³Ì»¹Ã»ÓÐÏÂÔØ»ØÀ´£¬ÄÇô¾ÍÐèÒª½«ËüÃÇÏÂÔØ»ØÀ´¡£

µ±Ä¿±êÉ豸´æÔÚµÄʱºò£¬º¯ÊýlunchÖ´ÐÐbuild/tools/roomservice.py½Å±¾µÄÐÎʽΪ£º

build/tools/roomservice.py $product true

´«µÝ¸øbuild/tools/roomservice.pyµÚ¶þ¼þ²ÎÊýΪtrue£¬±íʾҪ´¦ÀíµÄÊÇÄ¿±êÉ豸$productÒÀÀµµÄ¹¤³Ì¡£

½Å±¾build/tools/roomservice.pyÊÇÈçºÎÖªµÀÄ¿±êÉ豸ÓÐûÓÐÒÀÀµµÄ¹¤³ÌµÄÄØ£¿Ô­À´£¬ÔÚÏÂÔØ»ØÀ´µÄÉ豸ԴÂëÖУ¬ÓÐÒ»¸öcm.dependenciesÎļþ£¬ÀïÃæÃèÊöÁË×Ô¼ºËùÒÀÀµµÄ¹¤³Ì¡£ÀýÈ磬device/oppo/find5/cm.dependenciesµÄÄÚÈÝÈçÏÂËùʾ£º

[
{
"repository": "android_kernel_oppo_find5",
"target_path": "kernel/oppo/find5",
"branch": "cm-10.1"
}
]

ÉÏÃæÃèÊöµÄÊÇOPPO Find 5ËùʹÓõÄÄÚºËÔ´Â룬ËüÀ´×ÔÓÚCMÔ´Âë·þÎñÆ÷ÉϵÄandroid_kernel_oppo_find5²Ö¿âµÄcm-10.1·ÖÖ§£¬ÏÂÔØ»ØÀ´ºó±£´æÔÚkernel/oppo/find5Ŀ¼ÖС£ÕâÒâζ×ÅÎÒÃÇͨ¹ýCMÔ´Âë±àÒë³öÀ´µÄROMËùʹÓõÄÄÚºËÒ²ÊÇÓÉÎÒÃÇ×Ô¼º±àÒë³öÀ´µÄ¡£

ΪÁËÒÔºóÖ´ÐÐrepo syncÃüÁîͬ²½±¾µØÔ´Âëʱ£¬Ò²¿ÉÒÔ½«É豸ԴÂëÒÀÀµµÄ¹¤³ÌҲͬʱͬ²½»ØÀ´£¬ÎÒÃÇÐèÒª½«ÕâЩÒÀÀµ¹¤³ÌÒ²ÄÉÈëµ½Repo²Ö¿âÖÐÈ¥£¬Òò´Ë£¬µ±ÔÙ´ÎÖ´ÐйýbreakfastʹÃüÖ®ºó¡£ÎÒÃǾͿÉÒÔÔÚ.repo/local_manifests/roomservice.xmlÎļþÖз¢ÏÖÒÔÏÂÁ½ÐÐÄÚÈÝ£º

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
......
<project name="CyanogenMod/android_device_oppo_find5" path="device/oppo/find5" remote="github" />
<project name="CyanogenMod/android_kernel_oppo_find5" path="kernel/oppo/find5" remote="github" revision="cm-10.1" />
......
</manifest>

»Øµ½º¯ÊýbrunchÖУ¬Ëü½ÓÏÂÀ´Ö´ÐеÄÃüÁîmkaÒ²ÊÇÓÉbuild/envsetup.sh½Å±¾ÌṩµÄ£¬ÈçÏÂËùʾ£º

function mka() {
case `uname -s` in
Darwin)
make -j `sysctl hw.ncpu|cut -d" " -f2` "$@"
;;
*)
schedtool -B -n 1 -e ionice -n 1 make -j$(cat /proc/cpuinfo | grep "^processor" | wc -l) "$@"
;;
esac
}

Ëüʵ¼ÊÉÏÊÇͨ¹ýÒ»¸ö½Ð×öschedtoolµÄ¹¤¾ßÀ´µ÷ÓÃmake¹¤¾ß¶ÔÔ´Âë½øÐбàÒë¡£ÎÒÃÇÖªµÀ£¬±àÂëAndroidÔ´ÂëÊÇÒ»¸öÂþ³¤µÄ¹ý³Ì£¬¶øÏÖÔڵĻúÆ÷¶¼ÊǶàºËµÄ£¬ÎªÁ˼ӿìÕâ¸ö±àÒë¹ý³Ì£¬ÐèÒª½«»úÆ÷µÄËùÓкËÒÔ¶¼³ä·ÖÀûÓÃÆðÀ´¡£¹¤¾ßschedtoolËù×öµÄÊÂÇé¾ÍÊdzä·ÖµØÀû»úÆ÷µÄ¶àºËÌØÐÔÀ´Ö´ÐÐmakeÃüÁʹµÃÎÒÃÇ¿ÉÒÔ¾¡¿ì½áÊø±àÒë¹ý³Ì¡£

¹ØÓÚAndroidÔ´ÂëµÄ±àÒëÏêϸ¹ý³Ì£¬¿ÉÒԲο¼Android±àÒëϵͳ¼òÒª½éÉܺÍѧϰ¼Æ»®Õâ¸öϵÁеÄÎÄÕ£¬ÕâÀïÖ»½øÐмòÒªµÄ˵Ã÷¡£

´ÓAndroid±àÒëϵͳ¼òÒª½éÉܺÍѧϰ¼Æ»®Õâ¸öϵÁÐÒ»ÎÄ¿ÉÒÔÖªµÀ£¬AndroidµÄ±àÒëϵͳÊÇÓɺܶàµÄmkÎļþ×é³ÉµÄ£¬Ã¿Ò»¸ömkÎļþ¶¼ÊÇÒ»¸öMakefile½Å±¾Æ¬¶Î¡£ÔÚ±àÒ뿪ʼ֮ǰ£¬ÕâЩmkÎļþ»á×éºÏÔÚÒ»Æð£¬ÐγÉÒ»¸öºÜ´óµÄMakefileÎļþ£¬È»ºóÔÙ¸ù¾ÝÕâ¸öºÜ´óµÄMakefileÎļþµÄÖ¸Áî¶ÔÔ´Âë½øÐбàÒë¡£

ÓÉÕâЩmkÎļþ×é³ÉµÄMakefileÎļþÄÚÈÝ¿ÉÒÔ³éÏóΪËĸö²ã´Î£¬Èçͼ2Ëùʾ£º

ͼ2 Android±àÒëϵͳ²ã´Î

×îÏÂÃæÒ»²ãÃèÊöµÄÉ豸CPUµÄÌåϵ¼Ü¹¹£¨Architecture£©£¬AndroidÉ豸֧³Öarm¡¢x86ºÍmipsÈýÖÖCPUÌåϵ¼Ü¹¹¡£ÔÙÍùÉÏÒ»²ãÃèÊöµÄÊÇÉ豸ËùʹÓõÄоƬ£¨Board£©£¬ÀýÈçÓõÄÊǸßͨµÄоƬ£¬»¹ÊÇÈýÐǵÄоƬ£¬µÈµÈ£¬ÓëÕâЩоƬÏà¹ØµÄÔ´Îļþ´æ·ÅÔÚhardwareĿ¼Ï¡£½ÓÏÂÀ´ÔÙÍùÉϵÄÒ»²ãÊÇÉ豸£¨Device£©£¬ÃèÊöµÄÊǾßÌåµÄÓ²¼þÉ豸¡£×îÉÏÃæµÄÒ»²ãÊDzúÆ·£¨Product£©£¬ÃèÊöµÄÊÇÔÚÓ²¼þÉ豸ÉÏÔËÐеÄÈí¼þÄ£¿é¡£

ÔÚÕâÒ»²½ÖУ¬ÎÒÃÇͨ¹ýbrunchÃüÁî±àÒëCMÔ´Âëʱ£¬Ö¸¶¨µÄΨһ²ÎÊýÊÇfind5£¬ÄÇôAndroid±àÒëϵͳÊÇÈçºÎ¸ù¾ÝÕâ¸ö²ÎÊýÀ´ÕÒ°üº¬ÉÏÊöËĸö²ã´ÎµÄmkÎļþΪOPPO Find 5±àÒë³öÄÜÕý³£ÔËÐеÄROMµÄÄØ£¿

ÔÚÎÒÃÇÖ´ÐÐbreakfast»òÕßbrunchÃüÁîµÄ¹ý³ÌÖУ¬»áµ÷ÓÃÁíÍâÒ»¸öº¯Êýcheck_product¡£¸ù¾ÝAndroid±àÒëϵͳ»·¾³³õʼ»¯¹ý³Ì·ÖÎöÒ»ÎÄ£¬º¯Êýcheck_product»áͨ¹ýÁíÍâÒ»¸öº¯Êýget_build_var¼ÓÔØbuild/core/config.mkÎļþ¡£Îļþbuild/core/config.mkÓÖ»á¼ÌÐø¼ÓÔØÁíÍâÒ»¸öÎļþbuild/core/envsetup.mk¡£×îºó£¬Îļþbuild/core/envsetup.mkÓÖ»á¼ÓÔØÁíÍâÒ»¸öÎļþbuild/core/product_config.mk¡£

ÔÚbuild/core/product_config.mkÎļþµÄ¼ÓÔØ¹ý³ÌÖУ¬ÓÐÒÔϵÄÒ»¶ÎÂß¼­£º

ifneq ($(strip $(TARGET_BUILD_APPS)),)
# An unbundled app build needs only the core product makefiles.
all_product_configs := $(call get-product-makefiles,\
$(SRC_TARGET_DIR)/product/AndroidProducts.mk)
else
ifneq ($(CM_BUILD),)
all_product_configs := $(shell ls device/*/$(CM_BUILD)/cm.mk)
else
# Read in all of the product definitions specified by the AndroidProducts.mk
# files in the tree.
all_product_configs := $(get-all-product-makefiles)
endif # CM_BUILD
endif

µ±ÎÒÃDZàÒëµÄÊÇÕû¸öAndroidÔ´Âëʱ£¬±äÁ¿TARGET_BUILD_APPSµÄÖµµÈÓÚ¿Õ¡£Õâʱºò¾Í»áÅжÏÊÇ·ñÉèÖÃÁËÒ»¸öÃû³ÆÎªCM_BUILDµÄ»·¾³±äÁ¿¡£Èç¹ûÉèÖÃÁ˵ϰ£¬ÄÇô½ÓÏÂÀ´¾Í»á¼ÓÔØdevice/*/$(CM_BUILD)Ŀ¼ÏµÄcm.mkÎļþÀ´»ñµÃÄ¿±ê²úÆ·ÅäÖÃÎļþ¡£·ñÔò£¬Ê×ÏÈ»áͨ¹ýµ÷ÓÃÁíÍâÒ»¸öº¯Êýget-all-product-makefilesÀ´»ñµÃ/device/*/*Ŀ¼ÏµÄËùÓÐÃû³ÆÎªAndroidProducts.mkµÄÎļþ£¬½Ó×ÅÔÙÔÚÕâЩAndroidProducts.mkÎļþÖж¨ÒåµÄPRODUCT_MAKEFILES±äÁ¿À´»ñµÃÄ¿±ê²úÆ·ÅäÖÃÎļþ¡£

»·¾³±äÁ¿CM_BUILDµÄÖµÊÇÔÚº¯Êýcheck_productÖÐÉèÖõ쬲¢ÇÒÖ»ÓÐÔÚCMÔ´ÂëÖбàÒëʱ²Å»áÉèÖá£ÔÚAOSPÔ´Âë±àÒëʱ£¬ÊDz»»áÉèÖû·¾³±äÁ¿CM_BUILDµÄ¡£CM°æ±¾µÄcheck_productº¯ÊýʵÏÖÈçÏÂËùʾ£º

function check_product()
{
T=$(gettop)
if [ ! "$T" ]; then
echo "Couldn't locate the top of the tree. Try setting TOP." >&2
return
fi
if (echo -n $1 | grep -q -e "^cm_") ; then
CM_BUILD=$(echo -n $1 | sed -e 's/^cm_//g')
if [ `uname` == "Darwin" ]; then
export BUILD_NUMBER=$((date +%s%N ; echo $CM_BUILD; hostname) | openssl sha1 | cut -c1-10)
else
export BUILD_NUMBER=$((date +%s%N ; echo $CM_BUILD; hostname) | sha1sum | cut -c1-10)
fi
else
CM_BUILD=
fi
export CM_BUILD
CALLED_FROM_SETUP=true BUILD_SYSTEM=build/core \
TARGET_PRODUCT=$1 \
TARGET_BUILD_VARIANT= \
TARGET_BUILD_TYPE= \
TARGET_BUILD_APPS= \
get_build_var TARGET_DEVICE > /dev/null
# hide successful answers, but allow the errors to show
}

´ÓÕâÀï¾Í¿ÉÒÔ¿´³ö£¬»·¾³±äÁ¿CM_BUILDµÄֵʵ¼ÊÉϾÍÊÇÄ¿±êÉ豸µÄÃû³Æ¡£ÀýÈç£¬Ç°ÃæÎÒÃÇÖ´ÐÐbreakfastÃüÁîʱ£¬Í¨¹ýº¯Êýlunchµ÷ÓÃcheck_productº¯Êýʱ£¬´«½øÀ´µÄ²ÎÊýΪΪcm_find5£¬º¯Êýcheck_product»á½«find5ÌáÈ¡³öÀ´£¬²¢ÇÒ¸³Öµ¸ø»·¾³±äÁ¿CM_BUILD¡£ÕâÑùÔÚ¼ÓÔØbuild/core/product_config.mkÎļþʱ£¬ÕÒµ½µÄ²úÆ·ÅäÖÃÎļþ¾ÍΪdevice/*/find5/cm.mkÎļþ¡£ÔÚdeviceĿ¼ÖУ¬Ö»ÓÐoppo×ÓĿ¼°üº¬ÓÐfind5Õâ¸öĿ¼£¬Òò´Ë×îÖÕ¼ÓÔØµÄʵ¼ÊÉÏÊÇdevice/oppo/find5/cm.mkÎļþ¡£

ÎÞÂÛÊÇͨ¹ý»·¾³±äÁ¿CM_BUILDÀ´Ö±½Ó»ñµÃµÄÄ¿±ê²úÆ·ÅäÖÃÎļþ£¬»¹ÊÇͨ¹ýAndroidProducts.mkÎļþ¼ä½Ó»ñµÃµÄÄ¿±ê²úÆ·ÅäÖÃÎļþ£¬»ñµÃµÄÄ¿±ê²úÆ·ÅäÖÃÎļþ¶¼»áÖ±½Ó»òÕß¼ä½ÓµØÍ¨¹ý±äÁ¿PRODUCT_COPY_FILESºÍPRODUCT_PACKAGESÀ´É豸Ҫ°üº¬µÄÈí¼þÄ£¿é¡£

ÒÔdevice/oppo/find5/cm.mkΪÀý£¬ËüµÄ²¿·ÖÄÚÈÝÈçÏÂËùʾ£º

......
# Inherit device configuration
$(call inherit-product, device/oppo/find5/full_find5.mk)
## Device identifier. This must come after all inclusions
PRODUCT_DEVICE := find5
PRODUCT_NAME := cm_find5
PRODUCT_BRAND := Oppo
PRODUCT_MODEL := Find 5
PRODUCT_MANUFACTURER := Oppo
......

³ý¶¨ÁËһЩÉ豸Ïà¹ØµÄ±äÁ¿Ö®Í⣬Ëü»¹»á¼ÓÔØÁíÍâÒ»¸öÎļþdevice/oppo/find5/full_find5.mk£¬ºóÕߵIJ¿·ÖÄÚÈÝÈçÏÂËùʾ£º

# Inherit from hardware-specific part of the product configuration
$(call inherit-product, device/oppo/find5/device.mk)
$(call inherit-product-if-exists, vendor/oppo/find5/find5-vendor.mk)

ÔÚÎļþdevice/oppo/find5/device.mkÖУ¬ÎÒÃǾͿÉÒÔ¿´µ½PRODUCT_COPY_FILESºÍPRODUCT_PACKAGESµÄ¶¨Ò壺

PRODUCT_PACKAGES := \
lights.msm8960
PRODUCT_PACKAGES += \
charger_res_images \
charger
# Vold and Storage
PRODUCT_COPY_FILES += \
device/oppo/find5/configs/vold.fstab:system/etc/vold.fstab
# Live Wallpapers
PRODUCT_PACKAGES += \
LiveWallpapers \
LiveWallpapersPicker \
VisualizationWallpapers \
librs_jni
......

¶øÎļþvendor/oppo/find5/find5-vendor.mk»á¼ÓÔØÁíÍâÒ»¸öÎļþvendor/oppo/find5/find5-vendor-blobs.mk£¬ÈçÏÂËùʾ£º

......
$(call inherit-product, vendor/oppo/find5/find5-vendor-blobs.mk)
......

»ØÒäÇ°ÃæµÄµÚ7²½£¬ÎļþÎļþvendor/oppo/find5/find5-vendor-blobs.mkÊÇÎÒÃÇÖ´ÐÐextract-files.sh½Å±¾µÄʱºòÉú³ÉµÄ£¬ÀïÃæÍ¨¹ý±äÁ¿PRODUCT_COPY_FILES¸æËß±àÒëϵͳ½«´ÓÉ豸ÉÏ»ñµÃµÄ˽ÓÐÎļþ´ò°üµ½ÒªÖÆ×÷µÄROMÈ¥¡£

ÒÔÉϾÍÊÇProduct¼¶±ðµÄÅäÖÃÐÅÏ¢µÄ»ñÈ¡¹ý³Ì£¬½ÓÏÂÀ´ÎÒÃÇÔÙ¿´Device¡¢BoardºÍArchitecture¼¶±ðµÄÅäÖÃÐÅÏ¢µÄ»ñÈ¡¹ý³Ì¡£

º¯Êýcheck_product»áͨ¹ýÁíÍâÒ»¸öº¯Êýget_build_varÀ´¼ÓÔØbuild/core/config.mkÎļþµÄ¹ý³ÌÖУ¬»áÔÚÄ¿±ê²úÆ·¶ÔÓ¦µÄÉ豸Ŀ¼ÖÐÕÒµ½Ò»¸öÃû³ÆÎªBoardConfig.mkÎļþ£¬ÈçÏÂËùʾ£º

......
board_config_mk := \
$(strip $(wildcard \
$(SRC_TARGET_DIR)/board/$(TARGET_DEVICE)/BoardConfig.mk \
device/*/$(TARGET_DEVICE)/BoardConfig.mk \
vendor/*/$(TARGET_DEVICE)/BoardConfig.mk \
))
......

ÉÏÊöMakefile½Å±¾Æ¬¶Î»áÔÚbuild/target/board¡¢device/*¡¢vendor/*Ŀ¼ÖÐѰÕÒÒ»¸öÃû³ÆÎª$(TARGET_DEVICE)µÄ×ÓĿ¼£¬²¢ÇÒÔÚÕÒµ½µÄ×ÓĿ¼ÀïÃæ¼ÓÔØÒ»¸öÃû³ÆÎªBoardConfig.mkÎļþ£¬À´»ñµÃDevice¡¢BoardºÍArchitecture¼¶±ðµÄÅäÖÃÐÅÏ¢¡£

±äÁ¿TARGET_DEVICEÖ¸ÏòµÄ±ãÊÇÄ¿±êÉ豸µÄÃû³Æ¡£ÔÚÎÒÃÇÕâ¸ö³¡¾°ÖУ¬ËüµÄÖµ¾ÍµÈÓÚfind5£¬Òò´Ë£¬×îÖÕ»ñµÃµÄDevice¡¢BoardºÍArchitecture¼¶±ðµÄÅäÖÃÐÅÏ¢¾ÍÊÇÀ´×ÔÓÚdevice/oppo/find5/BoardConfig.mkÎļþ£¬ËüµÄ²¿·ÖÄÚÈÝÈçÏÂËùʾ£º

TARGET_CPU_ABI := armeabi-v7a
TARGET_CPU_ABI2 := armeabi
......
TARGET_ARCH := arm
......
# Bluetooth
BOARD_HAVE_BLUETOOTH := true
BOARD_HAVE_BLUETOOTH_QCOM := true
BLUETOOTH_HCI_USE_MCT := true
......
TARGET_BOARD_PLATFORM := msm8960
......
# Wifi
BOARD_HAS_QCOM_WLAN := true
BOARD_WLAN_DEVICE := qcwcn
......
# Display
TARGET_QCOM_DISPLAY_VARIANT := caf
USE_OPENGL_RENDERER := true
......
# GPS
BOARD_HAVE_NEW_QC_GPS := true
......
# Camera
COMMON_GLOBAL_CFLAGS += -DDISABLE_HW_ID_MATCH_CHECK -DQCOM_BSP_CAMERA_ABI_HACK -DNEW_ION_API
......
# Audio
BOARD_USES_ALSA_AUDIO:= true
TARGET_QCOM_AUDIO_VARIANT := caf
TARGET_USES_QCOM_MM_AUDIO := true
TARGET_USES_QCOM_COMPRESSED_AUDIO := true
BOARD_AUDIO_CAF_LEGACY_INPUT_BUFFERSIZE := true
......

´ÓÕâÀï¾Í¿ÉÒÔ¿´µ½¸÷ÖÖDevice¡¢BoardºÍArchitecture¼¶±ðµÄÅäÖÃÐÅÏ¢¡£ÀýÈ磬CPUÌåϵ¼Ü¹¹ÓÉTARGET_ARCH¡¢TARGET_CPU_ABIºÍTARGET_CPU_ABI2À´ÃèÊö¡£Ð¾Æ¬ÀàÐÍÓÉTARGET_BOARD_PLATFORMÀ´ÃèÊö£¬¶øÉ豸ÐÅÏ¢µÄÃèÊöÔò°üÀ¨Bluetooth¡¢Wifi¡¢Display¡¢GPS¡¢CameraºÍAudioµÈ¡£

ÔÚBoardConfig.mkÎļþÖÐÅäÖõıàÒëÐÅÏ¢ÊÇÔÚʲôʱºòÓõ½µÄÄØ£¿ÒÔÏÂÎÒÃǾÍÒÔTARGET_BOARD_PLATFORMΪÀý£¬ËµÃ÷ÕâЩÅäÖÃÐÅÏ¢ÔÚ±àÒëµÄ¹ý³ÌÖÐÊÇÈçºÎʹÓõġ£ÔÚAndroidÔ´ÂëÖУ¬hardwareĿ¼°üº¬¸÷ÖÖоƬÏà¹ØµÄÄ£¿éÔ´Âë¡£ÔÚÕâЩģ¿éµÄ±àÒë½Å±¾ÖУ¬¾Í»á¸ù¾ÝTARGET_BOARD_PLATFORMµÄÖµÀ´ÎªÖ¸¶¨µÄоƬ±àÒë³öÕýÈ·µÄÄ£¿éÀ´¡£

ÀýÈ磬¼ÙÉèÎÒÃÇʹÓõÄÊǸßͨоƬ£¬ÔÚËüµÄCamera HAL2Ä£¿éÔ´ÂëĿ¼hardware/qcom/camera/QCamera/HAL2/coreÖж¨ÒåµÄAndroid.mkÎļþÓÐÈçϵÄÄÚÈÝ£º

......
LOCAL_CFLAGS += -DCAMERA_ION_HEAP_ID=ION_CP_MM_HEAP_ID # 8660=SMI, Rest=EBI
LOCAL_CFLAGS += -DCAMERA_ZSL_ION_HEAP_ID=ION_CP_MM_HEAP_ID
LOCAL_CFLAGS+= -DHW_ENCODE
LOCAL_CFLAGS+= -DUSE_NEON_CONVERSION
ifeq ($(TARGET_BOARD_PLATFORM),msm8960)
LOCAL_CFLAGS += -DCAMERA_GRALLOC_HEAP_ID=GRALLOC_USAGE_PRIVATE_MM_HEAP
LOCAL_CFLAGS += -DCAMERA_GRALLOC_FALLBACK_HEAP_ID= GRALLOC_USAGE_PRIVATE_IOMMU_HEAP
LOCAL_CFLAGS += -DCAMERA_ION_FALLBACK_HEAP_ID=ION_IOMMU_HEAP_ID
LOCAL_CFLAGS += -DCAMERA_ZSL_ION_FALLBACK_HEAP_ID= ION_IOMMU_HEAP_ID
LOCAL_CFLAGS += -DCAMERA_GRALLOC_CACHING_ID=0
else ifeq ($(TARGET_BOARD_PLATFORM),msm8660)
LOCAL_CFLAGS += -DCAMERA_GRALLOC_HEAP_ID= GRALLOC_USAGE_PRIVATE_CAMERA_HEAP
LOCAL_CFLAGS += -DCAMERA_GRALLOC_FALLBACK_HEAP_ID= GRALLOC_USAGE_PRIVATE_CAMERA_HEAP # Don't Care
LOCAL_CFLAGS += -DCAMERA_ION_FALLBACK_HEAP_ID=ION_CAMERA_HEAP_ID # EBI
LOCAL_CFLAGS += -DCAMERA_ZSL_ION_FALLBACK_HEAP_ID= ION_CAMERA_HEAP_ID
LOCAL_CFLAGS += -DCAMERA_GRALLOC_CACHING_ID=0
else
LOCAL_CFLAGS += -DCAMERA_GRALLOC_HEAP_ID= GRALLOC_USAGE_PRIVATE_ADSP_HEAP
LOCAL_CFLAGS += -DCAMERA_GRALLOC_FALLBACK_HEAP_ID= GRALLOC_USAGE_PRIVATE_ADSP_HEAP # Don't Care
LOCAL_CFLAGS += -DCAMERA_GRALLOC_CACHING_ID= GRALLOC_USAGE_PRIVATE_UNCACHED #uncached
endif
......

ÉÏÊöMakefile½Å±¾Æ¬¶Î»á¸ù¾ÝTARGET_BOARD_PLATFORMµÄÖµ²»Í¬¶øÉèÖò»Í¬µÄLOCAL_CFLAGSÖµ£¬ÒÔ±ã¿ÉÒÔΪĿ±êÉ豸±àÒë³öÕýÈ·µÄHALÄ£¿éÀ´¡£

ÕâÒ»²½Ö´ÐÐÍê³ÉÖ®ºó£¬Ò²¾ÍÊDZàÒëÍê³ÉÖ®ºó£¬ÎÒÃǾͿÉÒÔÔÚout/target/product/find5Ŀ¼Öп´µ½Á½¸öÎļþ£ºrecovery.imgºÍcm-10.1-xxxxxxxx-UNOFFICIAL-find5.zip¡£ÆäÖУ¬recovery.imgÊÇRecoveryÎļþ£¬¶øcm-10.1-xxxxxxxx-UNOFFICIAL-find5.zipÊÇROMÎļþ¡£ÓÐÁËÕâÁ½¸öÎļþÖ®ºó£¬ÎÒÃǾͿÉÒÔ²ÎÕÕÇ°ÃæµÄ½éÉÜ£¬½«ËüÃÇË¢ÈëÎÒÃǵÄOPPO Find 5ÊÖ»úÉÏÈ¥ÁË¡£µ±Ë¢ÈëÍê³É£¬²¢ÇÒ¿ÉÒÔÕý³£ÔËÐÐÖ®ºó£¬ÏÖÔÚÎÒÃǵÄÊÖ»úÉÏÃæÔËÐеÄRecoveryºÍROM¶¼ÊÇÎÒÃÇ×Ô¼ºÇ×ÊÖ´òÔìµÄÁË£¡

ÖÁ´Ë£¬ÎÒÃǾͽéÉÜÍê³ÉCMµÄË¢»ú¹ý³ÌºÍÔ­ÀíÁË£¬ÊDz»ÊǾõµÃ×Ô¼ºÇ×ÊÖÈ¥±àÒëÒ»¸öROMÊÇÒ»¼þºÜÈÝÒ×µÄÊÂÄØ£¿Æäʵ²»È»¡£ÎÒÃÇÉÏÃæ±àÒëµÄROMÖ®ËùÒÔÕâôÇáËÉ£¬ÊÇÒòΪCMÒѾ­ÎªÎÒÃÇ×öÁ˺ܶàµÄ¹¤×÷£¬ÄǾÍÊÇÒѾ­ÔÚCMÔ´Âë·þÎñÆ÷ÉÏ×¼±¸ºÃÁËËùÓÐÉ豸Ïà¹ØµÄÔ´Â룬Ҳ¾ÍÊÇÎÒÃÇÏÂÔØ»ØÀ´Ö®ºó´æ·ÅÔÚdeviceĿ¼ÏµÄÔ´Âë¡£Èç¹ûÎÒÃÇÊÖÍ·ÉÏÓÐÒ»²¿CM¹Ù·½²»Ö§³ÖµÄÊÖ»ú£¬ÄÇôCMÔ´Âë·þÎñÆ÷ÉÏÊÇûÓжÔÓ¦µÄÉ豸ԴÂë´æÔڵģ¬ÕâʱºòÎÒÃǾÍÐèÒª×Ô¼ºÈ¥¿ª·¢¶ÔÓ¦µÄÉ豸ԴÂëÁË¡£ÕâÊÇÒ»¸ö¼è¿àµÄ¹ý³Ì£¬ÐèÒª²»Í£µÄµ÷ÊÔ¡¢µ÷ÊÔ¡¢ÔÙµ÷ÊÔ£¬Ò²ÐíÒª»¨Éϼ¸ÖÜ£¬ÉõÖÁÒ»¸öÔÂÀ´Íê³ÉÕâ¸ö¹¤×÷¡£µ±È»£¬Õâ¸ö¹ý³ÌÒ²ÊÇÓÐһЩ¾­ÑéºÍ¼¼ÇÉ¿ÉÒԲο¼µÄ£¬¾ßÌå¿ÉÒԲο¼CMÎĵµ£ºhttp://wiki.cyanogenmod.org/w/Doc:_porting_intro¡£ÕâÀï¾Í²»ÔÙÏêÊö¡£

×îºó£¬±¾ÎÄÖ®ËùÒÔÑ¡ÔñCMÕâ¸öµÚÈý·½ROMºÍÔ´ÂëÀ´½²½â£¬ÊÇÒòΪCM¹Ù·½ÌṩÁ˺ÜÈ«ÃæµÄ×ÊÁϹ©ÎÒÃÇȥѧϰÈçºÎ»ùÓÚAOSPÔ´ÂëÀ´ÖÆ×÷ROM£¬ÕâÑù¿ÉÒÔʹÎÒÃÇÉÙ×ߺܶàÍä·£¡ÁíÍ⣬ÉÏÃæËùÊöµÄROM¹ý³Ì¶¼ÊDzο¼ÁËCM¹Ù·½ÎĵµµÄ¡£¸ü¶àµÄCMË¢ROM½Ì³Ì£¬¿ÉÒԲο¼£ºhttp://wiki.cyanogenmod.org/w/Development¡£¸ü¶àÐÅÏ¢Ò²¿ÉÒÔ¹Ø×¢ÀÏÂÞµÄÐÂÀË΢²©£ºhttp://weibo.com/shengyangluo¡£

   
4814 ´Îä¯ÀÀ       32
 
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
 
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ
×îл¼Æ»®
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢ 6-12[ÏÃÃÅ]
È˹¤ÖÇÄÜ.»úÆ÷ѧϰTensorFlow 6-22[Ö±²¥]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 6-30[±±¾©]
ǶÈëʽÈí¼þ¼Ü¹¹-¸ß¼¶Êµ¼ù 7-9[±±¾©]
Óû§ÌåÑé¡¢Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À 7-25[Î÷°²]
ͼÊý¾Ý¿âÓë֪ʶͼÆ× 8-23[±±¾©]

androidÈË»ú½çÃæÖ¸ÄÏ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
AndroidÊÖ»ú¿ª·¢£¨¶þ£©
AndroidÊÖ»ú¿ª·¢£¨Èý£©
AndroidÊÖ»ú¿ª·¢£¨ËÄ£©
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖ̽ÌÖ
ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
ÊÖ»úÈí¼þ×Ô¶¯»¯²âÊÔÑо¿±¨¸æ


Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
AndroidÓ¦Óÿª·¢
Androidϵͳ¿ª·¢
ÊÖ»úÈí¼þ²âÊÔ
ǶÈëʽÈí¼þ²âÊÔ
AndroidÈí¡¢Ó²¡¢ÔÆÕûºÏ


ÁìÏÈIT¹«Ë¾ android¿ª·¢Æ½Ì¨×î¼Ñʵ¼ù
±±¾© Android¿ª·¢¼¼Êõ½ø½×
ijÐÂÄÜÔ´ÁìÓòÆóÒµ Android¿ª·¢¼¼Êõ
ijº½Ì칫˾ Android¡¢IOSÓ¦ÓÃÈí¼þ¿ª·¢
°¢¶û¿¨ÌØ LinuxÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ