1. 程式人生 > >【Android測試】【隨筆】獲得App的包名和啟動頁Activity

【Android測試】【隨筆】獲得App的包名和啟動頁Activity

 

前言

  經常看到一些剛剛接觸Android測試的小夥伴在論壇或者QQ群裡問這樣的問題:如何知道一個App的包名呢?它的啟動頁的Activity又是什麼呢?

  之前部落格裡也忽略了這一塊,這一節我就專門來介紹一下。

包名

  包名(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);
        }
    }

    這段程式碼是我的效能測試工具小松鼠在指定的被測App後,將被測App拉起做效能測試用的,大家可以參考。

相關推薦

Android測試隨筆獲得App啟動Activity

 ◆ 前言   經常看到一些剛剛接觸Android測試的小夥伴在論壇或者QQ群裡問這樣的問題:如何知道一個App的包名呢?它的啟動頁的Activity又是什麼呢?   之前部落格裡也忽略了這一塊,這一節我就專門來介紹一下。 包名   包名(Package name)在Andr

獲得App啟動Activity

包名   包名(Package name)在Android系統中是判斷一個App的唯一標識,不同的App可以有同樣的名字,但是它的包名不可以相同。   例如我可以自己編譯生成一個App也叫“微信”,但是我App的包名不能為com.tencent.mm(微

手把手教你_怎麽找android應用的啟動activity

color don dsm too key 包名 ani 一個 col 自己主動化測試中常常遇到這個問題,關於這個題目,方法眾多,咱的目的是找個比較簡單靠譜的: 方法一: 先進入cmd窗體,adb shell 後: cd /data/d

手把手教你_怎麼找android應用的啟動activity

 自動化測試中經常遇到這個問題,關於這個題目,方法眾多,咱的目的是找個比較簡單靠譜的: 方法一: 先進入cmd視窗,adb shell 後: cd /data/data ls 可以看到包名了吧,缺點很明顯,必須root手機先 方法二: 先進入cmd視窗: adb s

android 讀取本地安裝app 啟動第三方app

獲取手機上安裝app 包名 //讀取本地安裝app PackageManager pageManage = getActivity().getPackageManager(); List<Pac

Android測試UI自動化代碼優化之路

比較 互聯網產品 ref 註意 封裝 例子 成了 相對 tail 關於UI自動化的抱怨   聽過不少人這樣講 “UI自動化非常不穩定,需求一改,界面一遍,全部都費了”。我相信做過的人可能也會有同感。既然這個問題一直都是存在的,那麽為什麽沒有人仔細分析原因呢?   我的老板

Android測試第十四節Appium——簡述

ios 選擇 ive boot and tro jar appium tomato 前言   同樣的,這一篇我要介紹的也是一款UI自動化工具,地址:http://appium.io/   第三方(非谷歌)研發的開源測試工具,說到這裏也許有人會問 “為什麽已經介紹了Ui

Android測試在AndroidStudio中進行單元測試

單元測試的流程 使用AndroidStudio進行單元測試時,與當前網上眾多資料進行比較。在較新版本下(當前我使用的是2.0)的studio中不需要自己進行BuildVariants的設定以及依賴JUnit包。studio會自動完成這些操作。 進行基

Android測試Uiautomator——API詳解

簡單的例子   以一個簡單的例子開始吧。我們完成一個 " 開啟QQ,進入QQ空間,然後退出 " 的case。   程式碼如下: package QQ;   import java.io.IOException;   impor

Android測試之LogCat命令列(一)

預備知識   首先還是先了解一下上節沒有提到的知識,我覺得還是比較重要的,就是log分類的幾種級別(prority):   v (verbose)  d (debug)   i  (information)   w (warning)   e (error)   這

android測試jacoco做功能測試程式碼覆蓋率統計

1、新建test pkg 2、InstrumentedActivity要繼承Main Activity 3、增加宣告和申請許可權 Manifest中增加: <uses-permission android:name="android.permissio

Android數據存儲- File

idt cti click try exc sum 文件內容 andro mic 個人學習整理。如有不足之處,請不吝不吝賜教。轉載請註明:@CSU-Max 讀寫本應用程序數據目錄中的文件 此種方法讀寫的文件在/data/data/<

Android N 7.1.1 ActivityManagerService 獲取cpu狀態

nts ota system sna ati andro ood imp use void updateCpuStatsNow() { synchronized (mProcessCpuTracker) { mProcessCpuM

Android Studio安裝部署系列十八、Android studio更換APP應用圖標

tail map 安全區 大小 next detail 有時 ash blog 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 概述 Android Studio新建項目後會有一個默認圖標,那麽如何更換圖標呢? 替換圖標 這個方案不建議直接在已有項目上更換

Android Studio安裝部署系列三十四、將Eclipse項目導入到Android Studio中

png 規範 報錯 dsv 代碼 struct const 程序包 方法 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 概述 我采用的是笨方法:新創建Android Studio項目,然後將Eclipse項目中的目錄一一復制到Android Studio項目中。

Android Studio安裝部署系列二十二、Android studio自動生成set、get方法

setter 自動生成 全選 style 原創文章 back .com 安裝部署 dash 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 操作步驟 將光標放置我們所要生成get,set方法的實體類空白處——然後右鍵—&mdas

Android Studio安裝部署系列九、Android Studio常用配置以及快捷鍵

har 常用配置 int intel 你在 tom ron androi use 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 概述 整理Android Studio的常用配置和快捷鍵。 常用配置 顯示行號 臨時顯示 永久顯示 File&md

Android Studio安裝部署系列三十三、windows系統中通過SourceTree使用git

wan 彈出 隱藏 ins 顯示 創建倉庫 cal 代碼 參考 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 概述 前期準備 選擇代碼托管服務器:gitlab、github、開源中國等。 註冊賬號 創建項目 安裝git 參考《【Android

Android Studio安裝部署系列二、Android Studio開發環境搭建

alt nand inf ima str php span 開發環境搭建 index.php 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 概述 Android Studio開發環境安裝步驟 下載Android Studio 下載地址: http://ww

Android Studio安裝部署系列二十七、Android studio修改項目名稱

detail 如何 裏的 繼續 想要 example 發現 and 版權 版權聲明:本文為HaiyuKing原創文章,轉載請註明出處! 概述 實際項目開發中可能碰到項目名稱寫錯了或者需要修改,而且包名可能也想要修改,那麽如何操作呢。 本文是在Android Studi