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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Android×é¼þ»¯·½°¸
 
À´Ô´£º²©¿Í ·¢²¼ÓÚ£º 2017-7-13
  2548  次浏览      27
 

1¡¢ÎªÊ²Ã´ÒªÏîÄ¿×é¼þ»¯

Ëæ×ÅAPP°æ±¾²»¶ÏµÄµü´ú£¬Ð¹¦ÄܵIJ»¶ÏÔö¼Ó£¬ÒµÎñÒ²»á±äµÄÔ½À´Ô½¸´ÔÓ£¬APPÒµÎñÄ£¿éµÄÊýÁ¿ÓпÉÄÜ»¹»á¼ÌÐøÔö¼Ó£¬¶øÇÒÿ¸öÄ£¿éµÄ´úÂëÒ²±äµÄÔ½À´Ô½¶à£¬ÕâÑù·¢Õ¹ÏÂÈ¥µ¥Ò»¹¤³ÌϵÄAPP¼Ü¹¹ÊƱػáÓ°Ï쿪·¢Ð§ÂÊ£¬Ôö¼ÓÏîÄ¿µÄά»¤³É±¾£¬Ã¿¸ö¹¤³Ìʦ¶¼ÒªÊìϤÈç´ËÖ®¶àµÄ´úÂ룬½«ºÜÄѽøÐжàÈËЭ×÷¿ª·¢£¬¶øÇÒAndroidÏîÄ¿ÔÚ±àÒë´úÂëµÄʱºòµçÄÔ»á·Ç³£¿¨£¬ÓÖÒòΪµ¥Ò»¹¤³ÌÏ´úÂëñîºÏÑÏÖØ£¬Ã¿ÐÞ¸ÄÒ»´¦´úÂëºó¶¼ÒªÖØÐ±àÒë´ò°ü²âÊÔ£¬µ¼Ö·dz£ºÄʱ£¬×îÖØÒªµÄÊÇÕâÑùµÄ´úÂëÏëÒª×öµ¥Ôª²âÊÔ¸ù±¾ÎÞ´ÓÏÂÊÖ£¬ËùÒÔ±ØÐëÒªÓиüÁé»îµÄ¼Ü¹¹´úÌæ¹ýÈ¥µ¥Ò»µÄ¹¤³Ì¼Ü¹¹¡£

ÉÏͼÊÇĿǰ±È½ÏÆÕ±éʹÓõÄAndroid APP¼¼Êõ¼Ü¹¹£¬ÍùÍùÊÇÔÚÒ»¸ö½çÃæÖдæÔÚ´óÁ¿µÄÒµÎñÂß¼­£¬¶øÒµÎñÂß¼­Öгä³âן÷ÖÖÍøÂçÇëÇó¡¢Êý¾Ý²Ù×÷µÈÐÐΪ£¬Õû¸öÏîÄ¿ÖÐҲûÓÐÄ£¿éµÄ¸ÅÄֻÓмòµ¥µÄÒÔÒµÎñÂß¼­»®·ÖµÄÎļþ¼Ð£¬²¢ÇÒÒµÎñÖ®¼äÒ²ÊÇÖ±½ÓÏ໥µ÷Óᢸ߶ÈñîºÏÔÚÒ»ÆðµÄ£»

ÉÏͼµ¥Ò»¹¤³ÌÄ£ÐÍϵÄÒµÎñ¹ØÏµ£¬×ܵÄÀ´Ëµ¾ÍÊÇ£ºÄãÖÐÓÐÎÒ£¬ÎÒÖÐÓÐÄ㣬Ï໥ÒÀÀµ£¬ÎÞ·¨·ÖÀë¡£
È»¶øËæ×ŲúÆ·µÄµü´ú£¬ÒµÎñÔ½À´Ô½¸´ÔÓ£¬ËæÖ®´øÀ´µÄÊÇÏîÄ¿½á¹¹¸´ÔӶȵļ«¶ÈÔö¼Ó£¬´ËʱÎÒÃÇ»áÃæÁÙÈçϼ¸¸öÎÊÌ⣺

1¡¢Êµ¼ÊÒµÎñ±ä»¯·Ç³£¿ì£¬µ«Êǵ¥Ò»¹¤³ÌµÄÒµÎñÄ£¿éñîºÏ¶ÈÌ«¸ß£¬Ç£Ò»·¢¶ø¶¯È«Éí£»

2¡¢¶Ô¹¤³ÌËù×öµÄÈκÎÐ޸ͼ±ØÐëÒª±àÒëÕû¸ö¹¤³Ì£»

3¡¢¹¦ÄܲâÊÔºÍϵͳ²âÊÔÿ´Î¶¼Òª½øÐУ»

4¡¢ÍŶÓЭͬ¿ª·¢´æÔڽ϶àµÄ³åÍ».²»µÃ²»»¨·Ñ¸ü¶àµÄʱ¼äÈ¥¹µÍ¨ºÍЭµ÷£¬²¢ÇÒÔÚ¿ª·¢¹ý³ÌÖУ¬ÈκÎһλ³ÉԱû°ì·¨×¨×¢ÓÚ×Ô¼ºµÄ¹¦Äܵ㣬ӰÏ쿪·¢Ð§ÂÊ£»

5¡¢²»ÄÜÁé»îµÄ¶ÔÒµÎñÄ£¿é½øÐÐÅäÖúÍ×é×°£»

ΪÁËÂú×ã¸÷¸öÒµÎñÄ£¿éµÄµü´ú¶ø±Ë´Ë²»ÊÜÓ°Ï죬¸üºÃµÄ½â¾öÉÏÃæÕâÖÖÈÃÈËÍ·ÌÛµÄÒÀÀµ¹ØÏµ£¬¾ÍÐèÒªÕû¸ÄAppµÄ¼Ü¹¹¡£

2¡¢AndroidÏîÄ¿µÄÕû¸Ä·½Ïò

ÉÏͼÊÇ×é¼þ»¯¹¤³ÌÄ£ÐÍ£¬ÎªÁË·½±ãÀí½âÕâÕżܹ¹Í¼£¬ÏÂÃæ»áÁоÙһЩ×é¼þ»¯¹¤³ÌÖÐÓõ½µÄÃû´ÊµÄº¬Ò壺

Ãû´Ê º¬Òå
¼¯³ÉģʽËùÓеÄÒµÎñ×é¼þ±»¡°app¿Ç¹¤³Ì¡±ÒÀÀµ£¬×é³ÉÒ»¸öÍêÕûµÄAPP£»
×é¼þģʽ¿ÉÒÔ¶ÀÁ¢¿ª·¢ÒµÎñ×é¼þ£¬Ã¿Ò»¸öÒµÎñ×é¼þ¾ÍÊÇÒ»¸öAPP£»
app¿Ç¹¤³Ì¸ºÔð¹ÜÀí¸÷¸öÒµÎñ×é¼þ£¬ºÍ´ò°üapk£¬Ã»ÓоßÌåµÄÒµÎñ¹¦ÄÜ£»
ÒµÎñ×é¼þ¸ù¾Ý¹«Ë¾¾ßÌåÒµÎñ¶ø¶ÀÁ¢ÐγÉÒ»¸öµÄ¹¤³Ì£»
¹¦ÄÜ×é¼þÌṩ¿ª·¢APPµÄijЩ»ù´¡¹¦ÄÜ£¬ÀýÈç´òÓ¡ÈÕÖ¾¡¢Ê÷״ͼµÈ£»
Main×é¼þÊôÓÚÒµÎñ×é¼þ£¬Ö¸¶¨APPÆô¶¯Ò³Ãæ¡¢Ö÷½çÃæ£»
Common×é¼þÊôÓÚ¹¦ÄÜ×é¼þ£¬Ö§³ÅÒµÎñ×é¼þµÄ»ù´¡£¬Ìṩ¶àÊýÒµÎñ×é¼þÐèÒªµÄ¹¦ÄÜ£¬ÀýÈçÌá¹©ÍøÂçÇëÇó¹¦ÄÜ£»

Android APPÒµÎñ×é¼þ»¯¼Ü¹¹Õû¸ÄµÄ·½Ïò¾ÍÊǸæ±ð½á¹¹Ó·Ö×£¬Èø÷¸öÒµÎñ±äµÃÏà¶Ô¶ÀÁ¢£¬ÒµÎñ×é¼þÔÚ×é¼þģʽÏ¿ÉÒÔ¶ÀÁ¢¿ª·¢£¬¶øÔÚ¼¯³ÉģʽÏÂÓÖ¿ÉÒÔ±äΪarr°ü¼¯³Éµ½¡°app¿Ç¹¤³Ì¡±ÖУ¬×é³ÉÒ»¸öÍêÕû¹¦ÄܵÄAPP£»

ÕâÊÇ×é¼þ»¯¹¤³ÌÄ£ÐÍϵÄÒµÎñ¹ØÏµ£¬ÒµÎñÖ®¼ä½«²»ÔÙÖ±½ÓÒýÓúÍÒÀÀµ£¬¶øÊÇͨ¹ý¡°Â·ÓÉ¡±ÕâÑùÒ»¸öÖÐתվ¼ä½Ó²úÉúÁªÏµ£¬¶øAndroidÖеÄ·ÓÉʵ¼Ê¾ÍÊǶÔURL SchemeµÄ·â×°£»

Èç´Ë¹æÄ£´óµÄ¼Ü¹¹Õû¸ÄÐèÒª¸¶³ö¸ü¸ßµÄ³É±¾£¬»¹»áÉæ¼°Ò»Ð©Ç±ÔڵķçÏÕ£¬µ«ÊÇÕû¸ÄºóµÄ¼Ü¹¹Äܹ»´øÀ´ºÜ¶àºÃ´¦£º

1¡¢¼Ó¿ìÒµÎñµü´úËÙ¶È£¬¸÷¸öÒµÎñÄ£¿é×é¼þ¸ü¼Ó¶ÀÁ¢£¬²»ÔÙ³öÏÖÒµÎññîºÏÇé¿ö£»
2¡¢Îȶ¨µÄ¹«¹²Ä£¿é²ÉÓÃÒÀÀµ¿â·½Ê½£¬Ìṩ¸ø¸÷¸öÒµÎñÏßʹÓ㬼õÉÙÖØ¸´¿ª·¢ºÍά»¤¹¤×÷Á¿£»
3¡¢µü´úƵ·±µÄÒµÎñÄ£¿é²ÉÓÃ×é¼þ·½Ê½£¬¸÷ÒµÎñÑз¢¿ÉÒÔ»¥²»¸ÉÈÅ¡¢ÌáÉýЭ×÷ЧÂÊ£¬²¢¿ØÖƲúÆ·ÖÊÁ¿£»
4¡¢ÎªÐÂÒµÎñËæÊ±¼¯³ÉÌṩÁË»ù´¡£¬ËùÓÐÒµÎñ¿ÉÉÏ¿ÉÏ£¬Áé»î¶à±ä£»
5¡¢½µµÍÍŶӳÉÔ±ÊìϤÏîÄ¿µÄ³É±¾£¬½µµÍÏîÄ¿µÄά»¤ÄѶȣ»
6¡¢¼Ó¿ì±àÒëËÙ¶È£¬Ìá¸ß¿ª·¢Ð§ÂÊ£»
7¡¢¿ØÖÆ´úÂëȨÏÞ£¬½«´úÂëµÄȨÏÞϸ·Öµ½¸üСµÄÁ£¶È£»
8¡¢×îÖØÒªµÄÊÇ¿ÉÒÔ½µµÍ¹«Ë¾µÄ¾­Óª³É±¾¡£

3¡¢×é¼þ»¯ÊµÊ©Á÷³Ì

1£©×é¼þģʽºÍ¼¯³ÉģʽµÄת»»

Android StudioÖеÄModuleÖ÷ÒªÓÐÁ½ÖÖÊôÐÔ£¬·Ö±ðΪ£º

1¡¢applicationÊôÐÔ£¬¿ÉÒÔ¶ÀÁ¢ÔËÐеÄAndroid³ÌÐò£¬Ò²¾ÍÊÇÎÒÃǵÄAPP£»

apply plugin: ¡®com.android.application¡¯

2¡¢libraryÊôÐÔ£¬²»¿ÉÒÔ¶ÀÁ¢ÔËÐУ¬Ò»°ãÊÇAndroid³ÌÐòÒÀÀµµÄ¿âÎļþ£»

apply plugin: ¡®com.android.library¡¯

