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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
»ùÓÚ Appium µÄ Android UI ×Ô¶¯»¯²âÊÔ
 
 À´Ô´£ºtech.meituan.com¡¡ ·¢²¼ÓÚ£º 2016-12-5
  2565  次浏览      27
 

×Ô¶¯»¯²âÊÔÊÇÑз¢ÈËÔ±½øÐÐÖÊÁ¿±£ÕϵÄÖØÒªÒ»»·£¬Á¼ºÃµÄ×Ô¶¯»¯²âÊÔ»úÖÆÄܹ»Èÿª·¢Õß¼°Ôç·¢ÏÖ±àÂëÖеÄÂß¼­È±ÏÝ£¬½«·çÏÕǰÖá£ÈÕ³£Ñз¢ÖУ¬ÓÉÓÚ¿ìËÙµü´úµÄÔ­Òò£¬ÎÒÃǾ­³£ÐèÒªÔÚ¸÷¸öÒµÎñÏßÉϽøÐÐÖ÷Á÷³Ì»Ø¹é²âÊÔ£¬Ä¿Ç°ÕâÖÖ²âÊԴ󲿷ÖÓÉÈ˹¤½øÐУ¬·Ñʱ·ÑÁ¦£¬Öظ´ÀͶ¯¶à¡£Èç¹ûÄܽ«UI×Ô¶¯»¯²âÊÔÓëÖ÷Á÷³Ì»Ø¹é½áºÏµ½Ò»Æð£¬Ò»·½Ãæ±£Ö¤ÁË´úÂëÖÊÁ¿£¬ÁíÒ»·½Ãæ´ó´ó½ÚÔ¼ÈËÁ¦³É±¾£¬¿Éνһ¾ÙÁ½µÃ¡£

ΪʲôÐèÒªUI×Ô¶¯»¯²âÊÔ

Ô­ÒòÖ÷ÒªÊÇÒÔÏÂÈýµã£º

±£Ö¤ÖÊÁ¿¡ª¡ª¼°Ôç·¢ÏÖ´úÂëȱÏÝ£¬·çÏÕǰÖá£

¼õÉÙÖØ¸´ÀͶ¯£¬½ÚÔ¼ÈËÁ¦¡ª¡ª¿ìËÙµü´úÖо­³£ÐèÒª½øÐÐÖ÷Á÷³Ì»Ø¹é£¬²âÊÔÍêÕû¸öÖ÷Á÷³Ì£¬ÐèÒªºÄ·ÑÏ൱´óµÄÈËÁ¦³É±¾¡£

ͳһ±ê×¼¡ª¡ªÃ¿¸öÈ˶ԲâÊÔÓÃÀýÒÔ¼°ÒµÎñÀí½â³Ì¶È²»Í¬£¬±ê×¼¿ÉÄÜ´æÔÚ²»Ò»Ö¡£

½øÐÐUI×Ô¶¯»¯²âÊÔÃæÁÙµÄÎÊÌâ

¹¤¾ßÑ¡Ôñ¡£

½µµÍ¶Ôºó¶ËµÄÒÀÀµ£¬±ÜÃâÒòΪ²âÊÔ»·¾³ºó¶Ë²»Îȶ¨µ¼ÖµIJâÊÔʧ°Ü¡£

ÕûºÏ²âÊÔÓÃÀý£¬Ôö¼Ó¸´Ó㬽µµÍÓÃÀýά»¤³É±¾¡£

×Ô¶¯»¯²âÊÔ¹¤¾ß¶Ô±È

Òµ½çUI²âÊÔ¹¤¾ß·¢Õ¹Ñ¸ËÙ£¬Ä¿Ç°ÓÐRobotium¡¢Appium¡¢Espresso¡¢UIAutomator¡¢CalabashµÈµÈ£¬ÆäÖÐÔÚAndroidÖÐÓ¦ÓÃ×î¹ã·ºµÄµ±ÊôUIAutomator¡¢Robotium¡¢Appium¡£

ÏÂÃæÁбí±È½Ï˵Ã÷£º

