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

1Ôª 10Ôª 50Ôª





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



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

ǰÑÔ

×öÕâ¸öµÄ³õÖÔÊÇ·¢ÏÖÏîÄ¿ÖеıÀÀ£ÎÊÌ⣨¼´Îȶ¨ÐÔ£©¡£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

ÎÄÕÂÏ·½ÓдòÉͰ´Å¥£¬ÄãµÄÖ§³ÖÊÇÎÒ×î´óµÄ¶¯Á¦

   
2246 ´Îä¯ÀÀ       27
 
Ïà¹ØÎÄÕÂ

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

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

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

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


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


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