2012-10-02 19 views
50

的啓動的活動名稱有沒有辦法從使用adb得到一個包可發射活動?對於unroot電話(即不具有從/data/app目錄摳APK與appt檢查)。得到包亞行

我試過dumpsys,但不包括默認啓動的活動信息。

感謝

回答

74

你並不需要root從/data/app拉APK文件。當然,你可能沒有權限列出目錄的內容,但你可以找到的APK與文件位置:

adb shell pm list packages -f 

然後你可以使用adb pull

adb pull <APK path from previous command> 

,然後aapt到獲取你想要的信息:

aapt dump badging <pulledfile.apk> 
+11

和AAPT的使用可以在這裏找到在計算器上:http://stackoverflow.com/a/7502519/26510 –

+0

這是巨大的,直接的和殺手,包括第一次評論 – Oxi

+3

1,不要因爲kabuko說 2,亞行拉/數據/應用/ 〜/ <你在哪裏都希望它> 3,AAPT轉儲徽章 完蛋了 – Oxi

0

這是另一種查找應用程序包名稱和啓動器活動的方法。

第一步:啓動 「亞行logcat」 在命令提示符。

第二步:打開應用程序(無論是在模擬器或真實設備) enter image description here

+1

這隻適用於應用程序已在設備上至少啓動一次的情況。 – sschuberth

+0

發現這是最簡單的解決方案,不知道爲什麼downvotes。 – Marcelo

8
#!/bin/bash 
#file getActivity.sh 
package_name=$1 
#launch app by package name 
adb shell monkey -p ${package_name} -c android.intent.category.LAUNCHER 1; 
sleep 1; 
#get Activity name 
adb shell logcat -d | grep 'START u0' | tail -n 1 | sed 's/.*cmp=\(.*\)} .*/\1/g' 

樣本:

getActivity.sh com.tencent.mm 
com.tencent.mm/.ui.LauncherUI 
33
$ adb shell pm dump PACKAGE_NAME | grep -A 1 MAIN 
+0

這工作N6 7.0 - 謝謝你。 – Kristopher

+1

'$ adb shell pm dump PACKAGE_NAME | grep -A 1'filter'|頭-n 1 | cut -d''-f 12'可能有更聰明的方法,但我不是* NIX大師。 – Kristopher

+1

'pm dump'轉儲許多不必要的服務。而'pm'本身是一個java命令,所以需要一些時間才能啓動。輸出的相關部分來自'PackageManager.Dump()',所以'adb shell dumpsys package PACKAGE_NAME'對於產生相同的結果會更有效率。但有更好的方式Android 7.0 +請參閱http://stackoverflow.com/a/41325792/1778421 –

7

我沒有發現它列出這樣更新列表。

你需要有APK安裝和您的手機上跑在最前面的這個解決方案

的Windows CMD行:

adb shell dumpsys window windows | findstr <any unique string from your pkg Name>

Linux終端:

adb shell dumpsys window windows | grep -i <any unique string from your Pkg Name>

OUTPUT爲計算器包將是:

Window #7 Window{39ced4b1 u0 com.android.calculator2/com.android.calculator2.Calculator}: 

    mOwnerUid=10036 mShowToOwnerOnly=true package=com.android.calculator2 appop=NONE 

    mToken=AppWindowToken{29a4bed4 token=Token{2f850b1a ActivityRecord{eefe5c5 u0 com.android.calculator2/.Calculator t322}}} 

    mRootToken=AppWindowToken{29a4bed4 token=Token{2f850b1a ActivityRecord{eefe5c5 u0 com.android.calculator2/.Calculator t322}}} 

    mAppToken=AppWindowToken{29a4bed4 token=Token{2f850b1a ActivityRecord{eefe5c5 u0 com.android.calculator2/.Calculator t322}}} 

    WindowStateAnimator{3e160d22 com.android.calculator2/com.android.calculator2.Calculator}: 

     mSurface=Surface(name=com.android.calculator2/com.android.calculator2.Calculator) 

    mCurrentFocus=Window{39ced4b1 u0 com.android.calculator2/com.android.calculator2.Calculator} 

    mFocusedApp=AppWindowToken{29a4bed4 token=Token{2f850b1a ActivityRecord{eefe5c5 u0 com.android.calculator2/.Calculator t322}}} 

主要的部分是,第一行

Window #7 Window{39ced4b1 u0 com.android.calculator2/com.android.calculator2.Calculator}:

輸出的第一部分是包的名稱:

com.android.calculator2

輸出的第二部分(在012之後)可以是兩件事情,在我們的情況下,它:

com.android.calculator2.Calculator

  1. <PKg name>.<activity name> = <com.android.calculator2>.<Calculator>

    所以.Calculator是我們的活動

  2. 如果第二部分是完全不同的從包名稱,似乎並不包含pkg的名稱,這是befor e / in out output,那麼整個 第二部分都可以作爲主要活動。

+0

感謝它適用於我 – UserSharma

-1

您還可以使用DDMS的logcat的日誌,其中只給搜索應用程序名稱您將所有的信息,但你必須選擇的信息,而不是冗長或其他選項。檢查下面的圖像。

enter image description here

0

1)啓動Appium客戶端。下面提到的窗口會顯示,一旦你啓動了Appium客戶端。 2)點擊上面標記的android圖標打開配置設置。

3)選中應用程序路徑複選框。

4)點擊選擇按鈕來定位你的apk文件,在這種情況下,我已經給它亞馬遜apk。 enter image description here enter image description here

6

自Android 7以來。0您可以使用adb shell cmd package resolve-activity命令來獲得類似這樣的安裝的應用程序的默認活動:

adb shell "cmd package resolve-activity --brief com.google.android.calculator | tail -n 1" 
com.google.android.calculator/com.android.calculator2.Calculator