今天遇到一個bug,比較有意思。
情景:
- 測試一個鑽石提現功能,條件是賬戶里必須有價值等於或者超過50美元的鑽石,才允許提現,否則無法進行下一步。
測試步驟:
- 提現頁面輸入一個小於50美元的提現金額,不點擊下一步
- 進入手機shell,獲取root權限,執行 am start -n com.cs.test/.activity.WithdrawCardListActivity,回車之后就能進入選擇銀行卡頁面

- 輸入銀行卡卡號,下一步,提現了
這個測試的意圖就是,在不滿足判斷條件的情況下,越過app的驗證,繼續后面的操作。
這里要學習的就是 am start -n com.cs.test/.activity.WithdrawCardListActivity 這個命令。
前面的篇章有介紹過,am start -n <包名>/<包名>.<Activity名> 這條命令的作用就是啟動程序或者直接啟動某個Activity,就像這個測試中的跳轉一樣。
那么問題來了,怎么獲取這個app的包名和Activity名呢?
查看包名的方法有以下兩種但不局限於這兩種:
- aapt dump badging <apk文件路徑> ,aapt是SDK的一個小工具,在build-tools里面

- 使用re文件管理器,查看/data/app
查看Activity名的方法:
- adb shell dumpsys activity | grep "Card" -----Linux
- adb shell dumpsys activity | findstr "Card" -----Windows

記得一定要進行過濾,因為一個app會有很多個Activity,不過濾會找得頭都暈的。
然后,問題又來了,aapt 這個命令又該怎么用呢?知道aapt可以用來查看包名、activity名、版本等很多信息,后面用到再逐個去了解,先知道有這么回事兒就行了。