³ýÁËAndroid¡¢HybridÀàÐ͵ÄApp£¬Appium»¹¿ÉÒÔÔÚiOSÉ豸ÉÏÔËÐС£¼ÓÉÏ֮ǰ×éÄÚÓÐͬÊÂ×ö¹ýAppium·½ÃæµÄ·ÖÏí£¬ÔÚÕâ·½ÃæÓÐÒ»¶¨µÄ»ù´¡£¬ËùÒÔ×îÖÕÎÒÃÇÑ¡ÔñÁËAppium¡£

½Ó¿ÚÎȶ¨ÐÔÓëÊý¾Ý¿É±äÐÔ

ÒµÎñÌØÐÔ¾ö¶¨ÎÒÃǵÄcaseÔÚÔËÐйý³ÌÖлᾭ³£Ïòºó¶ËÇëÇóÊý¾Ý£¬È»ºó¸ù¾Ýºó¶Ë½Ó¿Ú·µ»ØµÄÊý¾Ý¾ö¶¨Ò³ÃæÔªËØÕ¹Ê¾¡£Òò´Ë£¬ÓÐÁ½¸öÄѵãÊDZØÐë¿Ë·þµÄ£º

ºó¶Ë½Ó¿ÚÎȶ¨ÐÔ

²âÊÔ»·¾³²¢²»ÏñÏßÉÏ£¬ÄÜÔÚ7x24ÄÚ±£³ÖÎȶ¨¡£ÒµÎñ½Ó¿Ú¾­³£³öÏÖÒòËùÒÀÀµµÄÍⲿ»·¾³Òì³£¶øÇëÇóʧ°ÜµÄÇé¿ö£¬ÒÔÍù´¦ÀíÕâÖÖÇéÐΣ¬ÎÒÃÇÄÜ×öµÄÊÂÇéÍùÍùºÜÓÐÏÞ£¬×îÔã¸âµÄ¾ÍÊDZØÐëÒªµÈ´ýµÚÈý·½ÐÞ¸ÄÍê³Éºó£¬²ÅÄܼÌÐøÎÒÃǵIJâÊÔ¡£Òò´Ë£¬ÈçºÎ±£³Ö½Ó¿ÚÎȶ¨£¬½«³ÉΪUI×Ô¶¯»¯²âÊÔ²»µÃ²»Ãæ¶ÔµÄÎÊÌâ¡£

²âÊÔÊý¾ÝÅäÖÃÓë±£´æ

¿Ë·þÁË1ÖÐÌáµ½µÄ½Ó¿ÚÎȶ¨Äѵãºó£¬ÈÔÈ»ÒªÃæ¶ÔµÚ¶þ¸öÄѵ㡪¡ªÆµ·±ÐÞ¸ÄÅäÖÃÒÔÊÊÓ¦²âÊÔÓÃÀýµÄÌõ¼þ¡£¾Ù¸öÀý×Ó£¬¶ÔÓÚÉÁ»ÝÒµÎñ£¬ÓÃÀýÀïÃæ»á¶ÔÓÚÉÌ»§ÅäÖõĶàÖÖÇé¿ö½øÐвâÊÔ£¨ÎÞÓŻݡ¢ÓÐÓÅ»Ýδ¿ªÊ¼¡¢½öÓÐÉÁ»ÝÓŻݡ¢ÓÐÉÁ»ÝºÍÍŹº¡¢ÉÁ»Ý´òÕÛ¡¢ÉÁ»ÝÔùÆ·µÈ£©£¬ÕâÀïÃæµÄÌõ¼þÊǸ´ÔÓ¶à±äµÄ¡£Èç¹ûÿһ´Î½øÐвâÊÔǰ£¬¶¼ÓÉÖ´ÐвâÊÔÈËÔÚÉÌ»§ºǫ́µÇ¼ºóÊÖ¶¯ÐÞ¸ÄÅäÖ㬽«ºÄ·Ñ¾Þ´óµÄÈËÁ¦³É±¾¡£Òò´ËÎÒÃÇÊÆ±ØÕÒ³öÒ»Ìõ;¾¶£¬½«ÕâÖÖ·±ËöµÄÅäÖùý³Ì×Ô¶¯»¯¡£

