ǰÑÔ
×öÕâ¸öµÄ³õÖÔÊÇ·¢ÏÖÏîÄ¿ÖеıÀÀ£ÎÊÌ⣨¼´Îȶ¨ÐÔ£©¡£Monkey´ï²»µ½È«¸²¸Ç£¬Ò²ÊÔ¹ý˼º®µÄAppCrawler£¬ÎÞÄÎËÙ¶ÈÉϲ»Ì«ÀíÏë¡£ÎÒÐèÒªµÄÊǸü¿ìµÄ·´À¡½á¹û£¬ÓÚÊǺõ×ÅÊÖ×Ô¼ºÐ´Ò»¸ö·½°¸£¬Ò²µ±×öÊÇÌá¸ß±àÂëÄÜÁ¦£¬»òÕß˵¶ÔAndroidÓиüÉîÈëµÄÀí½â¡£
½â¾öÁËʲô
³õÆÚÄ¿±êÊÇÏëÌæ´úMonkey£¬ÖÚËùÖÜÖªMonkeyµÄËæ»úµã»÷£¬ÒÔ¼°²»¿É¿ØÐÔ£¬²¢²»ÄÜ×öµ½ÍêÕûµÄ±éÀú¡£ËùÒÔµ±ÏÂ×îÖ÷ÒªµÄ¹¦ÄÜÊÇ·¢ÏÖ±ÀÀ£ÎÊÌâ
£¨Èç¼æÈÝÐÔ¡¢»ìÏý¡¢´úÂëÎÊÌâµ¼ÖµıÀÀ££©£¬¶îÍâ¿ÉÒÔ×öµÄÊÇ·¢ÏÖÎÞÊý¾ÝʱµÄ¿Õ°×²¼¾Ö£¨ÅäºÏ½Ó¿Ú¹¤¾ß£¬ÆôÓÿìËÙģʽÑéÖ¤£©¡¢·¢ÏÖÎÞÍøÂçʱÊÇ·ñÏÔʾÎÞÍøÂçµÄ²¼¾Ö£¨¹Ø±ÕÍøÂ磬ÆôÓÿìËÙģʽ£©µÈµÈ¡£
ʹÓÃЧ¹û
ÔÚÎÒÃǵIJúÆ·ÉÏ£¬ÆôÓÃÅÀ³æÄ£Ê½ÊÔÅÜÁ˼¸¸öСʱ·¢ÏÖÁË5¸ö±ÀÀ£ÎÊÌâ¡£µ±È»·¢ÏÖµÚÒ»¸ö±ÀÀ£Ê±×Ô¶¯±éÀú¾ÍÍ£Ö¹ÁË£¬ËüÒÀÀµÓÚ±»²âÓ¦Ó㬱»²âÓ¦ÓñÀÀ££¬ËüÒ²»áһͬÍ˳ö£¬ÕâÊǽÓÏÂÀ´Òª½â¾öµÄÎÊÌ⣨Ôö¼ÓÖØÆô»úÖÆ
£©¡£µ±±ÀÀ£ÎÊÌâ²»ÓèÐÞ¸´Ê±£¬¼ÌÐø±éÀú£¬»¹ÊÇ»á×ßµ½µÚÒ»¸ö±ÀÀ££¨¿É¸´ÏÖÐÔ £©£¬´Ëʱ¿ÉÒ԰ѱÀÀ£µÄActivity¼ÓÈëºöÂÔÁÐ±í¡£
±ÀÀ£ÎÊÌ⣺
·¢ÏֵıÀÀ£ÎÊÌâ¶¼ÊÇÕý³£²Ù×÷µÄ£¬·ÇÒì³£²Ù×÷£¨¾ÙÀý£º·ÇÈËÀàÊÖËٵĵã»÷µÈµÈ£©¡£»»¾ä»°Ëµ¾ÍÊÇÓû§Ò²»áÓöµ½¸ÃÎÊÌâ
Éó¤·¢ÏÖÒì²½ÇëÇóµ¼ÖµıÀÀ£ÎÊÌâ
Òì²½ÇëÇóÄõ½Êý¾Ýºó¸üÐÂUI£¬ÓÉÓÚUI±»Ïú»Ùµ¼ÖµıÀÀ£
Ϊʲô˵ÊÇÉ󤣿
±éÀúÂß¼»ùÓÚActivity£¬µã»÷ViewÌø³ö±¾Activityºó°´·µ»Ø¼ü»Øµ½±éÀúActivity
µ±ÍøÂç²»Îȶ¨Ê±£¬Êý¾Ý·µ»ØÑÓʱ¼Ó³¤£¬ViewÏú»ÙÁËÊý¾Ý²Å»ØÀ´£¬Èç¹û´Ëʱ´úÂëû´¦ÀíºÃ¾Í»á·¢Éú±ÀÀ£
½¨Òé±éÀúʱÇл»µ½ÈõÍø»·¾³
ÌØÐÔ
¿É¿çÓ¦ÓÃ
²¹ÉÏRobotium²»Ö§³Ö¿çÓ¦ÓõĶ̰å
×Ô¶¯±éÀúʱ²»»áÓоßÌåµÄ¿çÓ¦ÓòÙ×÷£¬Î¨Ò»³öÏֵĵط½ÔÚAndroid 6.0ÒÔÉϰ汾Æô¶¯Ó¦ÓÃʱµÄÊÚȨ²Ù×÷£¨¿ÉÄÜ´æÔÚ¼æÈÝÐÔÎÊÌ⣩
¿çÓ¦ÓÃÓ¦ÓÃÔÚµ¥¶ÀдÓÃÀýʱ
¿çÓ¦ÓÃÏêÇé
¶àÖÖģʽ
¿ìËÙģʽ£ºÖ»Æô¶¯Activity£¬¿ìËÙ¼ì²â±ÀÀ£ÎÊÌ⣨Èç¼æÈÝÐÔ¡¢»ìÏý¡¢´úÂëÎÊÌâµ¼ÖµıÀÀ££©£¬Ò»°ã¼¸·ÖÖÓ¿ÉÍê³É¡£ÒÀÀµÓÚParams.jsonÎļþ£¬¸ÃÎļþ¿ÉÓÉÂ¼ÖÆÄ£Ê½²úÉú¡£
µü´úģʽ£ºÆô¶¯Activity²¢µã»÷ÿ¸öView¡£ÒÀÀµÓÚParams.jsonÎļþ£¬¸ÃÎļþ¿ÉÓÉÂ¼ÖÆÄ£Ê½²úÉú¡£
ÅÀ³æÄ£Ê½£ºÍ¨¹ýµü´úÖ÷Ò³²¢¼Ç¼Ð¿ªActivity£¬µü´úÍê±Ïºó¶ÁȡпªActivity£¬Ñ»·Íù¸´£¬Ö±ÖÁÎÞеÄActivity¡£
Â¼ÖÆÄ£Ê½£ºÐèÈ˹¤²Ù×÷Ó¦Ó㬼Ǽÿ¸öпªµÄActivity£¬¹©¿ìËÙģʽ¡¢µü´úģʽʹÓá£Â¼ÖÆÄ£Ê½¿ÉÔÚ¹¦ÄܲâÊÔ½×¶ÎʹÓã¬Â¼ÖÆÄ£Ê½Ä¬ÈÏÐÝÃß1¸öСʱ£¬ÆÚ¼ä²Ù×÷Ó¦Óôò¿ªµÄActivity¶¼½«±»¼Ç¼ÏÂÀ´¡£
ÖÇÄÜÊäÈë
¸ù¾ÝÊäÈë¿òÖ§³ÖµÄÊäÈëÀàÐͺÍ×î´ó³¤¶È½øÐÐÊäÈë
Ö§³ÖÊÖ»úºÅ¡¢ÓÊÏä¡¢ÆÕͨÎı¾µÈÀàÐÍ
ºìµã±ê¼Ç
½«Òª±»µã»÷µÄView»áÒÔºìµã±ê¼Ç±£´æÎª½ØÍ¼
Èç¹û·¢ÏÖ½ØÍ¼Ã»Óкìµã»òÕߺìµãλÖÃÃ÷ÏÔ´íÎóʱ£¬²»ÓþªÑÈ£¬ÄÇÒ»¶¨ÊÇÒþ²ØµÄView±»µã»÷ÁË
ûÓкìµã£ºÒþ²ØµÄView×ø±ê²»ÔÚÆÁÄ»·¶Î§
ºìµã±ê¼Ç´íÎ󣺵ã»÷µ½±»ÕÚµ²µÄView£¬Í¨³£·¢ÉúÔÚViewPager²¼¾Ö
ÎÞ¾åÕÚµ²
±»ÕÚµ²µÄViewÒ²¿ÉÒÔµã»÷µ½£¬Òò´ËÎÞÐ軬¶¯²Ù×÷¡£
¾ÙÀý£ºÁбíÒ»´ÎÐÔ¼ÓÔØ10ÌõÊý¾Ý£¬ÆÁĻֻÏÔʾÁË5Ìõ£¬Ê£ÏÂ5ÌõûÓÐÏÔʾµÄÒ²¿ÉÒÔµã»÷µ½¡£
ÍêÈ«±éÀú
Ó¦ÓÃËùÓÐActivity¶¼¿ÉÒÔ±éÀúµ½£¬360¡ãÎÞËÀ½Ç¡£
¿ìËÙģʽ¡¢µü´úģʽ¸²¸Ç¶È×î¸ß¿É´ï100%£¬Í¨¹ýÅÀ³æÄ£Ê½ + Â¼ÖÆÄ£Ê½×éºÏ²úÉúµÄParams.jsonÎļþ£¬»òµ¥¶ÀÂ¼ÖÆÄ£Ê½²úÉúµÄParams.jsonÎļþ¡£
ÅÀ³æÄ£Ê½Òà¿É´ïµ½ºÜ¸ßµÄ¸²¸Ç¶È£¬²»Í¬Ó¦Óø²¸Ç¶È²»Ò»Ö£¬ÒÀÀµActivity¹ØÁª¶È¡£
Ìá¸ßÅÀ³æÄ£Ê½¸²¸Ç¶ÈµÄ·½·¨£º²ÉÓû®·ÖÄ£¿éµÄ·½·¨£¬±ÈÈçÖ÷ҳģ¿é¡¢¸öÈËÄ£¿éµÈµÈ
Ò»´¥¼´´ï
Ö»ÐèÒ»²½¾ÍÄÜ´ò¿ªÓ¦ÓÃÄÚÈκÎActivity
¾ÙÀý£ºÔÚÒѾµÇ¼µÄÇé¿öÏ£¬ÏëÈ¥µ½µÇÂ¼Ò³Ãæ£¬Ò»°ã¿ÉÄܵÄ×ö·¨ÊÇÔÚÖ÷Ò³µã»÷ÎÒ£¬È¥µ½¸öÈËÖÐÐÄ£¬¸öÈËÖÐÐÄ»¬¶¯µ½×îµ×²¿£¬µã»÷Í˳öµÇ¼£¬À´µ½µÇÂ¼Ò³Ãæ¡£Ò»´¥¼´´ïÖ»ÒªÖªµÀµÇÂ¼Ò³ÃæµÄÃû³Æ¡¢Æô¶¯²ÎÊý¾ÍÄÜÖ±½Ó´ò¿ªµÇÂ¼Ò³Ãæ¡£
¿É¸´ÏÖÐÔ
ÔÚÊý¾ÝÏà¶Ô²»±äµÄÇé¿öÏ£¬±éÀúActivityÖÐViewµÄ˳ÐòÊÇÒ»Öµģ¬Òò´Ë¾ß±¸Ò»¶¨µÄ¸´ÏÖ¿ÉÄÜÐÔ£¬¿ÉÀí½âΪMonkeyÖеÄÖÖ×Ó
¶àÖØ¸ú×Ù
¶àÖØ¸ú×ÙÄÜÔÚ³öÏÖ±ÀÀ£µÄÇé¿öÏ£¬¸üºÃµÄ¶¨Î»¡¢¸´ÏÖ¡¢·ÖÎöÎÊÌâ¡£
½ØÍ¼¸ú×Ù£ºÃ¿¸öµã»÷²Ù×÷¶¼½«±»¼Ç¼£¬¸ù¾Ý½ØÍ¼Ë³Ðò¿ÉÖª½øÐÐÁ˺εȲÙ×÷
ÈÕÖ¾¸ú×Ù£º±ÀÀ£ÈÕ־ץȡ£¬¹©Ñз¢Ê¹ÓÃ
½Ó¿Ú¸ú×Ù£ºÅäºÏFiddlerµÈ×¥°ü¹¤¾ß£¬¿ÉÖª·¢Éú±ÀÀ£Ê±ÇëÇóÁËÄÄЩ½Ó¿Ú£¬´Ó¶ø¸üºÃµÄ¶¨Î»ÎÊÌâ
ÔªËØ¸ú×Ù£ºµã»÷µÄViewÐÅÏ¢ÒÔ²Ù×÷ÈÕÖ¾ÐÎʽ¼Ç¼ÔÚSD card£¬°üº¬°üÃû¡¢ÀàÃû¡¢×ÊÔ´ID¡¢ÆÁĻλÖá¢Îı¾µÈµÈÐÅÏ¢
Ö§³ÖHybrid
³ýÁËÖ§³ÖNative±éÀú£¬ÒàÖ§³ÖHybrid
¼¼Êõϸ½Ú£¨¾Ö²¿£©
¹ØÓÚÌø×ªµÄ´¦Àí
ÿ´Îµã»÷ºó¶¼»áÅжÏÊÇ·ñÀ뿪±éÀúActivity£¨Î´À뿪Ôò½øÈëÏÂÒ»¸öµã»÷ʼþ£©
Èç¹ûÌø×ªµ½±¾Ó¦ÓÃÆäËûActivity£¨Ôò°´Ï·µ»Ø¼ü·µ»Ø£¬·µ»Øºó»Ø²»µ½±éÀúActivityÔòÖØÆô¸ÃActivity²¢ÖØÐ±éÀúÊ£ÓàView£©
Èç¹ûÌø×ªµ½ÆäËûÓ¦ÓÃÈ¥ÁË£¨ÈçÏà»ú£©ÔòÖ±½ÓÖØÆô¸ÃActivity²¢ÖØÐ±éÀúÊ£ÓàView
Èç¹ûÌø×ªµ½µÇÂ¼Ò³ÃæÔòµÇ¼ºó¼ÌÐø²Ù×÷£¨¿ÉÄÜ´æÔÚ±éÀúʱµã»÷µ½Í˳öµÇ¼°´Å¥£©
¹ØÓÚÖ±½ÓÆô¶¯ActivityµÄ´¦Àí
ͨ¹ý¼àÌýActivityµÄÆô¶¯£¬Äõ½ActivityʵÀý²¢»ñÈ¡´«Èë²ÎÊý£¬¿´ÏÂÁ÷³Ìͼ¿ÉÄܺÃÀí½â£º