ModuleµÄÊôÐÔÊÇÔÚÿ¸ö×é¼þµÄ build.gradle ÎļþÖÐÅäÖõ쬵±ÎÒÃÇÔÚ×é¼þģʽ¿ª·¢Ê±£¬ÒµÎñ×é¼þÓ¦´¦ÓÚapplicationÊôÐÔ£¬ÕâʱµÄÒµÎñ×é¼þ¾ÍÊÇÒ»¸ö Android App£¬¿ÉÒÔ¶ÀÁ¢¿ª·¢ºÍµ÷ÊÔ£»¶øµ±ÎÒÃÇת»»µ½¼¯³Éģʽ¿ª·¢Ê±£¬ÒµÎñ×é¼þÓ¦¸Ã´¦ÓÚ library ÊôÐÔ£¬ÕâÑù²ÅÄܱ»ÎÒÃǵġ°app¿Ç¹¤³Ì¡±ËùÒÀÀµ£¬×é³ÉÒ»¸ö¾ßÓÐÍêÕû¹¦ÄܵÄAPP£»

µ«ÊÇÎÒÃÇÈçºÎÈÃ×é¼þÔÚÕâÁ½ÖÖģʽ֮¼ä×Ô¶¯×ª»»ÄØ£¿×ܲ»ÄÜÿ´ÎÐèҪת»»Ä£Ê½µÄʱºòȥÿ¸öÒµÎñ×é¼þµÄ Gralde ÎļþÖÐÈ¥ÊÖ¶¯°Ñ Application ¸Ä³É library °É£¿Èç¹ûÎÒÃǵÄÏîĿֻÓÐÁ½Èý¸ö×é¼þÄÇôÕâ¸ö°ì·¨¿Ï¶¨ÊÇ¿ÉÐеģ¬ÊÖ¶¯È¥¸ÄÒ»±éÒ²Óò»Á˶à¾Ã£¬µ«ÊÇÔÚ´óÐÍÏîÄ¿ÖÐÎÒÃÇ¿ÉÄÜ»áÓÐÊ®¼¸¸öÒµÎñ×é¼þ£¬ÔÙÈ¥ÊÖ¶¯¸ÄÒ»±é±Ø¶¨·Ñʱ·ÑÁ¦£¬Õâʱºò¾ÍÐèÒª³ÌÐòÔ±·¢»ÓÏÂÀÁµÄ±¾ÖÊÁË¡£

ÊÔÏ룬ÎÒÃǾ­³£ÔÚд´úÂëµÄʱºò¶¨Ò徲̬³£Á¿£¬ÄÇô¶¨Ò徲̬³£Á¿µÄÄ¿µÄÊ²Ã´ÄØ£¿µ±Ò»¸ö³£Á¿ÐèÒª±»ºÃ¼¸´¦´úÂëÒýÓõÄʱºò£¬°ÑÕâ¸ö³£Á¿¶¨ÒåΪ¾²Ì¬³£Á¿µÄºÃ´¦Êǵ±Õâ¸ö³£Á¿µÄÖµÐèÒª¸Ä±äʱÎÒÃÇÖ»ÐèÒª¸Ä±ä¾²Ì¬³£Á¿µÄÖµ£¬ÆäËûÒýÓÃÁËÕâ¸ö¾²Ì¬³£Á¿µÄµØ·½¶¼»á±»¸Ä±ä£¬×öµ½ÁËÒ»´Î¸Ä±ä£¬µ½´¦ÉúЧ£»¸ù¾ÝÕâ¸ö˼Ï룬ÄÇôÎÒÃǾͿÉÒÔÔÚÎÒÃǵĴúÂëÖеÄij´¦¶¨ÒåÒ»¸ö¾ö¶¨ÒµÎñ×é¼þÊôÐԵij£Á¿£¬È»ºóÈÃËùÓÐÒµÎñ×é¼þµÄbuild.gradle¶¼ÒýÓÃÕâ¸ö³£Á¿£¬ÕâÑùµ±ÎÒÃǸıäÁ˳£Á¿ÖµµÄʱºò£¬ËùÓÐÒýÓÃÁËÕâ¸ö³£Á¿ÖµµÄÒµÎñ×é¼þ¾Í»á¸ù¾ÝÖµµÄ±ä»¯¸Ä±ä×Ô¼ºµÄÊôÐÔ£»¿ÉÊÇÎÊÌâÀ´ÁË£¿¾²Ì¬³£Á¿ÊÇÓÃJava´úÂ붨ÒåµÄ£¬¶ø¸Ä±ä×é¼þÊôÐÔÊÇÐèÒªÔÚGradleÖж¨ÒåµÄ£¬GradleÄÜ×öµ½Âð£¿

Gradle×Ô¶¯¹¹½¨¹¤¾ßÓÐÒ»¸öÖØÒªÊôÐÔ£¬¿ÉÒÔ°ïÖúÎÒÃÇÍê³ÉÕâ¸öÊÂÇ顣ÿµ±ÎÒÃÇÓÃAndroidStudio´´½¨Ò»¸öAndroidÏîÄ¿ºó£¬¾Í»áÔÚÏîÄ¿µÄ¸ùĿ¼ÖÐÉú³ÉÒ»¸öÎļþ gradle.properties£¬ÎÒÃǽ«Ê¹ÓÃÕâ¸öÎļþµÄÒ»¸öÖØÒªÊôÐÔ£ºÔÚAndroidÏîÄ¿ÖеÄÈκÎÒ»¸öbuild.gradleÎļþÖж¼¿ÉÒÔ°Ñgradle.propertiesÖеij£Á¿¶ÁÈ¡³öÀ´£»ÄÇôÎÒÃÇÔÚÉÏÃæÌáµ½½â¾ö°ì·¨¾ÍÓÐÁËʵ¼ÊÐж¯µÄ·½·¨£¬Ê×ÏÈÎÒÃÇÔÚgradle.propertiesÖж¨ÒåÒ»¸ö³£Á¿Öµ isModule£¨ÊÇ·ñÊÇ×é¼þ¿ª·¢Ä£Ê½£¬trueΪÊÇ£¬falseΪ·ñ£©£º

# ÿ´Î¸ü¸Ä¡°isModule¡±µÄÖµºó£¬ÐèÒªµã»÷ "Sync Project" °´Å¥
isModule=false

È»ºóÎÒÃÇÔÚÒµÎñ×é¼þµÄbuild.gradleÖжÁÈ¡ isModule£¬µ«ÊÇ gradle.properties »¹ÓÐÒ»¸öÖØÒªÊôÐÔ£º gradle.properties ÖеÄÊý¾ÝÀàÐͶ¼ÊÇStringÀàÐÍ£¬Ê¹ÓÃÆäËûÊý¾ÝÀàÐÍÐèÒª×ÔÐÐת»»£»Ò²¾ÍÊÇ˵ÎÒÃǶÁµ½ isModule ÊǸöStringÀàÐ͵ÄÖµ£¬¶øÎÒÃÇÐèÒªµÄÊÇBooleanÖµ£¬´úÂëÈçÏ£º

if (isModule.toBoolean()) {
apply plugin: 'com.android.application'
} else {
apply plugin: 'com.android.library'
}

ÕâÑùÎÒÃǵÚÒ»¸öÎÊÌâ¾Í½â¾öÁË£¬µ±È»ÁË Ã¿´Î¸Ä±äisModuleµÄÖµºó£¬¶¼ÒªÍ¬²½ÏîÄ¿²ÅÄÜÉúЧ£»

2£©×é¼þÖ®¼äAndroidManifestºÏ²¢ÎÊÌâ

ÔÚ AndroidStudio ÖÐÿһ¸ö×é¼þ¶¼»áÓжÔÓ¦µÄ AndroidManifest.xml£¬ÓÃÓÚÉùÃ÷ÐèÒªµÄȨÏÞ¡¢Application¡¢Activity¡¢Service¡¢BroadcastµÈ£¬µ±ÏîÄ¿´¦ÓÚ×é¼þģʽʱ£¬ÒµÎñ×é¼þµÄ AndroidManifest.xml Ó¦¸Ã¾ßÓÐÒ»¸ö Android APP Ëù¾ßÓеĵÄËùÓÐÊôÐÔ£¬ÓÈÆäÊÇÉùÃ÷ Application ºÍÒª launchµÄActivity£¬µ«Êǵ±ÏîÄ¿´¦ÓÚ¼¯³ÉģʽµÄʱºò£¬Ã¿Ò»¸öÒµÎñ×é¼þµÄ AndroidManifest.xml ¶¼ÒªºÏ²¢µ½¡°app¿Ç¹¤³Ì¡±ÖУ¬ÒªÊÇÿһ¸öÒµÎñ×é¼þ¶¼ÓÐ×Ô¼ºµÄ Application ºÍ launchµÄActivity£¬ÄÇôºÏ²¢µÄʱºò¿Ï¶¨»á³åÍ»£¬ÊÔÏëÒ»¸öAPPÔõô¿ÉÄÜ»áÓжà¸ö Application ºÍ launch µÄActivityÄØ£¿

µ«ÊÇ´ó¼ÒÓ¦¸Ã×¢Òâµ½Õâ¸öÎÊÌâÊÇÔÚ×é¼þ¿ª·¢Ä£Ê½ºÍ¼¯³É¿ª·¢Ä£Ê½Ö®¼äת»»ÒýÆðµÄÎÊÌ⣬¶øÔÚÉÏÒ»½ÚÖÐÎÒÃÇÒѾ­½â¾öÁË×é¼þģʽºÍ¼¯³Éģʽת»»µÄÎÊÌ⣬ÁíÍâ´ó¼ÒÓ¦¸Ã¶¼¾­Àú¹ý½« Android ÏîÄ¿´Ó Eclipse Çл»µ½ AndroidStudio µÄ¹ý³Ì£¬ÓÉÓÚ Android ÏîÄ¿ÔÚ Eclipse ºÍ AndroidStudio¿ª·¢Ê± AndroidManifest.xml ÎļþµÄλÖÃÊDz»Ò»ÑùµÄ£¬ÎÒÃÇÐèÒªÔÚbuild.gradle ÖÐÖ¸¶¨Ï AndroidManifest.xml µÄλÖã¬AndroidStudio ²ÅÄܶÁÈ¡µ½ AndroidManifest.xml£¬ÕâÑù½â¾ö°ì·¨Ò²¾ÍÓÐÁË£¬ÎÒÃÇ¿ÉÒÔΪ×é¼þ¿ª·¢Ä£Ê½ÏµÄÒµÎñ×é¼þÔÙ´´½¨Ò»¸ö AndroidManifest.xml£¬È»ºó¸ù¾ÝisModuleÖ¸¶¨AndroidManifest.xmlµÄÎļþ·¾¶£¬ÈÃÒµÎñ×é¼þÔÚ¼¯³ÉģʽºÍ×é¼þģʽÏÂʹÓò»Í¬µÄAndroidManifest.xml£¬ÕâÑù±íµ¥³åÍ»µÄÎÊÌâ¾Í¿ÉÒÔ¹æ±ÜÁË¡£

ÉÏͼÊÇ×é¼þ»¯ÏîÄ¿ÖÐÒ»¸ö±ê×¼µÄÒµÎñ×é¼þĿ¼½á¹¹£¬Ê×ÏÈÎÒÃÇÔÚmainÎļþ¼ÐÏ´´½¨Ò»¸ömoduleÎļþ¼ÐÓÃÓÚ´æ·Å×é¼þ¿ª·¢Ä£Ê½ÏÂÒµÎñ×é¼þµÄ AndroidManifest.xml£¬¶ø AndroidStudio Éú³ÉµÄ AndroidManifest.xml ÔòÒÀÈ»±£Áô£¬²¢ÓÃÓÚ¼¯³É¿ª·¢Ä£Ê½ÏÂÒµÎñ×é¼þµÄ±íµ¥£»È»ºóÎÒÃÇÐèÒªÔÚÒµÎñ×é¼þµÄ build.gradle ÖÐÖ¸¶¨±íµ¥µÄ·¾¶£¬´úÂëÈçÏ£º

sourceSets {
main {
if (isModule.toBoolean()) {
manifest.srcFile 'src/main/module/AndroidManifest.xml'
} else {
manifest.srcFile 'src/main/AndroidManifest.xml'
}
}
}