½ÓÈëAppmock

×¢£ºÊ¹ÓÃAppmock£¬Ð轨Á¢ÔÚAppµ×²ãÍøÂçÇëÇóÄ£¿éÒѾ­¾ß±¸Çл»mockµØÖ·µÄ¹¦ÄܵĻù´¡ÉÏ¡£

AppmockÊÇÃÀÍŵãÆÀƽ̨×éÖÆ×÷µÄ·Ç³£ÓÅÐãµÄmock¹¤¾ß£¬ÆäǰÉíÊÇÃÀÍŵãÆÀͬÊÂÕÅÎĶ«Ëù±àдµÄwendong.dp£¨½ö¹©ÃÀÍŵãÆÀÄÚ²¿Ê¹Óã©¡£ÔÚAppmockÉÏ¿ÉÒÔ½øÐÐÍøÂçÇëÇóµÄ²é¿´Óëmock¡£ÄÇô£¬ÊÇ·ñ¿ÉÒÔÈÃÎÒÃǵÄ×Ô¶¯»¯²âÊÔÓÃÀýÔÚÔËÐÐʱ·ÃÎÊAppmock£¬»ñȡԤÉèµÄmockÊý¾ÝÄØ£¿×ö¹ýÏà¹ØApp¿ª·¢µÄͬʶ¼ÖªµÀ£¬ÔÚAppÖÐÕâÊǺÜÈÝÒ×ʵÏֵģ¬Ö»Òª·ÃÎÊij¸öÌØ¶¨HTTPÁ´½Ó½øÐÐ×¢²á¼´¿É¡£

AppmockʹÓýçÃæ

ÓÉ´Ë£¬¡°ºó¶Ë½Ó¿ÚÎȶ¨ÐÔ¡±µÄÎÊÌ⣬ÔÚAppmockµÄ°ïÖúϾͽâ¾öÁË£¬Èç¹û°Ñºó¶ËÊý¾ÝÖ±½ÓÅäÖÃÔÚAppmockÉÏ£¬ÇëÇóʧ°ÜµÄ¸ÅÂʾÍ΢ºõÆä΢¡£¼´±ãÈç´Ë£¬ÈÔÈ»ÒªÃæÁÙÆµ·±ÐÞ¸ÄÅäÖõÄÐèÇó£¬Ö»²»¹ýÊǰÑÐ޸ĵIJÙ×÷´ÓÉ̼ҺóÌ¨Ò³Ãæ×ªÒÆµ½ÁËmockϵͳ¡£ÓÐûÓÐʲô·½·¨£¬¿ÉÒÔÈÃÐÞ¸ÄÅäÖõIJÙ×÷×Ô¶¯»¯½øÐÐÄØ£¿

ÔÚÑжÁ¹ýAppmockµÄÔ´Âëºó£¬ÎÒÃÇÏëµ½£¬¿ÉÒÔ×Ô¼º´î½¨Ò»¸ömock-server£¬°Ñ²»Í¬½×¶ÎµÄmockÊý¾Ý±£´æÔÚÊý¾Ý¿âÖУ¬²¢ÇÒ¿ª·Å³öÍøÂç½Ó¿Ú£¬ÓÃÀ´Çл»¸÷¸ö²âÊÔÓÃÀýËùÐèµÄmockÊý¾Ý¡£¾ßÌåµÄϵͳ½á¹¹ÈçÏÂͼËùʾ¡£

ÉÏͼÃèÊöÁËÒ»´ÎÓÃÀýÔËÐеļòÒª¹ý³Ì£¬ÊÂǰÐèÒªÔÚÊý¾Ý¿âÖÐ×¼±¸ºÃ²âÊÔÊý¾Ý£¬mock-server»ùÓÚAppmock£¬Ê¹ÓÃNodeJS½øÐжþ´Î¿ª·¢Íê³É¡£