ÅäÖÃ˵Ã÷
²ÎÊýÃèÊö£º
// Activity½ØÍ¼¿ª¹Ø£¬Ä¬ÈÏΪtrue¡£ Æô¶¯ActivityÊ×ÏÈ»á½ØÈ¡Ò»ÕÅͼ±£´æÔÚsdcard/AutoClick/Screenshots/ActivitiesÎļþ¼Ð public boolean activityScreenShots = true; // Activityµü´ú½ØÍ¼¿ª¹Ø£¬Ä¬ÈÏΪtrue¡£ ÿ´Îµã»÷View»á½ØÈ¡Ò»ÕÅͼ±£´æÔÚsdcard/AutoClick/Screenshots/¶ÔÓ¦ActivityÎļþ¼Ð public boolean iterationScreenShots = true; /** * µü´úģʽ ¿ìËÙģʽ£ºÖ»Æô¶¯Activity£¬¿ìËÙ¼ì²â±ÀÀ£ÎÊÌâ £¨Èç¼æÈÝÐÔ¡¢»ìÏý¡¢´úÂëÎÊÌâµ¼ÖµıÀÀ££©£¬Ò»°ã¼¸·ÖÖÓ¿ÉÍê³É¡£ ÒÀÀµÓÚParams.jsonÎļþ£¬¸ÃÎļþ¿ÉÓÉÂ¼ÖÆÄ£Ê½²úÉú¡£ µü´úģʽ£ºÆô¶¯Activity²¢µã»÷ÿ¸öView¡£ÒÀÀµÓÚParams.jsonÎļþ£¬¸ÃÎļþ¿ÉÓÉÂ¼ÖÆÄ£Ê½²úÉú¡£ ÅÀ³æÄ£Ê½£ºÍ¨¹ýµü´úÖ÷Ò³²¢¼Ç¼Ð¿ªActivity£¬µü´úÍê±Ïºó¶ÁȡпªActivity£¬Ñ»·Íù¸´£¬Ö±ÖÁÎÞеÄActivity¡£ Â¼ÖÆÄ£Ê½£ºÐèÈ˹¤²Ù×÷Ó¦Ó㬼Ǽÿ¸öпªµÄActivity£¬¹©¿ìËÙģʽ¡¢µü´úģʽʹÓá£ Â¼ÖÆÄ£Ê½¿ÉÔÚ¹¦ÄܲâÊÔ½×¶ÎʹÓã¬Â¼ÖÆÄ£Ê½Ä¬ÈÏÐÝÃß1¸öСʱ£¬ÆÚ¼ä²Ù×÷Ó¦Óôò¿ªµÄActivity¶¼½«±»¼Ç¼ÏÂÀ´¡£ */ public Mode mode; // ±»²âÓ¦ÓÃÖ÷Ò³£¬±ØÌîÏî public String homeActivity; // ±»²âÓ¦ÓõǼҳ£¬±ØÌîÏî public String loginActivity; // ±»²âÓ¦ÓõǼÕË»§£¬±ØÌîÏî public String loginAccount; // ±»²âÓ¦ÓõǼÃÜÂ룬±ØÌîÏî public String loginPassword; // ±»²âÓ¦ÓõÇÂ¼Ò³ÃæµÇ¼°´Å¥×ÊÔ´ID£¬±ØÌîÏî public String loginId; // ±»²âÓ¦ÓðüÃû£¬±ØÌîÏî public String PACKAGE; // ºöÂÔµÄActivitiesÊý×飬´ËÊý×éÄÚµÄActivity²»»á±éÀú public String[] ignoreActivities; // ºöÂÔµÄViewsÊý×飬´ËÊý×éÄÚµÄView²»»á±éÀú£¬ÐèÌîдÍêÕûµÄ×ÊÔ´ID£¬Èçcom.xx:id/iv_fpc_back public String[] ignoreViews; // Activities½ØÍ¼±£Áô¿ª¹Ø£¬Ä¬ÈÏΪtrue£¬ Èç¹ûΪfalse£¬Activity±éÀúÍê³Éºó£¬½ØÍ¼½«»á±»ÇåÀí£¬Activity·¢Éú±ÀÀ£Ê±£¬½ØÍ¼²»»á±»ÇåÀí¡£ public boolean keepActivitiesScreenShots = true; |
ʾÀý£º
package application.iteration;
import android.test.ActivityInstrumentationTestCase2;
import com.robotium.solo.Solo;
import org.junit.After;
import org.junit.Before;
@SuppressWarnings({"rawtypes", "deprecation"})
public class Iteration extends ActivityInstrumentationTestCase2
{
/**
* ±»²âÓ¦ÓðüÃû
*/
private static final String PACKAGE = "±»²âÓ¦ÓðüÃû";
/**
* ±»²âÓ¦ÓÃActivityÈë¿Ú
*/
private static final String LAUNCHER_ACTIVITY
= "±»²âÓ¦ÓÃActivityÈë¿Ú";
private static Class<?> launcherActivityClass;
static {
try {
launcherActivityClass = Class.forName(LAUNCHER_ACTIVITY);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
@SuppressWarnings("unchecked")
public Iteration() {
super(PACKAGE, launcherActivityClass);
}
private Solo solo;
@Before
public void setUp() throws Exception {
Solo.Config config = new Solo.Config();
// ±éÀúģʽ
config.mode = Solo.Config.Mode.REPTILE;
config.homeActivity = "±»²âÓ¦ÓÃÖ÷Ò³Activity";
config.loginActivity = "±»²âÓ¦ÓõǼActivity";
config.loginAccount = "µÇ¼ÕʺÅ";
config.loginPassword = "µÇ¼ÃÜÂë";
config.loginId = "µÇ¼°´Å¥ID";
// ±»²âÓ¦ÓðüÃû
config.PACKAGE = PACKAGE;
config.ignoreActivities = new String[]{"ºöÂÔµÄActivity£¬´ËÊý×éÖеÄActivity½«²»»á±»±éÀú"};
config.ignoreViews = new String[]{"ºöÂÔµÄView£¬´ËÊý×éÖеÄView½«²»»á±»µã»÷£¬ÐèÌîÈëÍêÕûµÄ×ÊÔ´ID"};
solo = new Solo(getInstrumentation(), config,
getActivity());
super.setUp();
}
@After
public void tearDown() throws Exception {
solo.finishOpenedActivities();
super.tearDown();
}
/**
* ×Ô¶¯±éÀúÈë¿Ú
* @throws Exception Å׳öÒì³£
*/
public void test_iteration() throws Exception
{
solo.startIteration();
}
} |
AndroidManifest.xmlÅäÖÃ
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="±»²âÓ¦ÓðüÃû.test" android:versionCode="1" android:versionName="1.0">
<uses-permission android:name="android.permission.GET_TASKS"
/>
<uses-sdk
android:minSdkVersion="18"
android:targetSdkVersion="24" />
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="±»²âÓ¦ÓðüÃû" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<uses-library android:name="android.test.runner"
/>
</application>
</manifest> |
ÔõôÔËÐÐ
Ïà¹ØÅäÖö¼µ½Î»ÁËÖ»ÒªÔËÐÐtest_iteration()·½·¨¼´¿É¡£
Ïà¹Ø½ØÍ¼
¿çÓ¦ÓÃ

ÖÇÄÜÊäÈë

ºìµã±ê¼Ç

Ò»´¥¼´´ï

FAQ
Q£º Ìø×ªµ½ÆäËûÓ¦Óûز»È¥Ôõô°ì£¿
A£º¿ÉÄÜ´æÔÚ»úÐͼæÈÝÎÊÌ⣬Èç¹ûÓöµ½¸ÃÇé¿ö¿ÉÒ԰ѸÃView¼ÓÈëºöÂÔÊý×é¡£
Q£º±éÀúʱ³öÏÖobject not foundÔõô°ì£¿
A£ºObjectÎļþÊǼǼÀàËÆÐòÁл¯µÄ´«Èë²ÎÊý£¬¼Ç¼ÔÚsdcard/AutoClick/Object/Ŀ¼Ï£¬Îñ±Ø±£Ö¤ËüµÄ´æÔÚ¡£
Q£ºµü´úģʽÏ£¬Ò»»á¾ÍÍ˳öÁË£¬²¢Ã»ÓбéÀú£¿
A£ºÇë¼ì²ésdcard/AutoClick/Params.jsonÊÇ·ñ´æÔÚ£¬»òÕ߸ÃÎļþûÓÐÊý¾Ý£¿
Q£º×Ô¶¯±éÀúÆô¶¯²»ÁËÊÇʲôÇé¿ö£¿
A£ºÇë¸ù¾Ý´íÎóÈÕÖ¾¼ì²éÊÇ·ñÅäÖÃÎļþȱÉٱر¸²ÎÊý£¬»òÕßÇ©Ãû²»Ò»Ö£¿
Q£º³ÌÐòÖÐ;ÖÕÖ¹ÁË£¿
A£ºÈ·±£Êý¾ÝÏßÊÇÁ¬½Ó״̬£¬±éÀúÐèÒªÓõ½adb
Q£ºAndroid 6.0¼°ÒÔÉϰ汾ʱ£¬¿¨ÔÚÊÚȨ½çÃæ£¿
A£ºÈç¹ûµÚÈý·½³§É̸ü¸Ä¹ýµ×²ã´úÂ룬¿ÉÄܳöÏÖ¼æÈÝÐÔÎÊÌ⣨ÈçСÃ×£©£¬´ËʱÐèÒªÔÚPermission.javaÀàÖÐÔö¼ÓÏàÓ¦µÄ°üÃû¼°ÊÚȨ×ÊÔ´id£¬Í¨¹ýuiautomatorviewer²é¿´ÊÚȨ½çÃæÐÅÏ¢¡£
Github
AutoClick
½áÓï
»¶ÓÌṩָµ¼ÐÔÒâ¼û£¬´ó¼Òһͬ̽ÌÖѧϰ
ÓÉÓÚˮƽÓÐÏÞ£¬ÎÄÖÐÈçÓдíÎó£¬ÇëÇáÅÄ
´úÂëÒѾ¿ªÔ´£¬Èç¹û¾õµÃ¶ÔÄãÓаïÖú£¬¿ÉÒÔstar
ÎÄÕÂÏ·½ÓдòÉͰ´Å¥£¬ÄãµÄÖ§³ÖÊÇÎÒ×î´óµÄ¶¯Á¦ |