我有興趣學習如何寫入(如果可能的話,請從其中讀取)已紮根的Android設備的剪貼板。
我希望通過USB使用ADB進行此操作,並且不希望安裝可以幫助我做到這一點的應用程序,因為這是我計劃很少做的事情。
任何建議或幫助指導我朝著正確的方向前進。
我有興趣學習如何寫入(如果可能的話,請從其中讀取)已紮根的Android設備的剪貼板。
我希望通過USB使用ADB進行此操作,並且不希望安裝可以幫助我做到這一點的應用程序,因為這是我計劃很少做的事情。
任何建議或幫助指導我朝著正確的方向前進。
是的,您實際上可以做到。
首先,您可以通過adb shell中的 service call剪貼板1
檢查當前剪貼板的內容。 (或者,不先進行脫殼,則 adb shell服務調用剪貼板1
)。重新啟動後,它最初可能開始為空白,例如:
#服務調用剪貼板1結果:宗地(0x00000000:00000000 00000001 00000000 00000000'............ ....'0x00000010:00000000 00000000'........')#
您可以使用服務呼叫剪貼板2 code將文本放入剪貼板>,它基本上需要3個參數-兩個整數和要放在剪貼板上的字符串:
#服務調用剪貼板2 i32 1 i32 0 s16“嗨”結果:包裹(00000000 '....')
說實話,我不確定前兩個參數是什麼。 有關堆棧溢出的一個答案建議,第一個int是“包裹中的項目數”(在這種情況下為一個),第二個是字符串的長度。但是,我在第二個參數中使用了0,它可以正常工作,而且我找不到與該特定功能匹配的任何文檔...因此,請考慮一下它的價值。
在無論如何,基本上是創建一個具有3個字段的Parcel對象,然後將其傳遞到剪貼板中。然後剪貼板將包裹解壓縮,並將傳入的字符串值設置為剪貼板的內容。以後再獲取值時可以看到以下內容:
#服務調用剪貼板1結果:包裹(0x00000000:00000000 00000001 00000000 00000008'............ ....'0x00000010:00690048 00740020 00650068 00650072'嗨.there'0x00000020:00000000 00000000'........')#
類似地,如果長按文本輸入字段並在執行此操作後點擊“粘貼”,您將獲得通過上方呼叫服務剪貼板2
行設置的文本(會看起來完全正常)。
(以上示例來自運行CyanogenMod 7的HTC EVO)
我使用了這種方法,並且在4.x中效果很好,但對棒棒糖卻失敗了。在尋找替代解決方案時,我發現了這一點: https://stackoverflow.com/questions/3391160/paste-text-on-android-emulator
它與您想要它,但是對我自己來說,大多數時候我想將文本複製到剪貼板是因為我想將其粘貼到密碼字段中。
作為一個額外的獎勵,這是我的腳本(編輯於2015- 04-24允許在文本中使用空格):
#!/ bin / bashif [[“ $ 1”!=“”]]然後TEXT = $ 1else讀-s- p“輸入要插入的文本:” TEXTfiESCAPED_TEXT =`echo $ TEXT | sed“ s / \ s / \%s / g”`adb shell輸入文本“ $ ESCAPED_TEXT”
這是上述方法的改進版腳本。與該腳本一樣,它不會寫到剪貼板,而是將輸入發送到當前始終要聚焦的輸入字段。
此腳本經過改進,可以轉義特殊字符,以防止Android shell與他們。這應該允許任何字符串不變地發送。為了防止 read
命令解釋(反斜杠)反斜杠,我在此處添加了-r。
使用以下特殊字符列表對此進行了測試:
./ adb-send-string'\`〜!@#$%^ & *()-_ == [[{]} |; ::“,<.> /?'\'
這是腳本:
#!/ bin / bash#使用adb將文本發送到android設備,模擬鍵盤輸入。#基於https://的腳本android.stackexchange.com/a/105881/223695#擴展為支持特殊字符,如果[[“” $ 1“!=”“]]然後TEXT =” $ 1“ else讀-s -r -p”輸入要插入的文本: “ TEXTfiescape(){#將字符串封裝在$”中,從而可以解釋字符串中的\\ xnn轉義符。這不是POSIX-sh,而是由bash記錄的擴展名#,也受Android sh支持。 n“ $'”#為((i = 0; i< $ {#1}; i ++))一個接一個地處理$ 1中的每個字符; do#提取第i個字符C =“ $ {1:$ i: 1}”,如果[ “ $ C” =''];然後#將空格編碼為%s,這是Android在6.0 Marshmellow以下的#“輸入文本”命令所必需的#請參閱https://stackoverflow.com/documentation/android/9408/adb-shell/3958/send-text-key-通過adb將事件壓入並觸摸到Android設備echo -n'%s'else#將其他所有代碼編碼為\ xnn,以防止它們被#Android外殼程序printf'\\ x%解釋02x'“'$ C” fi完成#終止$''echo -n“'”} ESCAPED_TEXT =`轉義“ $ TEXT”`adb shell輸入文本“ $ ESCAPED_TEXT”
我已經嘗試過並用Google搜索了一下,似乎call-service-clipboard-approach在新的android上停止工作了,但是在4.4.4版本的Android上卻失敗了。即您將需要一個應用程序才能從adb-shell獲取剪貼板訪問(讀寫)。我在github上使用來自majido的 clipper。該apk也是託管的,因此無需自己編譯。安裝後,您可以使用廣播命令與之通信(應用程序會告訴您確切的命令)。應用程序不需要root。
可以在此處找到使用 adb shell輸入
發送字符的另一個腳本: https://github.com/gcb/AdbPaste
這是一個Python腳本,可以從github克隆,也可以直接下載並運行:
$ wget https://github.com/gcb/AdbPaste/raw/master/AdbPaste.py$ chmod a + x AdbPaste.py $ ./AdbPaste.py“要粘貼的文本”