国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

獲得App的包名和啟動頁Activity

2019-11-09 16:52:44
字體:
來源:轉載
供稿:網友

轉自:http://www.cnblogs.com/by-dream/p/5157308.html

包名

  包名(Package name)在Android系統中是判斷一個App的唯一標識,不同的App可以有同樣的名字,但是它的包名不可以相同。

  例如我可以自己編譯生成一個App也叫“微信”,但是我App的包名不能為com.tencent.mm(微信的包名為這個),如果我指定的包名如果也和微信一致了,那么我的手機上只允許安裝這兩個App中的其中一個。說到這很多人就會有疑問,如果有人惡意做了一個和微信內容一模一樣的App,名字和包名都和微信一樣,那怎么分辨呢?Android中為了防止這樣,還做了一個叫簽名的東西,微信的簽名一般我們是沒有的,所以就可以通過簽名來標識出這款App到底是誰的了,有興趣了可以了解下簽名,這里就不再贅述了。

  一般要知道一個應用的包名的需求來源都是需要跑一個monkey命令的時候,還記得嗎monkey用法?(monkey的文章)monkey的命令中就是需要指定包名的。下面我們就介紹幾種查看包名的方法:

  一、看源代碼

    一般我們測試的App都是自己公司的App,因此當有源代碼的時候,我們就可以非常容易的知道它的包名。找到工程目錄下的 “AndroidManifest.xml” 的文件,打開后: 這里寫圖片描述

    我們找到package這一項查看即可。

  二、查看手機系統設置

    我這里介紹谷歌原生系統,其他的一些小米、魅族等自己定制后的系統的查看方法也大同小異。

    操作步驟:“設置” -> “應用” -> “正在運行”(這一步需要注意)-> 選擇要查看的應用。這個時候就能看到了(如下圖) 這里寫圖片描述這里寫圖片描述

  三、查看 /data/data/ 目錄

    當我們安裝一款應用的時候,系統就會在 /data/data/ 目錄下建一個目錄,并且文件名就是當前這個應用的包名,我們看一下我手機里這個目錄下都有些什么文件吧: 這里寫圖片描述

    如果你知道你要查看的App包名中的一個關鍵詞的話,會更快的找到你應用的包名,否則建議使用其他方法。此方法手機需要root。

  四、GT

    GT的界面中自帶了這個功能,從應用寶上下載GT,然后選擇一個被測應用,就可以看到了。(如下圖) 這里寫圖片描述

啟動頁Activity

  簡單的來說Activity指的就是App中我們看到的頁面,一個頁面就是一個Activity,通常第一頁啟動起來的頁面我們就稱之為 “啟動頁Activity”。

  我們在做自動化測試中,通常第一步都是啟動被測應用,例如之前介紹的Monkeyrunner、Uiautomator都是這樣的,而啟動的方法就是利用 “包名/啟動頁的Activity”,因此我們在測試的過程中通常需要知道這個Activity的名稱。下面我就介紹幾種查看啟動頁Activity的方法。

  一、看源代碼

    同樣在源代碼中我們可以直接找到啟動頁的Activity的名稱。 這里需要找工程目錄下的 “AndroidManifest.xml” 包含 “category的值為android.intent.category.LAUNCHER” 的Activity就是我們要找的: 這里寫圖片描述

    當我們知道啟動頁Activity名之后,就可以直接輸入“ adb shell am start com.bryan.testbattery/com.bryan.testbattery.activity.MainActivity ” 就可以拉起應用了。

  二、Logcat

    關閉App,打開LogCat,然后啟動你的App,這個時候仔細看log日志,一般tag為ActivityManager的會記錄下這么一段log,而這里面就記錄了啟動頁的Activity,如下圖:

這里寫圖片描述

  三、dump package 包名

    使用命令查看后,同樣是找到包含“category.LAUNCHER” 字樣的Activity即可

這里寫圖片描述

  四、Monkey

    Monkey可以設置日志的詳細程度,當我們指定為 -VVV 的時候,并且指定模擬隨機事件為一次,即可查看: 這里寫圖片描述

  五、Android程序

    如果你愿意做一個一勞永逸的事情,我建議一寫一個App,根據一個包名來獲得啟動頁的Activity,主要依靠PackageManager 這個類,下面是我實現的代碼。

復制代碼 /* 通過包名去啟動一個Activity/ public void openApp( String packageName) { // TODO 把應用殺掉然后再啟動,保證進入的是第一個頁面 PackageInfo pi = null; try { pi = mainContext.getapplicationContext().getPackageManager().getPackageInfo(packageName, 0); } catch (NameNotFoundException e) { e.PRintStackTrace(); return; }

Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null); resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER); resolveIntent.setPackage(pi.packageName); PackageManager pManager = mainContext.getApplicationContext().getPackageManager(); List<ResolveInfo> apps = pManager.queryIntentActivities(resolveIntent, 0); ResolveInfo ri = apps.iterator().next(); if (ri != null) { String startappName = ri.activityInfo.packageName; String className = ri.activityInfo.name; System.out.println( "啟動的activity是: " + startappName+":"+className, CommonVar.LOG_SHOW); Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); ComponentName cn = new ComponentName(startappName, className); intent.setComponent(cn); mainContext.getApplicationContext().startActivity(intent); }}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长海县| 高密市| 衡山县| 宁晋县| 兰坪| 洱源县| 乐至县| 沈阳市| 洪湖市| 古田县| 洞口县| 和林格尔县| 天津市| 潞城市| 集贤县| 额济纳旗| 孟州市| 嵩明县| 松原市| 永登县| 基隆市| 汉中市| 玉田县| 杂多县| 石河子市| 民丰县| 绍兴县| 青田县| 伽师县| 浮山县| 潮州市| 民乐县| 宜宾市| 新宁县| 津南区| 义乌市| 潍坊市| 龙南县| 铁岭市| 客服| 望都县|