ÕâÑùÔÚ²»Í¬µÄ¿ª·¢Ä£Ê½Ï¾ͻá¶ÁÈ¡µ½²»Í¬µÄ AndroidManifest.xml £¬È»ºóÎÒÃÇÐèÒªÐÞ¸ÄÕâÁ½¸ö±íµ¥µÄÄÚÈÝÒÔΪÎÒÃDz»Í¬µÄ¿ª·¢Ä£Ê½·þÎñ¡£

Ê×ÏÈÊǼ¯³É¿ª·¢Ä£Ê½Ï嵀 AndroidManifest.xml£¬Ç°ÃæÎÒÃÇ˵¹ý¼¯³ÉģʽÏ£¬ÒµÎñ×é¼þµÄ±íµ¥ÊǾø¶Ô²»ÄÜÓµÓÐ×Ô¼ºµÄ Application ºÍ launch µÄ ActivityµÄ£¬Ò²²»ÄÜÉùÃ÷APPÃû³Æ¡¢Í¼±êµÈÊôÐÔ£¬×ÜÖ®app¿Ç¹¤³ÌÓеÄÊôÐÔ£¬ÒµÎñ×é¼þ¶¼²»ÄÜÓУ¬ÏÂÃæÊÇÒ»·Ý±ê×¼µÄ¼¯³É¿ª·¢Ä£Ê½ÏÂÒµÎñ×é¼þµÄ AndroidManifest.xml£º

<manifest xmlns:android=" http://schemas.android.com/ apk/res/android"
package="com.guiying.girls">
<application android:theme="@style/AppTheme">
<activity
android:name=".main.GirlsActivity"
android:screenOrientation="portrait" />
<activity
android:name=".girl.GirlActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar" />
</application>
</manifest>

ÎÒÔÚÕâ¸ö±íµ¥ÖÐÖ»ÉùÃ÷ÁËÓ¦ÓõÄÖ÷Ì⣬¶øÇÒÕâ¸öÖ÷Ì⻹ÊǸúapp¿Ç¹¤³ÌÖеÄÖ÷ÌâÊÇÒ»Öµģ¬¶¼ÒýÓÃÁËcommon×é¼þÖеÄ×ÊÔ´Îļþ£¬ÔÚÕâÀïÉùÃ÷Ö÷ÌâÊÇΪÁË·½±ãÕâ¸öÒµÎñ×é¼þÖÐÓÐʹÓÃĬÈÏÖ÷ÌâµÄActivityʱ¾Í²»ÓÃÔÙ¸øActivityµ¥¶ÀÉùÃ÷themeÁË¡£

È»ºóÊÇ×é¼þ¿ª·¢Ä£Ê½ÏÂµÄ±íµ¥Îļþ£º

<manifest xmlns:android="http: //schemas.android.com/apk/res/android"
package="com.guiying.girls">
<application
android:name=" debug.GirlsApplication"
android:allowBackup="true"
android:icon=" @mipmap/ic_launcher"
android:label=" @string/girls_name"
android:supportsRtl="true"
android:theme=" @style/AppTheme">
<activity
android:name=".main.GirlsActivity"
android:screenOrientation="portrait">
<intent-filter>
<action android:name=" android.intent.action.MAIN" />
<category android:name=" android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".girl.GirlActivity"
android:screenOrientation="portrait"
android:theme=" @style/AppTheme.NoActionBar" />
</application>
</manifest>

×é¼þģʽϵÄÒµÎñ×é¼þ±íµ¥¾ÍÊÇÒ»¸öAndroidÏîÄ¿ÆÕͨµÄAndroidManifest.xml£¬ÕâÀï¾Í²»ÔÚ¹ý¶à½éÉÜÁË¡£

3£©È«¾ÖContextµÄ»ñÈ¡¼°×é¼þÊý¾Ý³õʼ»¯

µ±Android³ÌÐòÆô¶¯Ê±£¬Androidϵͳ»áΪÿ¸ö³ÌÐò´´½¨Ò»¸ö Application ÀàµÄ¶ÔÏ󣬲¢ÇÒÖ»´´½¨Ò»¸ö£¬application¶ÔÏóµÄÉúÃüÖÜÆÚÊÇÕû¸ö³ÌÐòÖÐ×µÄ£¬ËüµÄÉúÃüÖÜÆÚ¾ÍµÈÓÚÕâ¸ö³ÌÐòµÄÉúÃüÖÜÆÚ¡£ÔÚĬÈÏÇé¿öÏÂÓ¦ÓÃϵͳ»á×Ô¶¯Éú³É Application ¶ÔÏ󣬵«ÊÇÈç¹ûÎÒÃÇ×Ô¶¨ÒåÁË Application£¬ÄǾÍÐèÒªÔÚ AndroidManifest.xml ÖÐÉùÃ÷¸æÖªÏµÍ³£¬ÊµÀý»¯µÄʱºò£¬ÊÇʵÀý»¯ÎÒÃÇ×Ô¶¨ÒåµÄ£¬¶ø·ÇĬÈϵġ£

µ«ÊÇÎÒÃÇÔÚ×é¼þ»¯¿ª·¢µÄʱºò£¬¿ÉÄÜΪÁËÊý¾ÝµÄÎÊÌâÿһ¸ö×é¼þ¶¼»á×Ô¶¨ÒåÒ»¸öApplicationÀ࣬Èç¹ûÎÒÃÇÔÚ×Ô¼ºµÄ×é¼þÖпª·¢Ê±ÐèÒª»ñÈ¡ È«¾ÖµÄContext£¬Ò»°ã¶¼»áÖ±½Ó»ñÈ¡ application ¶ÔÏ󣬵«Êǵ±ËùÓÐ×é¼þÒª´ò°üºÏ²¢ÔÚÒ»ÆðµÄʱºò¾Í»á³öÏÖÎÊÌ⣬ÒòΪ×îºó³ÌÐòÖ»ÓÐÒ»¸ö Application£¬ÎÒÃÇ×é¼þÖÐ×Ô¼º¶¨ÒåµÄ Application ¿Ï¶¨ÊÇû·¨Ê¹Óõģ¬Òò´ËÎÒÃÇÐèÒªÏë°ì·¨ÔÙÈκÎÒ»¸öÒµÎñ×é¼þÖж¼ÄÜ»ñÈ¡µ½È«¾ÖµÄ Context£¬¶øÇÒÕâ¸ö Context ²»¹ÜÊÇÔÚ×é¼þ¿ª·¢Ä£Ê½»¹ÊÇÔÚ¼¯³É¿ª·¢Ä£Ê½¶¼ÊÇÉúЧµÄ¡£

ÔÚ ×é¼þ»¯¹¤³ÌÄ£ÐÍͼÖУ¬¹¦ÄÜ×é¼þ¼¯ºÏÖÐÓÐÒ»¸ö Common ×é¼þ£¬ Common Óй«¹²¡¢¹«Óᢹ²Í¬µÄÒâ˼£¬ËùÒÔÕâ¸ö×é¼þÖÐÖ÷Òª·â×°ÁËÏîÄ¿ÖÐÐèÒªµÄ»ù´¡¹¦ÄÜ£¬²¢ÇÒÿһ¸öÒµÎñ×é¼þ¶¼ÒªÒÀÀµCommon×é¼þ£¬Common ×é¼þ¾ÍÏñÊÇÍòÕɸßÂ¥µÄµØ»ù£¬¶øÒµÎñ×é¼þ¾ÍÊÇÔÚ Common ×é¼þÕâ¸öµØ»ùÉϴÆðÀ´ÎÒÃǵÄAPPµÄ£¬Common ×é¼þ»áרÃÅÔÚÒ»¸öÕ½ÚÖн²½â£¬ÕâÀïÖ»½² Common×é¼þÖеÄÒ»¸ö¹¦ÄÜ£¬ÔÚCommon×é¼þÖÐÎÒÃÇ·â×°ÁËÏîÄ¿ÖÐÓõ½µÄ¸÷ÖÖBaseÀ࣬ÕâЩ»ùÀàÖоÍÓÐBaseApplication Àà¡£

BaseApplication Ö÷ÒªÓÃÓÚ¸÷¸öÒµÎñ×é¼þºÍapp¿Ç¹¤³ÌÖÐÉùÃ÷µÄ Application Àà¼Ì³ÐÓõģ¬Ö»Òª¸÷¸öÒµÎñ×é¼þºÍapp¿Ç¹¤³ÌÖÐÉùÃ÷µÄApplicationÀà¼Ì³ÐÁË BaseApplication£¬µ±Ó¦ÓÃÆô¶¯Ê± BaseApplication ¾Í»á±»¶¯ÊµÀý»¯£¬ÕâÑù´Ó BaseApplication »ñÈ¡µÄ Context ¾Í»áÉúЧ£¬Ò²¾Í´Ó¸ù±¾ÉϽâ¾öÁËÎÒÃDz»ÄÜÖ±½Ó´Ó¸÷¸ö×é¼þ»ñȡȫ¾Ö Context µÄÎÊÌ⣻

Õâʱºò´ó¼Ò¿Ï¶¨¶¼»áÓиöÒÉÎÊ£¿²»ÊÇ˵ÁËÒµÎñ×é¼þ²»ÄÜÓÐ×Ô¼ºµÄ Application Âð£¬Ôõô»¹ÈÃËûÃǼ̳РBaseApplication ÄØ£¿ÆäʵÎÒÇ°ÃæËµµÄÊÇÒµÎñ×é¼þ²»ÄÜÔÚ¼¯³ÉģʽÏÂÓµÓÐ×Ô¼ºµÄ Application£¬µ«ÊÇÕâ²»´ú±íÒµÎñ×é¼þÒ²²»ÄÜÔÚ×é¼þ¿ª·¢Ä£Ê½ÏÂÓµÓÐ×Ô¼ºµÄApplication£¬ÆäʵҵÎñ×é¼þÔÚ×é¼þ¿ª·¢Ä£Ê½Ï±ØÐëÒªÓÐ×Ô¼ºµÄ Application À࣬һ·½ÃæÊÇΪÁËÈà BaseApplication ±»ÊµÀý»¯´Ó¶ø»ñÈ¡ Context£¬»¹ÓÐÒ»¸ö×÷ÓÃÊÇ£¬ÒµÎñ×é¼þ×Ô¼ºµÄ Application ¿ÉÒÔÔÚ×é¼þ¿ª·¢Ä£Ê½Ï³õʼ»¯Ò»Ð©Êý¾Ý£¬ÀýÈçÔÚ×é¼þ¿ª·¢Ä£Ê½Ï£¬A×é¼þûÓеÇÂ¼Ò³ÃæÒ²Ã»·¨µÇ¼£¬Òò´Ë¾ÍÎÞ·¨»ñÈ¡µ½ Token£¬ÕâÑùÇëÇóÍøÂç¾ÍÎÞ·¨³É¹¦£¬Òò´ËÎÒÃÇÐèÒªÔÚA×é¼þÕâ¸ö APP Æô¶¯ºó¾ÍÓ¦¸ÃÒѾ­µÇ¼ÁË£¬Õâʱºò×é¼þ×Ô¼ºµÄ Application Àà¾ÍÓÐÁËÓÃÎäÖ®µØ£¬ÎÒÃÇÔÚ×é¼þµÄ ApplicationµÄ onCreate ·½·¨ÖÐÄ£ÄâÒ»¸öµÇ½½Ó¿Ú£¬Ôڵǽ³É¹¦ºó½«Êý¾Ý±£´æµ½±¾µØ£¬ÕâÑù¾Í¿ÉÒÔ´¦ÀíA×é¼þÖеÄÊý¾ÝÒµÎñÁË£»ÁíÍâÎÒÃÇÒ²¿ÉÒÔÔÚ×é¼þApplicationÖгõʼ»¯Ò»Ð©µÚÈý·¢¿â¡£

µ«ÊÇ£¬Êµ¼ÊÉÏÒµÎñ×é¼þÖеÄApplicationÔÚ×îÖյÉÏîÄ¿ÖÐÊÇûÓÐʲôʵ¼Ê×÷Óõģ¬×é¼þ×Ô¼ºµÄ Application ½öÏÞÓÚÔÚ×é¼þģʽÏ·¢»Ó¹¦ÄÜ£¬Òò´ËÎÒÃÇÐèÒªÔÚ½«ÏîÄ¿´Ó×é¼þģʽת»»µ½¼¯³Éģʽºó½«×é¼þ×Ô¼ºµÄApplicationÌÞ³ý³öÎÒÃǵÄÏîÄ¿£»ÔÚ AndroidManifest ºÏ²¢ÎÊÌâС½ÚÖнéÉÜÁËÈçºÎÔÚ²»Í¬¿ª·¢Ä£Ê½ÏÂÈà Gradle ʶ±ð×é¼þ±íµ¥µÄ·¾¶£¬Õâ¸ö·½·¨Ò²Í¬ÑùÊÊÓÃÓÚJava´úÂ룻

