2016-11-06 91 views
-1

我想從bash腳本調用公共android方法getSSID()?我的目標是將android設備上當前連接的SSID返回給bash變量。bash腳本使用活動管理器調用公共android api方法(am)

要求:

  • 必須運行以非超級用戶
  • 必須使用僅限Android烘烤功能。
  • AKA不需要額外安裝應用程序
  • 必須直接從簡單的bash腳本運行。

以前: 我一直在使用該命令dumpsys使用grep來獲取我所需要的,但現在看來,我需要的是根這個工作,所以我在尋找這個概念的替代品。

$ dumpsys wifi | grep -i $grepwifi 

所以我發現了這個公共API ...

https://developer.android.com/reference/android/net/wifi/WifiInfo.html

但我無法弄清楚如何得到它的工作。我已經嘗試了幾個選項,如下所列沒有任何運氣。

$ am start -a android.intent.action.MAIN -n com.android.settings/.wifi.WifiInfo.getSSID() 
/system/bin/sh: syntax error: '(' unexpected 

或者

$ am start -a android.intent.action.MAIN -n com.android.settings/.wifi.WifiInfo.getSSID 
Starting: Intent { act=android.intent.action.MAIN cmp=com.android.settings/.wifi.WifiInfo.getSSID } 
Error type 3 
Error: Activity class {com.android.settings/com.android.settings.wifi.WifiInfo.getSSID} does not exist. 

我假設我根本就沒有把網址一起正確。所以我希望有人能指出我如何構建這些命令的文檔,以便一旦我通過ssid chalange後,我可以繼續探索其他公共API,但是如果有另一個簡單的方法從設備檢索WiFi信息,我會感謝任何可行的替代方案。

+0

'am start'在命令行中接受一個I​​ntent,而不是您嘗試的方法名稱。 –

+0

感謝您的回覆。這是我已經能夠開始工作的一個例子。 adb shell am start -a android.intent.action.MAIN -n com.android.settings/.wifi.WifiSettings – Steve

+0

但它不是一種方法,它是一個組件(pkg + activity) –

回答

0

首先,這是不允許你使用的設備和Android版本dumpsys

無論如何,我會告訴你一個這樣做的方法,不需要dumpsys使用AndroidViewClient/culebra

您可以使用culebra生成腳本,然後稍微修改它以滿足您的需要。打開快速設置,然後運行

culebra -r -d true -t false -i false -o ssid.py 

刪除什麼是沒有必要的,添加一個正則表達式匹配任何SSID(不只是一個你所看到的),你應該有這樣的事情

#! /usr/bin/env python 
# -*- coding: utf-8 -*- 
''' 
Copyright (C) 2013-2016 Diego Torres Milano 
Created on 2016-11-09 by Culebra v12.4.0 
         __ __ __ __ 
        /\/\/\/\ 
____________________/ __\/ __\/ __\/ __\_____________________________ 
___________________/ /__/ /__/ /__/ /________________________________ 
        |/\ /\ /\ /\ \___ 
        |/ \_/ \_/ \_/ \ o \ 
              \_____/--< 
@author: Diego Torres Milano 
@author: Jennifer E. Swofford (ascii art snake) 
''' 


import re 
import sys 
import os 

from com.dtmilano.android.viewclient import ViewClient 

TAG = 'CULEBRA' 

_s = 5 
_v = '--verbose' in sys.argv 


kwargs1 = {'ignoreversioncheck': False, 'verbose': False, 'ignoresecuredevice': False} 
device, serialno = ViewClient.connectToDeviceOrExit(**kwargs1) 
kwargs2 = {'forceviewserveruse': False, 'useuiautomatorhelper': False, 'ignoreuiautomatorkilled': True, 'autodump': False, 'startviewserver': True, 'compresseddump': True} 
vc = ViewClient(device, serialno, **kwargs2) 


vc.uiDevice.openQuickSettings() 
vc.sleep(_s) 

vc.dump(window='-1') 
print vc.findViewWithContentDescriptionOrRaise(re.compile(u'''Connected to .*''')).getContentDescription() 

或者,如果您願意,可以使用Culebra GUI並通過用戶界面執行這些操作。

+0

在我測試過的幾乎所有設備上,我都看到了與非根用法dumpsys相同的行爲。今天爲了確保我不瘋狂,我嘗試了3種不同的手機。 Android 2.3.7,4.1.2和6.0.1。除非以root用戶身份運行,否則所有3個都會在該命令上獲得「權限拒絕」 '$ dumpsys wifi' 這是否會引起任何人的不尋常?我認爲這很典型。 感謝您提供建議的解決方案,但有幾個原因可能導致我無法正常工作。 android上的python位於列表的頂部。我的3個測試手機都不能默認運行python腳本。 – Steve

+0

有沒有更直接的方法你知道? – Steve

+0

python在您的計算機上運行,​​而不是您的手機。這也許是'dumpsys'不適合你的原因,'adb'是需要的。 –