顯示具有 adb 標籤的文章。 顯示所有文章
顯示具有 adb 標籤的文章。 顯示所有文章

2024-11-14

ADB - 從裝了 app 的手機拿到 apk 檔

有些時候在實體機上裝了 app,想拿到模擬器上安裝。這個時候複製檔案的 adb pull 就很好用!

首先找到你想抓的 app 安裝在哪:
adb shell "pm list packages -f | grep 你想抓的Package名稱" 

以下舉例,假設我想找蝦皮 app,在終端機輸入:
adb -d shell "pm list packages -f|grep shopee" 

會回傳:
package:/data/app/com.shopee.tw.int-X1xsowqyHAerEoslb2fxj00g==/base.apk=com.shopee.tw.int 

那個 /data/app/com.shopee.tw.int-X1xsowqyHAerEoslb2fxj00g==/base.apk 就是 app 安裝的位置!
把 app 拉到你現在終端機的工作路徑下:
adb pull /data/app/com.shopee.tw.int-X1xsowqyHAerEoslb2fxj00g==/base.apk 

現在你就有 base.apk 了!
不出意外的話,你可以把 base.apk 裝在你的模擬器上使用~

2024-11-11

Appium Android 起手式 - 取得 appPackage 和 appActivity

在使用 Appium 進行 Android 自動化測試時,appPackage 和 appActivity 是必要的參數。

取得方式很多,記錄一下我習慣用的方法:
adb shell dumpsys window | grep -E "mCurrentFocus"
確定已經連到了 Android 裝置,並開啟 app,輸入上面的指令。

回傳的結果會是目前開啟的 app 和 app 頁面,如:appPackage/appActivity 的格式的資訊。

實際例子,開啟 Chrome app 之後: mCurrentFocus=Window{1c35821 u0 com.android.chrome/com.google.android.apps.chrome.Main} appPackage 是 com.android.chrome,appActivity 是 com.google.android.apps.chrome.Main。
-
要注意的是,appActivity 是能進 app 的第一個畫面,有些 app 開啟時可能閃現一下就跳到下一個畫面。沒有找到正確的可能會有類似以下的錯誤:
exited with code 255'; Command output: Exception occurred while executing 'start': java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000
這種時候可以拼手速,在一開啟載入閃現那個第一個畫面就趕快 enter 指令,但也可以用 Android Studio 或其他編輯器打開 apk 檔的 AndroidMainfest.xml,找到含有 android.intent.action.MAIN 的 Activity。
實際例子,有個 Activity 有這樣的內容 :
<activity
    android:name="com.example.app.loading.LoadingActivity"
    android:exported="true"
    android:screenOrientation="1"
    android:hardwareAccelerated="false">

    <intent-filter>
        <action
            android:name="android.intent.action.MAIN" />
        <category
            android:name="android.intent.category.LAUNCHER" />
    </intent-filter>

</activity>
那就是這個 Activity 了!