ÎÒÃÇÔÚJavaÎļþ¼ÐÏ´´½¨Ò»¸ö debug Îļþ¼Ð£¬ÓÃÓÚ´æ·Å²»»áÔÚÒµÎñ×é¼þÖÐÒýÓõÄÀ࣬ÀýÈçÉÏͼÖÐµÄ NewsApplication £¬ÄãÉõÖÁ¿ÉÒÔÔÚ debug Îļþ¼ÐÖд´½¨Ò»¸öActivity£¬È»ºó×é¼þ±íµ¥ÖÐÉùÃ÷Æô¶¯Õâ¸öActivity£¬ÔÚÕâ¸öActivityÖв»ÓÃsetContentView£¬Ö»ÐèÒªÔÚÆô¶¯ÄãµÄÄ¿±êActivityµÄʱºò´«µÝ²ÎÊý¾ÍÐУ¬ÕâÑù¾Í¾Í¿ÉÒÔ½â¾ö×é¼þģʽÏÂijЩActivityÐèÒªgetIntentÊý¾Ý¶øÃ»Óа취Äõ½µÄÇé¿ö£»½ÓÏÂÀ´ÔÚÒµÎñ×é¼þµÄ build.gradle ÖУ¬¸ù¾Ý isModule ÊÇ·ñÊǼ¯³Éģʽ½« debug Õâ¸ö Java´úÂëÎļþ¼ÐÅųý£º

sourceSets {
main {
if (isModule.toBoolean()) {
manifest.srcFile 'src/main/module/AndroidManifest.xml'
} else {
manifest.srcFile 'src/main/AndroidManifest.xml'
//¼¯³É¿ª·¢Ä£Ê½ÏÂÅųýdebugÎļþ¼ÐÖеÄËùÓÐJavaÎļþ
java {
exclude 'debug/**'
}
}
}
}

4£©libraryÒÀÀµÎÊÌâ

ÔÚ½éÉÜÕâÒ»½ÚµÄʱºò£¬ÏÈ˵һ¸öÎÊÌ⣬ÔÚ×é¼þ»¯¹¤³ÌÄ£ÐÍͼÖУ¬¶àýÌå×é¼þºÍCommon×é¼þ¶¼ÒÀÀµÁËÈÕÖ¾×é¼þ£¬¶øAÒµÎñ×é¼þÓÐͬʱÒÀÀµÁ˶àýÌå×é¼þºÍCommon×é¼þ£¬Õâʱºò¾Í»áÓÐÈËÎÊ£¬ÄãÕâÑù¸ãÆñ²»ÊÇÈÕÖ¾×é¼þÒª±»Öظ´ÒÀÀµÁË£¬¶øÇÒCommon×é¼þÒ²±»Ã¿Ò»¸öÒµÎñ×é¼þÒÀÀµÁË£¬ÕâÑù²»³öÎÊÌâÂð£¿

Æäʵ´ó¼ÒÍêȫûÓбØÒªµ£ÐÄÕâ¸öÎÊÌ⣬Èç¹ûÕæÓÐÖØ¸´ÒÀÀµµÄÎÊÌ⣬ÔÚÄã±àÒë´ò°üµÄʱºò¾Í»á±¨´í£¬Èç¹ûÄ㻹ÊDz»ÏàÐŵϰ¿ÉÒÔ·´±àÒëÏÂ×îºó´ò°ü³öÀ´µÄAPP£¬¿´¿´ÀïÃæµÄ´úÂëÄã¾ÍÖªµÀÁË¡£×é¼þÖ»ÊÇÎÒÃÇÔÚ´úÂ뿪·¢½×¶ÎÖÐΪÁË·½±ã½ÐµÄÒ»¸öÊõÓÔÚ×é¼þ±»´ò°ü½øAPPµÄʱºòÊÇûÓÐÕâ¸ö¸ÅÄîµÄ£¬ÕâЩ×é¼þ×îºó¶¼»á±»´ò°ü³Éarr°ü£¬È»ºó±»app¿Ç¹¤³ÌËùÒÀÀµ£¬ÔÚ¹¹½¨APPµÄ¹ý³ÌÖÐGradle»á×Ô¶¯½«Öظ´µÄarr°üÅųý£¬APPÖÐÒ²¾Í²»»á´æÔÚÏàͬµÄ´úÂëÁË£»

µ«ÊÇËäÈ»×é¼þÊDz»»áÖØ¸´ÁË£¬µ«ÊÇÎÒÃÇ»¹ÊÇÒª¿¼ÂÇÁíÒ»¸öÇé¿ö£¬ÎÒÃÇÔÚbuild.gradleÖÐcompileµÄµÚÈý·½¿â£¬ÀýÈçAndroidSupport¿â¾­³£»á±»Ò»Ð©¿ªÔ´µÄ¿Ø¼þËùÒÀÀµ£¬¶øÎÒÃÇ×Ô¼ºÒ»¶¨Ò²»ácompile AndroidSupport¿â £¬Õâ¾Í»áÔì³ÉµÚÈý·½°üºÍÎÒÃÇ×Ô¼ºµÄ°ü´æÔÚÖØ¸´¼ÓÔØ£¬½â¾ö°ì·¨¾ÍÊÇÕÒ³öÄǸö¶à³öÀ´µÄ¿â£¬²¢½«¶à³öÀ´µÄ¿â¸øÅųýµô£¬¶øÇÒGradleÒ²ÊÇÖ§³ÖÕâÑù×öµÄ£¬·Ö±ðÓÐÁ½ÖÖ·½Ê½£º¸ù¾Ý×é¼þÃûÅųý»òÕ߸ù¾Ý°üÃûÅųý£¬ÏÂÃæÒÔÅųýsupport-v4¿âΪÀý£º

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile("com.jude:easyrecyclerview: $rootProject.easyRecyclerVersion") {
exclude module: 'support-v4'//¸ù¾Ý×é¼þÃûÅųý
exclude group: 'android.support.v4'//¸ù¾Ý°üÃûÅųý
}
}

libraryÖØ¸´ÒÀÀµµÄÎÊÌâËãÊǶ¼½â¾öÁË£¬µ«ÊÇÎÒÃÇÔÚ¿ª·¢ÏîÄ¿µÄʱºò»áÒÀÀµºÜ¶à¿ªÔ´¿â£¬¶øÕâЩ¿âÿ¸ö×é¼þ¶¼ÐèÒªÓõ½£¬ÒªÊÇÿ¸ö×é¼þ¶¼È¥ÒÀÀµÒ»±éÒ²ÊǺÜÂé·³µÄ£¬ÓÈÆäÊǸøÕâЩ¿âÉý¼¶µÄʱºò£¬ÎªÁË·½±ãÎÒÃÇͳһ¹ÜÀíµÚÈý·½¿â£¬ÎÒÃǽ«¸ø¸øÕû¸ö¹¤³ÌÌṩͳһµÄÒÀÀµµÚÈý·½¿âµÄÈë¿Ú£¬Ç°Ãæ½éÉܵÄCommon¿âµÄ×÷ÓÃÖ®Ò»¾ÍÊÇͳһÒÀÀµ¿ªÔ´¿â£¬ÒòΪÆäËûÒµÎñ×é¼þ¶¼ÒÀÀµÁËCommon¿â£¬ËùÒÔÕâЩҵÎñ×é¼þÒ²¾Í¼ä½ÓÒÀÀµÁËCommonËùÒÀÀµµÄ¿ªÔ´¿â¡£

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
//Android Support
compile "com.android.support:appcompat-v7: $rootProject.supportLibraryVersion"
compile "com.android.support:design: $rootProject.supportLibraryVersion"
compile "com.android.support:percent: $rootProject.supportLibraryVersion"
//ÍøÂçÇëÇóÏà¹Ø
compile "com.squareup.retrofit2:retrofit: $rootProject.retrofitVersion"
compile "com.squareup.retrofit2:retrofit-mock: $rootProject.retrofitVersion"
compile "com.github.franmontiel:PersistentCookieJar: $rootProject.cookieVersion"
//Îȶ¨µÄ
compile "com.github.bumptech.glide:glide: $rootProject.glideVersion"
compile "com.orhanobut:logger: $rootProject.loggerVersion"
compile "org.greenrobot:eventbus: $rootProject.eventbusVersion"
compile "com.google.code.gson:gson: $rootProject.gsonVersion"
compile "com.github.chrisbanes:PhotoView: $rootProject.photoViewVersion"
compile "com.jude:easyrecyclerview: $rootProject.easyRecyclerVersion"
compile "com.github.GrenderG:Toasty: $rootProject.toastyVersion"
//router
compile "com.github.mzule. activityrouter:activityrouter: $rootProject.routerVersion"
}

5£©×é¼þÖ®¼äµ÷ÓúÍͨÐÅ

ÔÚ×é¼þ»¯¿ª·¢µÄʱºò£¬×é¼þÖ®¼äÊÇûÓÐÒÀÀµ¹ØÏµ£¬ÎÒÃDz»ÄÜÔÚʹÓÃÏÔʾµ÷ÓÃÀ´Ìø×ªÒ³ÃæÁË£¬ÒòΪÎÒÃÇ×é¼þ»¯µÄÄ¿µÄÖ®Ò»¾ÍÊǽâ¾öÄ£¿é¼äµÄÇ¿ÒÀÀµÎÊÌ⣬¼ÙÈçÏÖÔÚÒª´ÓAÒµÎñ×é¼þÌø×ªµ½ÒµÎñB×é¼þ£¬²¢ÇÒҪЯ´ø²ÎÊýÌø×ª£¬ÕâʱºòÔõô°ìÄØ£¿¶øÇÒ×é¼þÕâô¶àÔõô¹ÜÀíÒ²ÊǸöÎÊÌ⣬Õâʱºò¾ÍÐèÒªÒýÈ롰·ÓÉ¡±µÄ¸ÅÄîÁË£¬Óɱ¾ÎÄ¿ªÊ¼µÄ×é¼þ»¯Ä£ÐÍϵÄÒµÎñ¹ØÏµÍ¼¿É֪·ÓɾÍÊÇÆðµ½Ò»¸öת·¢µÄ×÷Óá£

ÕâÀïÎÒ½«½éÉÜ¿ªÔ´¿âµÄ¡°ActivityRouter¡± £¬ÓÐÐËȤµÄͬѧÇéÖ±½ÓÈ¥ActivityRouterµÄGithubÖ÷ҳѧϰ£ºActivityRouter£¬ActivityRouterÖ§³Ö¸øActivity¶¨Òå URL£¬ÕâÑù¾Í¿ÉÒÔͨ¹ý URL Ìø×ªµ½Activity£¬²¢ÇÒÖ§³Ö´Óä¯ÀÀÆ÷ÒÔ¼° APP ÖÐÌøÈëÎÒÃǵÄActivity£¬¶øÇÒ»¹Ö§³Öͨ¹ý url µ÷Ó÷½·¨¡£ÏÂÃæ½«½éÉÜÈçºÎ½«ActivityRouter¼¯³Éµ½×é¼þ»¯ÏîÄ¿ÖÐÒÔʵÏÖ×é¼þÖ®¼äµÄµ÷Óã»

1¡¢Ê×ÏÈÎÒÃÇÐèÒªÔÚ Common ×é¼þÖÐµÄ build.gradle ½«ActivityRouter ÒÀÀµ½øÀ´£¬·½±ãÎÒÃÇÔÚÒµÎñ×é¼þÖе÷Óãº

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
//router
compile "com.github.mzule. activityrouter:activityrouter: $rootProject.routerVersion"
}