±àд²âÊÔÓÃÀý

ΪÁ˼ò»¯ÓÃÀý±àд£¬¼õÉÙ¿ª·¢Óëά»¤µÄ¹¤×÷Á¿£¬Ê¹ÓÃPage Objectģʽ½øÐÐÓÃÀý¿ª·¢¡£

Page Object¶¨ÒåΪ³éÏóÒ³ÃæµÄ¶ÔÏó£¬Í¨¹ý¶ÔÒ³Ãæ¹¦Äܵķâ×°£¬½øÐÐÏàÓ¦²Ù×÷¡£ËüµÄÓŵãÊÇ£º

¼õÉÙÖØ¸´´úÂ룬Ôö¼Ó¸´ÓÃÐÔ¡£

Ìá¸ß´úÂë¿É¶ÁÐÔ¡¢Îȶ¨ÐÔ¡£

Ò×ÓÚά»¤¡£

UI×Ô¶¯»¯²âÊÔ¿ò¼ÜµÄ±àд·½Ê½ÀàËÆÓÚMVC¼Ü¹¹£¬ÎÒÃǽ«²âÊÔÓÃÀýÖеÄÒµÎñÂß¼­¡¢¸÷¸öÒ³Ãæ¼äµÄÔªËØÒÔ¼°²âÊÔÊý¾ÝÏà·ÖÀëºó¶ÀÁ¢±àд£¬ÒÔϾùÓÃÅŶÓÒµÎñµÄÖ÷Á÷³Ì¾ÙÀý¡£

²âÊÔÀà×é³É

²âÊÔÀàµÄ×é³É°üÀ¨ setUp() £¬ tearDown() ·½·¨ÒÔ¼°¸÷¸ö²âÊÔÓÃÀý testXXXX() £¬ËùÓеIJâÊÔÓÃÀý±ØÐëÒÔСдtest¿ªÍ·£¬ÈçÕý³£ÅźÅÏ嵀 testQueueNormalQueue() £º

@Before
public void setUp() throws Exception {
File apk = new File(APK_NOVA);
DesiredCapabilities capabilities = DesiredCapabilities.android();
capabilities.setCapability("device", Platform.ANDROID);
capabilities.setCapability(CapabilityType.VERSION, "5.1");
¡­¡­ // capabilities¸÷¸ö³£Á¿×Ö¶Î
driver = new AndroidDriver<AndroidElement>(new URL
("http://127.0.0.1:4723/wd/hub"), capabilities);
splashScreen = new SplashScreen(driver);
mainPage = new MainPage(driver);
¡­¡­ // Page Object³õʼ»¯
}
@After
public void tearDown() throws Exception {
driver.quit();
}
@Test
public void testQueueNormalQueue() {
// ÂÔ
}

²âÊÔÓÃÀýÖв»ÓÃÖ±½Ó¶ÔÒ³ÃæÔªËØ½øÐвÙ×÷£¬ÎÒÃÇËùÒª×öµÄÊÂÇé½ö½öÊÇÒµÎñ²ãÃæµÄÂß¼­£¬°üÀ¨±íµ¥Êý¾ÝµÄÌá½»¡¢Ò³Ãæ°´Å¥µÄµã»÷Ìø×ªµÈµÈ¡£

Ò³ÃæÀà±àд

Ò³ÃæÀàµÄ±àд²ÉÓÃPage Objectģʽ£¬°üÀ¨Ò³ÃæÖлáʹÓõ½µÄÔªËØ¡¢Ò³ÃæÔªËصIJÙ×÷·½·¨¼¯ÒÔ¼°Ò³ÃæÔªËصļìÑé·½·¨¼¯¡£

ËùÓÐµÄ Page ×ÓÀà¾ù¼Ì³Ð BasePage ¸¸À࣬ËüÒª×öµÄÊÂÇéºÜ¼òµ¥£¬Î޷ǾÍÊÇ1¸ö driver £¬2¸ö driverWait ÓÃÓÚÑÓʱ¼ÓÔØµÄµÈ´ýʱ¼ä£¬ÒÔ¼°Ò³ÃæÔªËصijõʼ»¯£º

