2018年9月29日 星期六

01-環境設置與常見錯誤排解

為了使用 monkeyrunner 執行自動化腳本,首要之舉便是安裝相關的軟體。若看官們已有相應的環境(使用 monkeyrunner 並不需要整個 Android Studio),便可略過此步驟,否則請跟著以下步驟來設定環境:
  1. 安裝 JRE 8
    https://www.oracle.com/technetwork/java/javase/downloads/index.html 下載並安裝 JRE 8。
    若要安裝其它版本的 JRE,請確認使用的 Android tools 對 JRE 的支援度。
     
  2. 安裝 Android tools
    步驟 動作
    1. https://developer.android.com/studio/Command line tools only 項目下下載適當平台的 SDK tools package
    2. 將下載的 SDK tools package 解壓縮,比如解壓縮到 C:\Android\ 下,那麼完成解壓縮後,便可找到 C:\Android\tools 資料夾。
    3. 命令提示字元內輸入 C:\Android\tools\bin\sdkmanager platform-tools 以下載 platform-tools,依提示完成後,便可找到 C:\Android\platform-tools 資料夾。
    4. 命令提示字元內輸入 C:\Android\tools\bin\sdkmanager extras;google;usb_driver 以下載 USB 驅動程式,依提示完成後,便可找到 C:\Android\extras\google\usb_driver 資料夾。
     
  3. 設置電腦的環境變數
    變數 說明
    ANDROID_SDK_HOME <SDK 安裝路徑> 如 C:\Android
    Path %ANDROID_SDK_HOME%\platform-tools
    %ANDROID_SDK_HOME%\tools\bin
    %ANDROID_SDK_HOME%\platform-tools:為了使用 adb.exe
    %ANDROID_SDK_HOME%\tools\bin:為了使用 monkeyrunner.bat
     
  4. 確認 monkeyrunner 可正常執行
    因某些版本的 SDK tools package 提供的 monkeyrunner.bat 有錯誤,所以安裝完後須確認 monkeyrunner.bat 能否正常執行。
    以 sdk-tools-windows-4333796.zip 為例,當在命令提示字元內輸入 monkeyrunner 後,會出現如以下錯誤訊息:
    C:\Users\tester>monkeyrunner
    SWT folder '..\framework\x86_64' does not exist.
    Please set ANDROID_SWT to point to the folder containing swt.jar for your platform.

    請按以下步驟修正:
    步驟 動作
    1. 以記事本開啟 tools\bin\monkeyrunner.bat
    2. set frameworkdir=lib 改為 set frameworkdir=..\lib

    修正錯誤: SWT folder '..\framework\x86_64' does not exist. Please set ANDROID_SWT to point to the folder containing swt.jar for your platform.
    set frameworkdir=lib 改為 set frameworkdir=..\lib

    再次執行 monkeyrunner,仍然有錯誤訊息:
    C:\Users\tester>monkeyrunner
    E/adb: Cannot run program "..\framework\adb.exe": CreateProcess error=2, 系統找不到指定的檔案。

    錯誤: E/adb: Cannot run program "..\framework\adb.exe": CreateProcess error=2, 系統找不到指定的檔案。
    E/adb: Cannot run program "..\framework\adb.exe": CreateProcess error=2, 系統找不到指定的檔案。

    請按以下步驟修正:
    步驟 動作
    1. 以記事本開啟 tools\bin\monkeyrunner.bat
    2. -Dcom.android.monkeyrunner.bindir=..\framework 改為 -Dcom.android.monkeyrunner.bindir=..\..\platform-tools

    修正錯誤: E/adb: Cannot run program "..\framework\adb.exe": CreateProcess error=2, 系統找不到指定的檔案。
    修正錯誤: E/adb: Cannot run program "..\framework\adb.exe": CreateProcess error=2, 系統找不到指定的檔案。

    其實這裡有個很弔詭的現象,就是:
    不管將 -Dcom.android.monkeyrunner.bindi 設成什麼都可以讓 monkeyrunner 正常執行,
    只要路徑型式是 "..\..\XXX" 的都行,
    即使根本不存在這個目錄,
    所以看官們真的可以設成 -Dcom.android.monkeyrunner.bindir=..\..\XXX 這種奇葩字串。
    若分析 tools\lib\chimpchat-26.0.0-dev.jar 的原始碼 AdbBackend.javafindAdb(),便可得知原因:
    private String findAdb() {
        String mrParentLocation =
            System.getProperty("com.android.monkeyrunner.bindir"); //$NON-NLS-1$
        // in the new SDK, adb is in the platform-tools, but when run from the command line
        // in the Android source tree, then adb is next to monkeyrunner.
        if (mrParentLocation != null && mrParentLocation.length() != 0) {
            // check if there's a platform-tools folder
            File platformTools = new File(new File(mrParentLocation).getParent(),
                    SdkConstants.FD_PLATFORM_TOOLS);
            if (platformTools.isDirectory()) {
                return platformTools.getAbsolutePath() + File.separator + SdkConstants.FN_ADB;
            }
            return mrParentLocation + File.separator + SdkConstants.FN_ADB;
        }
        return SdkConstants.FN_ADB;
    }
    
    mrParentLocation"..\..\XXX"
    所以第 8 行的 new File(mrParentLocation).getParent() 的路徑會是 "..\..\"
    也就是 "C:\Android\tools\bin\..\..\"
    "C:\Android\"
    SdkConstants.FD_PLATFORM_TOOLS"platform-tools"
    所以 platformTools 的路徑將是 "C:\Android\platform-tools"
    因此會由第 11 行將 adb 的路徑傳回。

    再次執行 monkeyrunner,成功:

    若要離開此畫面,請輸入 Ctrl-Z
     
  5. 啟用手機的偵錯功能
    要執行 monkeyrunner 前必須先將開發人員選項的選單啟用,並啟用 Android 偵錯功能,步驟為:
    步驟 動作
    1. 進入手機的系統設定畫面
    2. 進入關於畫面
    3. 點擊版本號碼 7 次以啟用開發人員選項的選單
    4. 回到系統設定畫面進入開發人員選項
    5. 啟用 USBADB 偵錯功能
    6. 安裝 ADB 裝置的驅動程式(即先前下載的 USB 驅動程式,如 C:\Android\extras\google\usb_driver

    因每家手機的設定畫面不盡相同,所以步驟 2 和 5 的部分需要看官找找,其中步驟 5 通常不是必要,因為啟用開發人員選項的選單後,將 Android 裝置重新與電腦連線,並在命令提示字元裡執行 adb devices 後,手機端應該便會跳出選項詢問看官是否允許啟用偵錯功能。

沒有留言:

張貼留言