2¡¢ÕâÒ»²½ÎÒÃÇÐèÒªÏÈÁ˽â APTÕâ¸ö¸ÅÄAPT(Annotation Processing Tool)ÊÇÒ»ÖÖ´¦Àí×¢½âµÄ¹¤¾ß£¬Ëü¶ÔÔ´´úÂëÎļþ½øÐмì²âÕÒ³öÆäÖеÄAnnotation£¬Ê¹ÓÃAnnotation½øÐжîÍâµÄ´¦Àí¡£ Annotation´¦ÀíÆ÷ÔÚ´¦ÀíAnnotationʱ¿ÉÒÔ¸ù¾ÝÔ´ÎļþÖеÄAnnotationÉú³É¶îÍâµÄÔ´ÎļþºÍÆäËüµÄÎļþ(Îļþ¾ßÌåÄÚÈÝÓÉAnnotation´¦ÀíÆ÷µÄ±àдÕß¾ö¶¨)£¬APT»¹»á±àÒëÉú³ÉµÄÔ´ÎļþºÍÔ­À´µÄÔ´Îļþ£¬½«ËüÃÇÒ»ÆðÉú³ÉclassÎļþ¡£ÔÚÕâÀïÎÒÃǽ«ÔÚÿһ¸öÒµÎñ×é¼þµÄ build.gradle ¶¼ÒýÈëActivityRouter µÄ Annotation´¦ÀíÆ÷£¬ÎÒÃǽ«»áÔÚÉùÃ÷×é¼þºÍUrlµÄʱºòʹÓã¬annotationProcessorÊÇAndroid¹Ù·½ÌṩµÄAnnotation´¦ÀíÆ÷²å¼þ£¬´úÂëÈçÏ£º

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
annotationProcessor "com.github.mzule .activityrouter:compiler: $rootProject.annotationProcessor"
}

3¡¢½ÓÏÂÀ´ÐèÒªÔÚ app¿Ç¹¤³ÌµÄ AndroidManifest.xml ÅäÖ㬵½ÕâÀïActivityRouterÅäÖþÍËãÍê³ÉÁË£º

<!--ÉùÃ÷Õû¸öÓ¦ÓóÌÐòµÄ·ÓÉЭÒé-->
<activity
android:name="com.github.mzule. activityrouter.router.RouterActivity"
android:theme=" @android:style/Theme.NoDisplay">
<intent-filter>
<action android:name=" android.intent.action.VIEW" />
<category android:name=" android.intent.category.DEFAULT" />
<category android:name=" android.intent.category.BROWSABLE" />
<data android:scheme=" @string/global_scheme" /> <!-- ¸Ä³É×Ô¼ºµÄscheme -->
</intent-filter>
</activity>
<!--·¢ËͱÀÀ£ÈÕÖ¾½çÃæ-->

4¡¢½ÓÏÂÀ´ÎÒÃǽ«ÉùÃ÷ÏîÄ¿ÖеÄÒµÎñ×é¼þ£¬ÉùÃ÷·½·¨ÈçÏ£º

@Module("girls")
public class Girls {
}

ÔÚÿһ¸öÒµÎñ×é¼þµÄjavaÎļþµÄ¸ùĿ¼Ï´´½¨Ò»¸öÀ࣬Óà ע½â@Module ÉùÃ÷Õâ¸öÒµÎñ×é¼þ£»
È»ºóÔÚ¡°app¿Ç¹¤³Ì¡±µÄ Ó¦ÓÃApplication ÖÐʹÓà ע½â@Modules ¹ÜÀíÎÒÃÇÉùÃ÷µÄËùÓÐÒµÎñ×é¼þ£¬·½·¨ÈçÏ£º

@Modules({"main", "girls", "news"})
public class MyApplication extends BaseApplication {
}

µ½ÕâÀï×é¼þ»¯ÏîÄ¿ÖеÄËùÓÐÒµÎñ×é¼þ¾Í±»ÉùÃ÷ºÍ¹ÜÀíÆðÀ´ÁË£¬×é¼þÖ®¼äµÄÒ²¾Í¿ÉÒÔ»¥Ïàµ÷ÓÃÁË£¬µ±È»Ç°ÌáÊÇÒª¸øÒµÎñ×é¼þÖеÄActivity¶¨Òå URL¡£

5¡¢ÀýÈçÎÒÃǸø Girls×é¼þ ÖÐµÄ GirlsActivity ʹÓà ע½â@Router ¶¨ÒåÒ»¸ö URL£º¡°news¡±£¬·½·¨ÈçÏ£º

@Router("girls")
public class GirlsActivity extends BaseActionBarActivity {
private GirlsView mView;
private GirlsContract.Presenter mPresenter;
@Override
protected int setTitleId() {
return R.string.girls_activity_title;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mView = new GirlsView(this);
setContentView(mView);
mPresenter = new GirlsPresenter(mView);
mPresenter.start();
}
}

È»ºóÎÒÃǾͿÉÒÔÔÚÏîÄ¿ÖеÄÈκÎÒ»¸öµØ·½Í¨¹ý URLµØÖ· £º module://girls, µ÷Óà GirlsActivity£¬·½·¨ÈçÏ£º

Routers.open(MainActivity.this, "module://girls");

×é¼þÖ®¼äµÄµ÷Óýâ¾öºó£¬ÁíÍâÐèÒª½â¾öµÄ¾ÍÊÇ×é¼þÖ®¼äµÄͨÐÅ£¬ÀýÈçAÒµÎñ×é¼þÖÐÓÐÏûÏ¢ÁÐ±í£¬¶øÓû§ÔÚB×é¼þÖвÙ×÷ij¸öʼþºó»á²úÉúÒ»ÌõÐÂÏûÏ¢£¬ÐèҪ֪ͨA×é¼þË¢ÐÂÏûÏ¢ÁÐ±í£¬ÕâÑùÒµÎñ³¡¾°ÐèÇó¿ÉÒÔʹÓÃAndroid¹ã²¥À´½â¾ö£¬Ò²¿ÉÒÔʹÓõÚÈý·½µÄʼþ×ÜÏßÀ´ÊµÏÖ£¬±ÈÈçEventBus¡£

6£©×é¼þÖ®¼ä×ÊÔ´Ãû³åÍ»

ÒòΪÎÒÃDzð·Ö³öÁ˺ܶàÒµÎñ×é¼þºÍ¹¦ÄÜ×é¼þ£¬ÔÚ°ÑÕâЩ×é¼þºÏ²¢µ½¡°app¿Ç¹¤³Ì¡±Ê±ºò¾ÍÓпÉÄÜ»á³öÏÖ×ÊÔ´Ãû³åÍ»ÎÊÌ⣬ÀýÈçA×é¼þºÍB×é¼þ¶¼ÓÐÒ»ÕŽÐ×ö¡°ic_back¡±µÄͼ±ê£¬ÕâʱºòÔÚ¼¯³ÉģʽÏ´ò°üAPP¾Í»á±àÒë³ö´í£¬½â¾öÕâ¸öÎÊÌâ×î¼òµ¥µÄ°ì·¨¾ÍÊÇÔÚÏîÄ¿ÖÐÔ¼¶¨×ÊÔ´ÎļþÃüÃû¹æÔ¼£¬±ÈÈçÇ¿ÖÆÊ¹Ã¿¸ö×ÊÔ´ÎļþµÄÃû³ÆÒÔ×é¼þÃû¿ªÊ¼£¬Õâ¸ö¿ÉÒÔ¸ù¾Ýʵ¼ÊÇé¿öºÍ¿ª·¢ÈËÔ±ÖÆ¶¨¹æÔò¡£µ±È»ÁËÍòÄܵÄGradle¹¹½¨¹¤¾ßÒ²ÌṩÁ˽â¾ö·½·¨£¬Í¨¹ýÔÚÔÚ×é¼þµÄbuild.gradleÖÐÌí¼ÓÈçϵĴúÂ룺

//ÉèÖÃÁËresourcePrefixÖµºó£¬ËùÓеÄ×ÊÔ´Ãû±ØÐëÒÔÖ¸¶¨µÄ×Ö·û´®×öǰ׺£¬·ñÔò»á±¨´í¡£
//µ«ÊÇresourcePrefixÕâ¸öÖµÖ»ÄÜÏÞ¶¨xmlÀïÃæµÄ×ÊÔ´£¬²¢²»ÄÜÏÞ¶¨Í¼Æ¬×ÊÔ´£¬ËùÓÐͼƬ×ÊÔ´ÈÔÈ»ÐèÒªÊÖ¶¯È¥ÐÞ¸Ä×ÊÔ´Ãû¡£
resourcePrefix "girls_"

µ«ÊÇÉèÖÃÁËÕâ¸öÊôÐÔºóÓиöÎÊÌ⣬ËùÓеÄ×ÊÔ´Ãû±ØÐëÒÔÖ¸¶¨µÄ×Ö·û´®×öǰ׺£¬·ñÔò»á±¨´í£¬¶øÇÒresourcePrefixÕâ¸öÖµÖ»ÄÜÏÞ¶¨xmlÀïÃæµÄ×ÊÔ´£¬²¢²»ÄÜÏÞ¶¨Í¼Æ¬×ÊÔ´£¬ËùÓÐͼƬ×ÊÔ´ÈÔÈ»ÐèÒªÊÖ¶¯È¥ÐÞ¸Ä×ÊÔ´Ãû£»ËùÒÔÎÒ²¢²»ÍƼöʹÓÃÕâÖÖ·½·¨À´½â¾ö×ÊÔ´Ãû³åÍ»¡£

4¡¢×é¼þ»¯ÏîÄ¿µÄ¹¤³ÌÀàÐÍ

ÔÚ×é¼þ»¯¹¤³ÌÄ£ÐÍÖÐÖ÷ÒªÓУºapp¿Ç¹¤³Ì¡¢ÒµÎñ×é¼þºÍ¹¦ÄÜ×é¼þ3ÖÖÀàÐÍ£¬¶øÒµÎñ×é¼þÖеÄMain×é¼þºÍ¹¦ÄÜ×é¼þÖеÄCommon×é¼þ±È½ÏÌØÊ⣬ÏÂÃæ½«·Ö±ð½éÉÜ¡£

1£©app¿Ç¹¤³Ì

app¿Ç¹¤³ÌÊÇ´ÓÃû³ÆÀ´½âÊ;ÍÊÇÒ»¸ö¿Õ¿Ç¹¤³Ì£¬Ã»ÓÐÈκεÄÒµÎñ´úÂ룬Ҳ²»ÄÜÓÐActivity£¬µ«ËüÓÖ±ØÐë±»µ¥¶À»®·Ö³ÉÒ»¸ö×é¼þ£¬¶ø²»ÄÜÈںϵ½ÆäËû×é¼þÖУ¬ÊÇÒòΪËüÓÐÈçϼ¸µãÖØÒª¹¦ÄÜ£º

1¡¢app¿Ç¹¤³ÌÖÐÉùÃ÷ÁËÎÒÃÇAndroidÓ¦ÓÃµÄ Application£¬Õâ¸ö Application ±ØÐë¼Ì³Ð×Ô Common×é¼þÖÐµÄ BaseApplication£¬ÒòΪÎÒÃDZØÐëÔÚÓ¦ÓÃµÄ Application ÖÐÉùÃ÷ÎÒÃÇÏîÄ¿ÖÐËùÓÐʹÓõ½µÄÒµÎñ×é¼þ£¬»¹¿ÉÒÔÔÚÕâ¸ö ApplicationÖгõʼ»¯ÎÒÃǹ¤³ÌÖÐʹÓõ½µÄ¿âÎļþ£¬»¹¿ÉÒÔÔÚÕâÀï½â¾öAndroidÒýÓ÷½·¨Êý²»Äܳ¬¹ý 65535 µÄÏÞÖÆ£¬¶Ô±ÀÀ£Ê¼þµÄ²¶»ñºÍ·¢ËÍÒ²¿ÉÒÔÔÚÕâÀïÉùÃ÷¡£

2¡¢app¿Ç¹¤³ÌµÄ AndroidManifest.xml ÊÇÎÒAndroidÓ¦Óõĸù±íµ¥£¬Ó¦ÓõÄÃû³Æ¡¢Í¼±êÒÔ¼°ÊÇ·ñÖ§³Ö±¸·ÝµÈµÈÊôÐÔ¶¼ÊÇÔÚÕâ·Ý±íµ¥ÖÐÅäÖõ쬯äËû×é¼þÖÐµÄ±íµ¥×îÖÕÔÚ¼¯³É¿ª·¢Ä£Ê½Ï¶¼±»ºÏ²¢µ½Õâ·Ý AndroidManifest.xml ÖС£ÁíÍâÔÚÕâ·Ý±íµ¥Öл¹ÉùÃ÷ÁËÕû¸öÓ¦ÓóÌÐòµÄ·ÓÉЭÒ飬ÓÃÓÚ´¦Àí×é¼þÌø×ªµÄ URL¡£