public class BasePage {
private static final int TIMEOUT = 1;
// short timeout for web-element
private static final int TIMEOUT_LONG = 10;
// long timeout for web-element
public AndroidDriver<AndroidElement> driver;
public WebDriverWait driverWait;
public WebDriverWait driverLongWait;
public BasePage(AndroidDriver<AndroidElement> driver) {
this.driver = driver;
this.driverWait = new WebDriverWait(this.driver, TIMEOUT);
this.driverLongWait = new WebDriverWait(this.driver, TIMEOUT_LONG);
PageFactory.initElements(this.driver, this);
// Õâ¾ä·Ç³£ÖØÒª£¬
Èç¹û²»Ð´µÄ»°¾¡¹Ü±àÒë²»»á±¨´í£¬
µ«ÊǺóÃæÒªËµµÄÒ³ÃæÔªËØÔÚÔËÐÐʱһ¸ö¶¼ÕÒ²»µ½
}
}

È»ºóÊǸ÷¸ö Page ×ÓÀàµÄʵÏÖ·½·¨£º

public class ShopInfoPage extends BasePage {
public ShopInfoPage(AndroidDriver<AndroidElement> driver) {
super(driver);
}
¡­¡­ // Ò³ÃæÔªËØ @FindBy
¡­¡­ // ²Ù×÷·½·¨£¬±ÈÈçlogin()¡¢
clickXXXXXXButton()¡¢gotoXXXXXXPage()
¡­¡­ // ¼ìÑé·½·¨£¬±ÈÈçcheckLoaded()¡¢
checkLoginSuccess()¡¢checkQueue_LoginReadyQueue()
}

Page×ÓÀàµÄÔªËØ¶¨Î»ÎÒÃÇʹÓà @FindBy ×¢½â·½Ê½½øÐÐͳһµÄ¹ÜÀí¡£

ÔªËØ¶¨Î»×î»ù±¾µÄ·½·¨¾ÍÊÇʹÓà id/name/class µÈ£¬Èç¹û²»Ðеϰ¾ÍÓÃÏà¶Ô¸´ÔÓÈ´ÎÞËù²»ÄÜµÄ xpath £¬È磺

// µã»÷µÇ¼°´Å¥
@FindBy(id = "login_tip")
private WebElement clickLoginButton;


// MAPIÓòÃûÊäÈë¿ò
@FindBy(xpath = "//*[contains(@resource-id, 'id/mapi_item')]//*[contains(@resource-id, 'id/debug_domain')]")
private WebElement mapiDomainText;

PageÖеIJÙ×÷ºÍ¼ìÑé·½·¨µ÷ÓÃÒѾ­·â×°ºÃµÄBaseUtilsÖеķ½·¨£¬È磺

BaseUtils.waitForElement(driverWait, loginButton).click();            
// µÈ´ýÔªËØ³öÏÖ²¢µã»÷
Assert.assertTrue
(BaseUtils.waitForElementVisibility(driverLongWait, usernameText));
// ¼ìÑéÔªËØÓ¦¸ÃչʾÔÚÒ³ÃæÉÏ

BaseUtils·½·¨

BaseUtilsÖзâ×°ºÃÁËһЩͨÓõķ½·¨£¬»¹ÐèÒª²»¶ÏÍêÉÆ²¢À©Õ¹¡£ÏÂÃæ½éÉÜÆäÖÐһЩ³£Óü°ÖØÒªµÄ·½·¨£º

openDebugPanel() £ºÃ¿´ÎÖ±½Óµ÷Óø÷½·¨À´´ò¿ªDebugÃæ°å£¬ÓÉÓÚDebugÃæ°åÊÇÒ»¸öϵͳ²ãÃæµÄÐü¸¡´°£¬Ëü²»ÊôÓÚÈκÎÒ³ÃæÖеÄÔªËØ£¨ÄãÍêȫû°ì·¨Í¨¹ý ID ÉõÖÁ XPath »ñµÃ£©¡£

