題:
是否可以使用ADB寫入設備的剪貼板?
earthmeLon
2012-02-21 04:12:52 UTC
view on stackexchange narkive permalink

我有興趣學習如何寫入(如果可能的話,請從其中讀取)已紮根的Android設備的剪貼板。

我希望通過USB使用ADB進行此操作,並且不希望安裝可以幫助我做到這一點的應用程序,因為這是我計劃很少做的事情。

任何建議或幫助指導我朝著正確的方向前進。

對於尋求仿真器更簡便方法的任何人,請參見此處:http://stackoverflow.com/questions/3391160/paste-text-on-android-emulator
五 答案:
eldarerathis
2012-02-21 04:39:06 UTC
view on stackexchange narkive permalink

是的,您實際上可以做到。

首先,您可以通過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)

我終於可以粘貼我的WPA密鑰並連接到路由器:D。謝謝。
@earthmeLon,如果您只是想找到一種簡單的方法來複製WPA密鑰,那麼下一次您可能會發現更容易進行諸如將其發送給自己並從電子郵件中復制/粘貼,或將包含它的文本文件複製到您的設備上的設置。通過USB,然後從那裡打開並複制。還有其他選項,例如[Wifi鍵盤](https://market.android.com/details?id=com.volosyukivan),可讓您從PC鍵入(或粘貼)並使其出現在手機上。
我的WPA密鑰很敏感。不應在任何非本地網絡EVER上廣播。感謝您的建議@GAThrawn。我最終會發現更多使用此功能的:D
通過USB複製文件是本地的
我得到'........未知的.p.a.c.k.a.g.e。 .....')`製作“呼叫服務剪貼板2”時
不幸的是,這不再起作用
從[this](http://android.stackexchange.com/questions/59288/where-does-android-store-clipboard-data)的相關文章中,看來那些附加參數可能必須是程序包名稱或其他名稱?
您是否偶然知道棒棒糖的等效功能?該命令在kitkat中起作用,但在棒棒糖中不再起作用
萬一您需要將密碼或任何文本複製到android上的文本字段中,您也可以“ abd shell輸入文本'String'“-我已經放棄了剪貼板...
galets
2015-04-19 03:13:55 UTC
view on stackexchange narkive permalink

我使用了這種方法,並且在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”  
您需要雙重轉義字符串的原因是[有兩個shell:您的shell和adb shell](https://code.google.com/p/android/issues/detail?id=61561)。但是,我懷疑對於在外殼程序中具有特殊含義的其他字符,例如[與號](http://stackoverflow.com/questions/28468279/how-to-input-ampersand-with-adb-shell-輸入/ 28468561#28468561)。
正確執行轉義實際上是adb shell的任務,但顯然並沒有完全完成。在我的版本(1.0.31)中,不需要使用上面的空格轉義,但是所有特殊字符都需要轉義(但是不可能可靠地做到這一點)。
處理特殊字符的更好方法是通過stdin進行管道傳輸,例如:`echo“ $ TEXT” |adb shell xargs -0輸入文本`應該處理任何文本,但\ 0(NUL)字符除外。不幸的是,較舊的adb版本不會將stdin轉發到adb命令行上指定的命令。這在較新的adb版本中已修復,但[需要Android N才能運行](https://issuetracker.google.com/issues/37001957#comment3)。
至於空間轉義,這顯然是Android設備上的“ input”命令所必需的,而不是“ adb shell”所使用的shell。此外,根據[this answer](https://stackoverflow.com/documentation/android/9408/adb-shell/3958/send-text通過adb#t將鍵按下並觸摸事件到Android設備上= 201706121424020424504)。
Matthijs Kooijman
2017-06-12 20:15:10 UTC
view on stackexchange narkive permalink

這是上述方法的改進版腳本。與該腳本一樣,它不會寫到剪貼板,而是將輸入發送到當前始終要聚焦的輸入字段。

此腳本經過改進,可以轉義特殊字符,以防止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”  
Sascha N.
2017-01-05 17:47:16 UTC
view on stackexchange narkive permalink

我已經嘗試過並用Google搜索了一下,似乎call-service-clipboard-approach在新的android上停止工作了,但是在4.4.4版本的Android上卻失敗了。即您將需要一個應用程序才能從adb-shell獲取剪貼板訪問(讀寫)。我在github上使用來自majido的 clipper。該apk也是託管的,因此無需自己編譯。安裝後,您可以使用廣播命令與之通信(應用程序會告訴您確切的命令)。應用程序不需要root。

因為我們不知道您的目的是什麼:您能否請您[編輯]您的帖子並包括該應用程序的功能,以及該應用程序的用途?人們已經開始將您的帖子標記為“不是答案”,因為他們顯然錯過了您想提出的觀點。提前致謝!
與使用“ adb shell輸入文本”相比,cliper對我而言效果更好。甚至比Python腳本AdbPaste https://github.com/gcb/AdbPaste更好地包裝“ adb shell輸入文本”。我增強了Clipper以支持文件參數,因此現在我可以將多個頁面發送到剪貼板一兩秒。此處的增強代碼:https://github.com/RoundSparrow/clipper
Matthijs Kooijman
2019-09-19 15:07:04 UTC
view on stackexchange narkive permalink

可以在此處找到使用 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“要粘貼的文本”  


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...