3¡¢app¿Ç¹¤³ÌµÄ build.gradle ÊDZȽÏÌØÊâµÄ£¬app¿Ç²»¹ÜÊÇÔÚ¼¯³É¿ª·¢Ä£Ê½»¹ÊÇ×é¼þ¿ª·¢Ä£Ê½£¬ËüµÄÊôÐÔʼÖÕ¶¼ÊÇ£ºcom.android.application£¬ÒòΪ×îÖÕÆäËûµÄ×é¼þ¶¼Òª±»app¿Ç¹¤³ÌËùÒÀÀµ£¬±»´ò°ü½øapp¿Ç¹¤³ÌÖУ¬ÕâÒ»µã´Ó×é¼þ»¯¹¤³ÌÄ£ÐÍͼÖоÍÄÜÌåÏÖ³öÀ´£¬ËùÒÔapp¿Ç¹¤³ÌÊDz»ÐèÒªµ¥¶Àµ÷ÊÔµ¥¶À¿ª·¢µÄ¡£ÁíÍâAndroidÓ¦ÓõĴò°üÇ©Ãû£¬ÒÔ¼°buildTypesºÍdefaultConfig¶¼ÐèÒªÔÚÕâÀïÅäÖ㬶øËüµÄdependenciesÔòÐèÒª¸ù¾ÝisModuleµÄÖµ·Ö±ðÒÀÀµ²»Í¬µÄ×é¼þ£¬ÔÚ×é¼þ¿ª·¢Ä£Ê½ÏÂapp¿Ç¹¤³ÌÖ»ÐèÒªÒÀÀµCommon×é¼þ£¬»òÕßΪÁË·ÀÖ¹±¨´íÒ²¿ÉÒÔ¸ù¾Ýʵ¼ÊÇé¿öÒÀÀµÆäËû¹¦ÄÜ×é¼þ£¬¶øÔÚ¼¯³ÉģʽÏÂapp¿Ç¹¤³Ì±ØÐëÒÀÀµËùÓÐÔÚÓ¦ÓÃApplicationÖÐÉùÃ÷µÄÒµÎñ×é¼þ£¬²¢ÇÒ²»ÐèÒªÔÙÒÀÀµÈκι¦ÄÜ×é¼þ¡£

ÏÂÃæÊÇÒ»·Ý app¿Ç¹¤³Ì µÄ build.gradleÎļþ£º

apply plugin: 'com.android.application'
static def buildTime() {
return new Date().format("yyyyMMdd");
}
android {
signingConfigs {
release {
keyAlias 'guiying712'
keyPassword 'guiying712'
storeFile file('/mykey.jks')
storePassword 'guiying712'
}
}
compileSdkVersion rootProject .ext.compileSdkVersion
buildToolsVersion rootProject .ext.buildToolsVersion
defaultConfig {
applicationId " com.guiying.androidmodulepattern"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode rootProject.ext.versionCode
versionName rootProject.ext.versionName
multiDexEnabled false
//´ò°üʱ¼ä
resValue "string", "build_time", buildTime()
}
buildTypes {
release {
//¸ü¸ÄAndroidManifest.xmlÖÐÔ¤Ïȶ¨ÒåºÃռλ·ûÐÅÏ¢
//manifestPlaceholders = [app_icon: "@drawable/icon"]
// ²»ÏÔʾLog
buildConfigField "boolean", "LEO_DEBUG", "false"
//ÊÇ·ñzip¶ÔÆë
zipAlignEnabled true
// Ëõ¼õresourceÎļþ
shrinkResources true
//Proguard
minifyEnabled true
proguardFiles getDefaultProguardFile( 'proguard-android.txt'), 'proguard-rules.pro'
//Ç©Ãû
signingConfig signingConfigs.release
}
debug {
//¸øapplicationIdÌí¼Óºó׺¡°.debug¡±
applicationIdSuffix ".debug"
//manifestPlaceholders = [app_icon: "@drawable/launch_beta"]
buildConfigField "boolean", "LOG_DEBUG", "true"
zipAlignEnabled false
shrinkResources false
minifyEnabled false
debuggable true
}
}

}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
annotationProcessor "com.github.mzule. activityrouter:compiler: $rootProject.annotationProcessor"
if (isModule.toBoolean()) {
compile project(':lib_common')
} else {
compile project(':module_main')
compile project(':module_girls')
compile project(':module_news')
}
}

2£©¹¦ÄÜ×é¼þºÍCommon×é¼þ

¹¦ÄÜ×é¼þÊÇΪÁËÖ§³ÅÒµÎñ×é¼þµÄijЩ¹¦Äܶø¶ÀÁ¢»®·Ö³öÀ´µÄ×é¼þ£¬¹¦ÄÜʵÖÊÉϸúÏîÄ¿ÖÐÒýÈëµÄµÚÈý·½¿âÊÇÒ»ÑùµÄ£¬¹¦ÄÜ×é¼þµÄÌØÕ÷ÈçÏ£º

1¡¢¹¦ÄÜ×é¼þµÄ AndroidManifest.xml ÊÇÒ»ÕÅ¿Õ±í£¬ÕâÕűíÖÐÖ»Óй¦ÄÜ×é¼þµÄ°üÃû£»

2¡¢¹¦ÄÜ×é¼þ²»¹ÜÊÇÔÚ¼¯³É¿ª·¢Ä£Ê½Ï»¹ÊÇ×é¼þ¿ª·¢Ä£Ê½ÏÂÊôÐÔʼÖÕÊÇ£º com.android.library£¬ËùÒÔ¹¦ÄÜ×é¼þÊDz»ÐèÒª¶ÁÈ¡ gradle.properties ÖÐµÄ isModule ÖµµÄ£»ÁíÍ⹦ÄÜ×é¼þµÄ build.gradle Ò²ÎÞÐèÉèÖà buildTypes £¬Ö»ÐèÒª dependencies Õâ¸ö¹¦ÄÜ×é¼þÐèÒªµÄjar°üºÍ¿ªÔ´¿â¡£

ÏÂÃæÊÇÒ»·ÝÆÕͨµÄ¹¦ÄÜ×é¼þµÄ build.gradleÎļþ£º