clickPoint() £ºµã»÷ij¸ö×ø±ê+³ÖÐøÊ±¼ä£¬×ø±ê²ÉÓÃÏà¶ÔÆÁÄ»Î»ÒÆµÄ·½Ê½£¨×óÉÏΪ0,0£©£¬ÕâÀïֻʵÏÖÁ˼òµ¥µÄµ¥Ö¸µÄµã»÷²Ù×÷£¬Êµ¼ÊÉÏ driver.tap ¿ÉÒÔÄ£Äâ¶àÖ¸µÄ¹²Í¬²Ù×÷¡£

swipeToUp() & swipeToDown() £ºÉÏÀ­ & ÏÂÀ­Ò³Ãæ²Ù×÷£¬ÐèÒª´«µÄÊÇ´ÎÊýºÍÿ´Î³ÖÐøÊ±¼ä£¬Ä£ÄâÊÖÖ¸ÔÚÆÁÄ»ÉϵϬÆÁ²Ù×÷£¬Ö÷ÒªÓÃÓÚË¢ÐÂÒ³ÃæÒÔ¼°ÈƹýijЩÓÐ¿ÓµÄ scrollTo ¡£

prepareMockData() £ºÕâÀïÒª×öµÄ¾ÍÊÇ£¬Ôڹؼü²½Öè²Ù×÷ǰ´«Èë mock_data_id £¬ÎÒÃǻὫÊý¾ÝÇëÇó·¢Ë͸ø·þÎñÆ÷£¬È»ºó·þÎñÆ÷´ÓÊý¾Ý¿âÀ­µ½¶ÔÓ¦µÄmock data²¢¸üС£

saveScreenshot() £º¹ËÃû˼Ò壬½ØÍ¼¡£ÔÚÿ¸öÖØÒªµÄÒ³Ãæ²Ù×÷·½·¨ÖмÓÈë¼´¿É£¬ÐèÒª´«ÈëµÄÊÇ case_id ÒÔ¼°²Ù×÷»ò¼ì²éʱµÄ keyword £¬·½±ãÔÚÓÃÀýÖ´ÐÐÍêÒÔºó¿´½ØÍ¼·ÖÎöºÍBug¸´ÏÖ¡£

waitForElementXXX() £ºÔÚÔ¤ÉèµÈ´ýʱ¼äÄڵȴýÔªËØ³öÏÖ²¢¶¨Î»ÔªËØ¡£

UI×Ô¶¯»¯²âÊÔÔËÐÐЧ¹û

ÔÚÅŶÓÓëÉÁ»ÝÁ½ÌõÒµÎñÏß½øÐÐÁËUI×Ô¶¯»¯²âÊÔʵ¼ù£¬ËüÃÇÖ´ÐÐÍê³ÉÈ«Ì×ÓÃÀýµÄºÄʱ¾ù²»³¬¹ý20min¡£Ïà±ÈÓÚ֮ǰÈ˹¤½øÐÐÖ÷Á÷³Ì²âÊÔ¶¯éü»¨·Ñ°ëÌìµÄ¹¤×÷Á¿µÄÇé¿ö£¬´ó´ó½µµÍÁËÈËÁ¦³É±¾£¬½«¹¤³Ìʦ±¦¹óµÄʱ¼ä½ÚÔ¼¸øÁ˸üÓмÛÖµµÄÑз¢¹¤×÷¡£

µ±È»£¬×Ô¶¯»¯²âÊÔǰÆÚµÄ»·¾³´î½¨¡¢Êý¾Ý×¼±¸¡¢ÓÃÀý±àдµÈÈÎÎñÊDZز»¿ÉÉٵģ¬ÕâЩ׼±¸¹¤×÷ºÜ¶à¶¼ÊÇÒ»´ÎÐÔͶÈ룬һÀÍÓÀÒÝ£¬Ò²ÕýÊÇ×Ô¶¯»¯²âÊԵļÛÖµËùÔÚ¡£

   
2565 ´Îä¯ÀÀ       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ÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