apply plugin: 'com.android.library'
android {
compileSdkVersion rootProject. ext.compileSdkVersion
buildToolsVersion rootProject. ext.buildToolsVersion
defaultConfig {
minSdkVersion rootProject. ext.minSdkVersion
targetSdkVersion rootProject. ext.targetSdkVersion
versionCode rootProject. ext.versionCode
versionName rootProject. ext.versionName
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}

Common×é¼þ³ýÁËÓй¦ÄÜ×é¼þµÄÆÕ±éÊôÐÔÍ⣬»¹¾ßÓÐÆäËû¹¦ÄÜ£º

1¡¢Common×é¼þµÄ AndroidManifest.xml ²»ÊÇÒ»ÕÅ¿Õ±í£¬ÕâÕűíÖÐÉùÃ÷ÁËÎÒÃÇ AndroidÓ¦ÓÃÓõ½µÄËùÓÐʹÓÃȨÏÞ uses-permission ºÍ uses-feature£¬·Åµ½ÕâÀïÊÇÒòΪÔÚ×é¼þ¿ª·¢Ä£Ê½Ï£¬ËùÓÐÒµÎñ×é¼þ¾ÍÎÞÐèÔÚ×Ô¼ºµÄ AndroidManifest.xm ÉùÃ÷×Ô¼ºÒªÓõ½µÄȨÏÞÁË¡£

2¡¢Common×é¼þµÄ build.gradle ÐèҪͳһÒÀÀµÒµÎñ×é¼þÖÐÓõ½µÄ µÚÈý·½ÒÀÀµ¿âºÍjar°ü£¬ÀýÈçÎÒÃÇÓõ½µÄActivityRouter¡¢OkhttpµÈµÈ¡£

3¡¢Common×é¼þÖзâ×°ÁËAndroidÓ¦ÓÃµÄ BaseÀàºÍÍøÂçÇëÇ󹤾ߡ¢Í¼Æ¬¼ÓÔØ¹¤¾ßµÈµÈ£¬¹«ÓÃµÄ widget¿Ø¼þÒ²Ó¦¸Ã·ÅÔÚCommon ×é¼þÖУ»ÒµÎñ×é¼þÖж¼Óõ½µÄÊý¾ÝÒ²Ó¦·ÅÓÚCommon×é¼þÖУ¬ÀýÈç±£´æµ½ SharedPreferences ºÍ DataBase ÖеĵǽÊý¾Ý£»

4¡¢Common×é¼þµÄ×ÊÔ´ÎļþÖÐÐèÒª·ÅÖÃÏîÄ¿¹«ÓÃµÄ Drawable¡¢layout¡¢sting¡¢dimen¡¢colorºÍstyle µÈµÈ£¬ÁíÍâÏîÄ¿ÖÐµÄ Activity Ö÷Ìâ±ØÐ붨ÒåÔÚ CommonÖУ¬·½±ãºÍ BaseActivity ÅäºÏ±£³ÖÕû¸öAndroidÓ¦ÓõĽçÃæ·ç¸ñͳһ¡£

ÏÂÃæÊÇÒ»·Ý Common¹¦ÄÜ×é¼þµÄ build.gradleÎļþ£º

apply plugin: 'com.android.library'
android {
compileSdkVersion rootProject. ext.compileSdkVersion
buildToolsVersion rootProject. ext.buildToolsVersion
defaultConfig {
minSdkVersion rootProject. ext.minSdkVersion
targetSdkVersion rootProject. ext.targetSdkVersion
versionCode rootProject. ext.versionCode
versionName rootProject. ext.versionName
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
//Android Support
compile "com.android.support:appcompat-v7: $rootProject.supportLibraryVersion"
compile "com.android.support:design: $rootProject.supportLibraryVersion"
compile "com.android.support:percent: $rootProject.supportLibraryVersion"
//ÍøÂçÇëÇóÏà¹Ø
compile "com.squareup.retrofit2:retrofit: $rootProject.retrofitVersion"
compile "com.squareup.retrofit2:retrofit-mock: $rootProject.retrofitVersion"
compile "com.github.franmontiel:PersistentCookieJar: $rootProject.cookieVersion"
//Îȶ¨µÄ
compile "com.github.bumptech.glide:glide: $rootProject.glideVersion"
compile "com.orhanobut:logger: $rootProject.loggerVersion"
compile "org.greenrobot:eventbus: $rootProject.eventbusVersion"
compile "com.google.code.gson:gson: $rootProject.gsonVersion"
compile "com.github.chrisbanes:PhotoView: $rootProject.photoViewVersion"
compile "com.jude:easyrecyclerview: $rootProject.easyRecyclerVersion"
compile "com.github.GrenderG:Toasty: $rootProject.toastyVersion"
//router
compile "com.github.mzule.activityrouter :activityrouter: $rootProject.routerVersion"
}

3£©ÒµÎñ×é¼þºÍMain×é¼þ

ÒµÎñ×é¼þ¾ÍÊǸù¾ÝÒµÎñÂß¼­µÄ²»Í¬²ð·Ö³öÀ´µÄ×é¼þ£¬ÒµÎñ×é¼þµÄÌØÕ÷ÈçÏ£º

1¡¢ÒµÎñ×é¼þÖÐÒªÓÐÁ½ÕÅAndroidManifest.xml£¬·Ö±ð¶ÔÓ¦×é¼þ¿ª·¢Ä£Ê½ºÍ¼¯³É¿ª·¢Ä£Ê½£¬ÕâÁ½ÕűíµÄÇø±ðÇë²é¿´ ×é¼þÖ®¼äAndroidManifestºÏ²¢ÎÊÌâ С½Ú¡£

2¡¢ÒµÎñ×é¼þÔÚ¼¯³ÉģʽÏÂÊDz»ÄÜÓÐ×Ô¼ºµÄApplicationµÄ£¬µ«ÔÚ×é¼þ¿ª·¢Ä£Ê½ÏÂÓÖ±ØÐëʵÏÖ×Ô¼ºµÄApplication²¢ÇÒÒª¼Ì³Ð×ÔCommon×é¼þµÄBaseApplication£¬²¢ÇÒÕâ¸öApplication²»Äܱ»ÒµÎñ×é¼þÖеĴúÂëÒýÓã¬ÒòΪËüµÄ¹¦ÄܾÍÊÇΪÁËʹҵÎñ×é¼þ´ÓBaseApplicationÖлñÈ¡µÄÈ«¾ÖContextÉúЧ£¬»¹Óгõʼ»¯Êý¾ÝÖ®Óá£

3¡¢ÒµÎñ×é¼þÓÐdebugÎļþ¼Ð£¬Õâ¸öÎļþ¼ÐÔÚ¼¯³ÉģʽÏ»á´ÓÒµÎñ×é¼þµÄ´úÂëÖÐÅųýµô£¬ËùÒÔdebugÎļþ¼ÐÖеÄÀ಻Äܱ»ÒµÎñ×é¼þÇ¿ÒýÓã¬ÀýÈç×é¼þģʽÏ嵀 Application ¾ÍÊÇÖÃÓÚÕâ¸öÎļþ¼ÐÖУ¬»¹ÓÐ×é¼þģʽÏ¿ª·¢¸øÄ¿±ê Activity ´«µÝ²ÎÊýµÄÓÃµÄ launch Activity Ò²Ó¦¸ÃÖÃÓÚ debug Îļþ¼ÐÖУ»

4¡¢ÒµÎñ×é¼þ±ØÐëÔÚ×Ô¼ºµÄ JavaÎļþ¼ÐÖд´½¨ÒµÎñ×é¼þÉùÃ÷À࣬ÒÔʹ app¿Ç¹¤³Ì ÖÐµÄ Ó¦ÓÃApplicationÄܹ»ÒýÓã¬ÊµÏÖ×é¼þÌø×ª£¬¾ßÌåÇë²é¿´ ×é¼þÖ®¼äµ÷ÓúÍͨÐŠС½Ú£»

5¡¢ÒµÎñ×é¼þ±ØÐëÔÚ×Ô¼ºµÄ build.gradle Öиù¾Ý isModule ÖµµÄ²»Í¬¸Ä±ä×Ô¼ºµÄÊôÐÔ£¬ÔÚ×é¼þģʽÏÂÊÇ£ºcom.android.application£¬¶øÔÚ¼¯³ÉģʽÏÂcom.android.library£»Í¬Ê±»¹ÐèÒªÔÚbuild.gradleÅäÖÃ×ÊÔ´Îļþ£¬Èç Ö¸¶¨²»Í¬¿ª·¢Ä£Ê½ÏµÄAndroidManifest.xmlÎļþ·¾¶£¬ÅųýdebugÎļþ¼ÐµÈ£»ÒµÎñ×é¼þ»¹±ØÐëÔÚdependenciesÖÐÒÀÀµCommon×é¼þ£¬²¢ÇÒÒýÈëActivityRouterµÄ×¢½â´¦ÀíÆ÷annotationProcessor£¬ÒÔ¼°ÒÀÀµÆäËûÓõ½µÄ¹¦ÄÜ×é¼þ¡£

ÏÂÃæÊÇÒ»·ÝÆÕͨҵÎñ×é¼þµÄ build.gradleÎļþ£º

if (isModule.toBoolean()) {
apply plugin: 'com.android.application'
} else {
apply plugin: 'com.android.library'
}
android {
compileSdkVersion rootProject .ext.compileSdkVersion
buildToolsVersion rootProject .ext.buildToolsVersion
defaultConfig {
minSdkVersion rootProject .ext.minSdkVersion
targetSdkVersion rootProject .ext.targetSdkVersion
versionCode rootProject .ext.versionCode
versionName rootProject .ext.versionName
}
sourceSets {
main {
if (isModule.toBoolean()) {
manifest.srcFile 'src/main/ module/AndroidManifest.xml'
} else {
manifest.srcFile 'src/main/ AndroidManifest.xml'
//¼¯³É¿ª·¢Ä£Ê½ÏÂÅųýdebugÎļþ¼ÐÖеÄËùÓÐJavaÎļþ
java {
exclude 'debug/**'
}
}
}
}
//ÉèÖÃÁËresourcePrefixÖµºó£¬ËùÓеÄ×ÊÔ´Ãû±ØÐëÒÔÖ¸¶¨µÄ×Ö·û´®×öǰ׺£¬·ñÔò»á±¨´í¡£
//µ«ÊÇresourcePrefixÕâ¸öÖµÖ»ÄÜÏÞ¶¨xmlÀïÃæµÄ×ÊÔ´£¬²¢²»ÄÜÏÞ¶¨Í¼Æ¬×ÊÔ´£¬ËùÓÐͼƬ×ÊÔ´ÈÔÈ»ÐèÒªÊÖ¶¯È¥ÐÞ¸Ä×ÊÔ´Ãû¡£
//resourcePrefix "girls_"

}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
annotationProcessor "com.github.mzule. activityrouter:compiler: $rootProject.annotationProcessor"
compile project(':lib_common')
}

Main×é¼þ³ýÁËÓÐÒµÎñ×é¼þµÄÆÕ±éÊôÐÔÍ⣬»¹ÓÐÒ»ÏîÖØÒª¹¦ÄÜ£º

1¡¢Main×é¼þ¼¯³ÉģʽϵÄAndroidManifest.xmlÊǸúÆäËûÒµÎñ×é¼þ²»Ò»ÑùµÄ£¬Main×é¼þµÄ±íµ¥ÖÐÉùÃ÷ÁËÎÒÃÇÕû¸öAndroidÓ¦ÓõÄlaunch Activity£¬Õâ¾ÍÊÇMain×é¼þµÄ¶ÀÌØÖ®´¦£»ËùÒÔÎÒ½¨ÒéSplashActivity¡¢µÇ½ActivityÒÔ¼°Ö÷½çÃæ¶¼Ó¦ÊôÓÚMain×é¼þ£¬Ò²¾ÍÊÇ˵AndroidÓ¦ÓÃÆô¶¯ºóÒªµ÷ÓõÄÒ³Ãæ¶¼Ó¦ÊôÓÚMain×é¼þ¡£

5¡¢×é¼þ»¯ÏîÄ¿µÄ»ìÏý·½°¸

×é¼þ»¯ÏîÄ¿µÄJava´úÂë»ìÏý·½°¸²ÉÓÃÔÚ¼¯³Éģʽϼ¯ÖÐÔÚapp¿Ç¹¤³ÌÖлìÏý£¬¸÷¸öÒµÎñ×é¼þ²»ÅäÖûìÏýÎļþ¡£¼¯³É¿ª·¢Ä£Ê½ÏÂÔÚapp¿Ç¹¤³ÌÖÐbuild.gradleÎļþµÄrelease¹¹½¨ÀàÐÍÖпªÆô»ìÏýÊôÐÔ£¬ÆäËûbuildTypesÅäÖ÷½°¸¸úÆÕͨÏîÄ¿±£³ÖÒ»Ö£¬Java»ìÏýÅäÖÃÎļþÒ²·ÅÖÃÔÚapp¿Ç¹¤³ÌÖУ¬¸÷¸öÒµÎñ×é¼þµÄ»ìÏýÅäÖùæÔò¶¼Ó¦¸ÃÔÚapp¿Ç¹¤³ÌÖеĻìÏýÅäÖÃÎļþÖÐÌí¼ÓºÍÐ޸ġ£

Ö®ËùÒÔ²»²ÉÓÃÔÚÿ¸öÒµÎñ×é¼þÖпªÆô»ìÏýµÄ·½°¸£¬ÊÇÒòΪ ×é¼þÔÚ¼¯³Éģʽ϶¼±» Gradle ¹¹½¨³ÉÁË release ÀàÐ͵Äarr°ü£¬Ò»µ©ÒµÎñ×é¼þµÄ´úÂë±»»ìÏý£¬¶øÕâʱºò´úÂëÖÐÓÖ³öÏÖÁËbug£¬½«ºÜÄѸù¾ÝÈÕÖ¾ÕÒ³öµ¼ÖÂbugµÄÔ­Òò£»ÁíÍâÿ¸öÒµÎñ×é¼þÖж¼±£ÁôÒ»·Ý»ìÏýÅäÖÃÎļþ·Ç³£²»±ãÓÚÐ޸ĺ͹ÜÀí£¬ÕâÒ²ÊDz»ÍƼöÔÚÒµÎñ×é¼þµÄ build.gradle ÎļþÖÐÅäÖà buildTypes £¨¹¹½¨ÀàÐÍ£©µÄÔ­Òò¡£

6¡¢¹¤³ÌµÄbuild.gradleºÍgradle.propertiesÎļþ

1£©×é¼þ»¯¹¤³ÌµÄbuild.gradleÎļþ

ÔÚ×é¼þ»¯ÏîÄ¿ÖÐÒòΪÿ¸ö×é¼þµÄ build.gradle ¶¼ÐèÒªÅäÖà compileSdkVersion¡¢buildToolsVersionºÍdefaultConfig µÈµÄ°æ±¾ºÅ£¬¶øÇÒÿ¸ö×é¼þ¶¼ÐèÒªÓõ½ annotationProcessor£¬ÎªÁËÄܹ»Ê¹×é¼þ»¯ÏîÄ¿ÖеÄËùÓÐ×é¼þµÄ build.gradle ÖеÄÕâЩÅäÖö¼Äܱ£³Öͳһ£¬²¢ÇÒÒ²ÊÇΪÁË·½±ãÐ޸İ汾ºÅ£¬ÎÒÃÇͳһÔÚAndroid¹¤³Ì¸ùĿ¼ÏµÄbuild.gradleÖж¨ÒåÕâЩ°æ±¾ºÅ£¬µ±È»ÎªÁË·½±ã¹ÜÀíCommon×é¼þÖеĵÚÈý·½¿ªÔ´¿âµÄ°æ±¾ºÅ£¬×îºÃÒ²ÔÚÕâÀﶨÒåÕâЩ¿ªÔ´¿âµÄ°æ±¾ºÅ£¬È»ºóÔÚ¸÷¸ö×é¼þµÄbuild.gradleÖÐÒýÓÃAndroid¹¤³Ì¸ùĿ¼ÏµÄbuild.gradle¶¨ÒåµÄ°æ±¾ºÅ£¬×é¼þ»¯¹¤³ÌµÄ build.gradle Îļþ´úÂëÈçÏ£º

buildscript {
repositories {
jcenter()
mavenCentral()
}
dependencies {
//classpath "com.android. tools.build:gradle: $localGradlePluginVersion"
//$localGradlePluginVersionÊÇgradle.propertiesÖеÄÊý¾Ý
classpath "com.android. tools.build:gradle: $localGradlePluginVersion"
}
}
allprojects {
repositories {
jcenter()
mavenCentral()
//Add the JitPack repository
maven { url "https://jitpack.io" }
//Ö§³Öarr°ü
flatDir {
dirs 'libs'
}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
// Define versions in a single place
//ʱ¼ä£º2017.2.13£»Ã¿´ÎÐ޸İ汾ºÅ¶¼ÒªÌí¼ÓÐÞ¸Äʱ¼ä
ext {
// Sdk and tools
//localBuildToolsVersionÊÇgradle.propertiesÖеÄÊý¾Ý
buildToolsVersion = localBuildToolsVersion
compileSdkVersion = 25
minSdkVersion = 16
targetSdkVersion = 25
versionCode = 1
versionName = "1.0"
javaVersion = JavaVersion.VERSION_1_8
// App dependencies version
supportLibraryVersion = "25.3.1"
retrofitVersion = "2.1.0"
glideVersion = "3.7.0"
loggerVersion = "1.15"
eventbusVersion = "3.0.0"
gsonVersion = "2.8.0"
photoViewVersion = "2.0.0"
//Ðè¼ì²éÉý¼¶°æ±¾
annotationProcessor = "1.1.7"
routerVersion = "1.2.2"
easyRecyclerVersion = "4.4.0"
cookieVersion = "v1.0.1"
toastyVersion = "1.1.3"
}

2£©×é¼þ»¯¹¤³ÌµÄgradle.propertiesÎļþ

ÔÚ×é¼þ»¯ÊµÊ©Á÷³ÌÖÐÎÒÃÇÁ˽⵽gradle.propertiesÓÐÁ½¸öÊôÐÔ¶ÔÎÒÃǷdz£ÓÐÓãº

1¡¢ÔÚAndroidÏîÄ¿ÖеÄÈκÎÒ»¸öbuild.gradleÎļþÖж¼¿ÉÒÔ°Ñgradle.propertiesÖеij£Á¿¶ÁÈ¡³öÀ´£¬²»¹ÜÕâ¸öbuild.gradleÊÇ×é¼þµÄ»¹ÊÇÕû¸öÏîÄ¿¹¤³ÌµÄbuild.gradle£»

2¡¢gradle.propertiesÖеÄÊý¾ÝÀàÐͶ¼ÊÇStringÀàÐÍ£¬Ê¹ÓÃÆäËûÊý¾ÝÀàÐÍÐèÒª×ÔÐÐת»»£»

ÀûÓÃgradle.propertiesµÄÊôÐÔ²»½ö¿ÉÒÔ½â¾ö¼¯³É¿ª·¢Ä£Ê½ºÍ×é¼þ¿ª·¢Ä£Ê½µÄת»»£¬¶øÇÒ»¹¿ÉÒÔ½â¾öÔÚ¶àÈËЭͬ¿ª·¢AndroidÏîÄ¿µÄʱºò£¬ÒòΪ¿ª·¢ÍŶӳÉÔ±µÄAndroid¿ª·¢»·¾³£¨¿ª·¢»·¾³Ö¸Android SDKºÍAndroidStudio£©²»Ò»Ö¶øµ¼ÖÂÆµ·±¸Ä±äÏßÉÏÏîÄ¿µÄbuild.gradleÅäÖá£

ÔÚÿ¸öAndroid×é¼þµÄ build.gradle ÖÐÓÐÒ»¸öÊôÐÔ£ºbuildToolsVersion£¬±íʾ¹¹½¨¹¤¾ßµÄ°æ±¾ºÅ£¬Õâ¸öÊôÐÔÖµ¶ÔÓ¦ AndroidSDK ÖÐµÄ Android SDK Build-tools£¬Õý³£Çé¿öÏ build.gradle ÖÐµÄ buildToolsVersion ¸úÄãµçÄÔÖÐ Android SDK Build-tools µÄ×îа汾ÊÇÒ»Öµģ¬±ÈÈçÏÖÔÚ Android SDK Build-tools µÄ×îеİ汾ÊÇ£º25.0.3£¬ÄÇôÎÒµÄAndroidÏîÄ¿ÖÐ build.gradle ÖÐµÄ buildToolsVersion °æ±¾ºÅÒ²ÊÇ 25.0.3£¬µ«ÊÇÒ»µ©Ò»¸öAndroidÏîÄ¿ÊÇÓɺü¸¸öÈËͬʱ¿ª·¢£¬×Ü»á³öÏÖÿ¸öÈ˵Ŀª·¢»·¾³ Android SDK Build-tools ÊǶ¼ÊDz»Ò»ÑùµÄ£¬²¢²»ÊÇËùÓÐÈ˶¼»á¾­³£Éý¼¶¸üРAndroid SDK£¬¶øÇÒ´úÂëÊDZ£´æµ½ÏßÉÏ»·¾³µÄ£¨ÀýÈçʹÓà SVN/Git µÈ¹¤¾ß£©£¬Ä³¸ö¿ª·¢ÈËÔ±Ìá½»´úÂëºóÏßÉÏAndroidÏîÄ¿ÖÐ build.gradle ÖÐµÄ buildToolsVersion Ò²»á±»²»¶ÏµØ¸Ä±ä¡£

ÁíÍâÒ»¸öÔ­ÒòÊÇÒòΪAndroid¹¤³ÌµÄ¸ùĿ¼Ï嵀 build.gradle ÉùÃ÷ÁË Android Gradle ¹¹½¨¹¤¾ß£¬¶øÕâ¸ö¹¤¾ßÒ²ÊÇÓа汾ºÅµÄ£¬¶øÇÒ Gradle Build Tools µÄ°æ±¾ºÅ¸ú AndroidStudio °æ±¾ºÅÒ»Öµģ¬µ«ÊÇÓÐЩ¿ª·¢ÈËÔ±»ù±¾ºÜ¾Ã¶¼²»»áÉý¼¶×Ô¼ºµÄ AndroidStudio °æ±¾£¬µ¼ÖÂÍŶÓÖÐÿ¸ö¿ª·¢ÈËÔ±µÄ Gradle Build Tools µÄ°æ±¾ºÅÒ²²»Ò»Ö¡£

Èç¹ûÿ´Îͬ²½´úÂëºóÕâÁ½¸ö¹¤¾ßµÄ°æ±¾ºÅ±»¸Ä±äÁË£¬¿ª·¢ÈËÔ±¿ÉÒÔ×Ô¼ºÊÖ¶¯¸Ä»ØÀ´£¬²¢ÇÒ²»Òª°Ñ¸Ä¶¯¹¤¾ß°æ±¾ºÅµÄ´úÂëÌá½»µ½ÏßÉÏ»·¾³£¬ÕâÑù»¹¿ÉÒÔÃãÇ¿¼ÌÐø¿ª·¢£»µ«ÊǺܶ๫˾¶¼»áʹÓóÖÐø¼¯³É¹¤¾ß£¨ÀýÈçJenkins£©ÓÃÓÚ³ÖÐøµÄÈí¼þ°æ±¾·¢²¼£¬¶øAndroid³ö°üÊÇÐèÒª Android SDK Build-tools ºÍ Gradle Build Tools ÅäºÏµÄ£¬Ò»µ©Ìá½»µ½ÏßÉϵİ汾¸ú³ÖÐø¼¯³É¹¤¾ßËùÒÀÀµµÄAndroid»·¾³¹¹½¨¹¤¾ß°æ±¾ºÅ²»Ò»Ö¾ͻᵼÖÂAndroid´ò°üʧ°Ü¡£

ΪÁ˽â¾öÉÏÃæÎÊÌâ¾Í±ØÐ뽫AndroidÏîÄ¿ÖÐ build.gradle ÖÐµÄ buildToolsVersion ºÍ GradleBuildTools °æ±¾ºÅ´ÓÏßÉÏ´úÂë¸ôÀë³öÀ´£¬±£Ö¤ÏßÉÏ´úÂëµÄ buildToolsVersion ºÍ Gradle Build Tools °æ±¾ºÅ²»»á±»ÈËΪ¸Ä±ä¡£

¾ßÌåµÄʵʩÁ÷³Ì´ó¼Ò¿ÉÒԲ鿴ÎÒµÄÕâÆª²©ÎÄ£º AndroidStudio±¾µØ»¯ÅäÖÃgradleµÄbuildToolsVersionºÍgradleBuildTools

7¡¢×é¼þ»¯ÏîÄ¿RouterµÄÆäËû·½°¸-ARouter

ÔÚ×é¼þ»¯ÏîÄ¿ÖÐʹÓõ½µÄ¿ç×é¼þÌø×ª¿âActivityRouter¿ÉÒÔʹÓð¢Àï°Í°ÍµÄ¿ªÔ´Â·ÓÉÏîÄ¿£º°¢Àï°Í°ÍARouter£»

ActivityRouterºÍARouterµÄ½ÓÈë×é¼þ»¯ÏîÄ¿µÄ·½Ê½ÊÇÒ»ÑùµÄ£¬ActivityRouterÌṩµÄ¹¦ÄÜĿǰARouterҲȫ²¿Ö§³Ö£¬µ«ÊÇARouter»¹Ö§³ÖÒÀÀµ×¢Èë½âñî£¬Ò³Ãæ¡¢À¹½ØÆ÷¡¢·þÎñµÈ×é¼þ¾ù»á×Ô¶¯×¢²áµ½¿ò¼Ü¡£¶ÔÓÚ´ó¼ÒÀ´Ëµ£¬Ã»ÓÐ×îºÃµÄÖ»ÓÐ×îÊʺϵ쬴ó¼Ò¿ÉÒÔ¸ù¾Ý×Ô¼ºµÄÏîĿѡÔñºÏÊʵÄRouter¡£

ÏÂÃæ½«½éÉÜARouterµÄ»ù´¡Ê¹Ó÷½·¨£¬¸ü¶à¹¦ÄÜ»¹Ðè´ó¼ÒÈ¥Github×Ô¼ºÑ§Ï°£»

1¡¢Ê×ÏÈ ARouter Õâ¸ö¿ò¼ÜÊÇÐèÒª³õʼ»¯SDKµÄ£¬ËùÒÔÄãÐèÒªÔÚ¡°app¿Ç¹¤³Ì¡±ÖеÄÓ¦ÓÃApplicationÖмÓÈëÏÂÃæµÄ´úÂ룬עÒ⣺ÔÚ debug ģʽÏÂÒ»¶¨Òª openDebug£º

if (BuildConfig.DEBUG) {
//Ò»¶¨ÒªÔÚARouter.init֮ǰµ÷ÓÃopenDebug
ARouter.openDebug();
ARouter.openLog();
}
ARouter.init(this);

2¡¢Ê×ÏÈÎÒÃÇÒÀÈ»ÐèÒªÔÚ Common ×é¼þÖÐµÄ build.gradle ½«ARouter ÒÀÀµ½øÀ´£¬·½±ãÎÒÃÇÔÚÒµÎñ×é¼þÖе÷Óãº

dependencies {
compile fileTree( dir: 'libs', include: ['*.jar'])
//router
compile 'com.alibaba: arouter-api:1.2.1.1'
}

3¡¢È»ºóÔÚÿһ¸öÒµÎñ×é¼þµÄ build.gradle ¶¼ÒýÈëARouter µÄ Annotation´¦ÀíÆ÷£¬´úÂëÈçÏ£º

android {
defaultConfig {
...
javaCompileOptions {
annotationProcessorOptions {
arguments = [ moduleName : project.getName() ]
}
}
}
}
dependencies {
compile fileTree( dir: 'libs', include: ['*.jar'])
annotationProcessor 'com.alibaba:arouter-compiler:1.0.3'
}

4¡¢ÓÉÓÚARouterÖ§³Ö×Ô¶¯×¢²áµ½¿ò¼Ü£¬ËùÒÔÎÒÃDz»ÓÃÏñActivityRouterÄÇÑùÔÚ¸÷¸ö×é¼þÖÐÉùÃ÷×é¼þ£¬µ±È»¸ü²»ÐèÒªÔÚApplicationÖйÜÀí×é¼þÁË¡£ ÎÒÃǸø Girls×é¼þ ÖÐµÄ GirlsActivity Ìí¼Ó×¢½â£º@Route(path = ¡°/girls/list¡±)£¬ÐèҪעÒâµÄÊÇÕâÀïµÄ·¾¶ÖÁÉÙÐèÒªÓÐÁ½¼¶£¬/xx/xx£¬Ö®ËùÒÔÕâÑùÊÇÒòΪARouterʹÓÃÁË·¾¶ÖеÚÒ»¶Î×Ö·û´®(/*/)×÷Ϊ·Ö×飬±ÈÈçÏñÉÏÃæµÄ¡±girls¡±£¬¶ø·Ö×éÕâ¸ö¸ÅÄî¾ÍÓеãÀàËÆÓÚActivityRouterÖеÄ×é¼þÉùÃ÷ @Module £¬´úÂëÈçÏ£º

@Route(path = "/girls/list")
public class GirlsActivity extends BaseActionBarActivity {
private GirlsView mView;
private GirlsContract.Presenter mPresenter;
@Override
protected int setTitleId() {
return R.string.girls_activity_title;
}
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mView = new GirlsView(this);
setContentView(mView);
mPresenter = new GirlsPresenter(mView);
mPresenter.start();
}
}

È»ºóÎÒÃǾͿÉÒÔÔÚÏîÄ¿ÖеÄÈκÎÒ»¸öµØ·½Í¨¹ý URLµØÖ· £º /girls/list, µ÷Óà GirlsActivity£¬·½·¨ÈçÏ£º

ARouter.getInstance().build( "/girls/list").navigation();

8¡¢½áÊøÓï

×é¼þ»¯Ïà±ÈÓÚµ¥Ò»¹¤³ÌÓÅÊÆÊÇÏÔ¶øÒ×¼ûµÄ£º

  1. ¼Ó¿ì±àÒëËÙ¶È£¬Ìá¸ß¿ª·¢Ð§ÂÊ£»
  2. ×ÔÓÉÑ¡Ôñ¿ª·¢¿ò¼Ü£¨MVC /MVP / MVVM /£©£»
  3. ·½±ã×öµ¥Ôª²âÊÔ£»
  4. ´úÂë¼Ü¹¹¸ü¼ÓÇåÎú£¬½µµÍÏîÄ¿µÄά»¤ÄѶȣ»
  5. ÊʺÏÓÚÍŶӿª·¢£»
  6. Ϊ¹«Ë¾½ÚÊ¡Á˾­Óª³É±¾£»
   
2548 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì