2014-01-13 53 views
3

我有這個應用程序在其中輸入文本通過亞行外殼過去了,現在的問題是,每當我鍵入命令:亞行殼牌的inputText太長

./adb殼輸入文本「海阿」

完美地工作,它顯示<「Khay」>它在應用程序的文本框中,因爲它應該是。但是當我通過命令,這是非常長的一樣的東西:

./adb shell input text ' http://stagingapi.something.com/v2/api.php?apikey=2323214\&appid=32432\&imei=324234 ........................................................ 

是文本是這麼多的時間越長,給我一個錯誤

錯誤:服務名稱太長。

現在我有一個2part問題。

  1. 我可以以某種方式通過使用adb外殼這個長文本。

  2. 如果選項1是不可能的,那麼它是什麼,我能做些什麼使這漫長的輸入文本

+0

確保您的文本字符串不包含空格。用'%s'替換所有空格 –

+0

Yea已經這樣做了。那麼我想出了一個臨時和簡單的解決方案,通過輸入3部分,並且字符串只是追加一個部分到另一個 – user3189761

回答

5

一種問題的解決辦法是寫長命令到本地shell文件,推該文件使用adb push,然後在設備上使用sh執行。

因此,而不是執行:

adb shell input text ' http://...some.really.long.command...' 

而是執行此操作:

echo "input text ' http://...some.really.long.command...'" > longcommand.sh 
chmod +x longcommand.sh 
adb push longcommand.sh /data/local/tmp 
adb shell sh /data/local/tmp/longcommand.sh 
+0

這節省了我的生命。我不想根源於我的設備,並且不記得我可以'sh file.sh'而不是'。/ file.sh'。只有一句話:我不認爲'chmod + x file.sh'是需要這個工作的。 –

0

這不是字符串的長度就是你的問題,它是特殊字符處理。

Best to run your string through a converter (to add escape codes), 
there are quite a few characters that input does not like: 
<pre> 
() < > | ; & * \ ~ 
</pre> 
and space escaped with %s . 
<pre> 
    char * convert(char * trans_string) 
    { 
     char *s0 = replace(trans_string, '\\', "\\\\"); 
     free(trans_string); 
     char *s = replace(s0, '%', "\\\%"); 
     free(s0); 
     char *s1 = replace(s, ' ', "%s");//special case for SPACE 
     free(s); 
     char *s2 = replace(s1, '\"', "\\\""); 
     free(s1); 
     char *s3 = replace(s2, '\'', "\\\'"); 
     free(s2); 
     char *s4 = replace(s3, '\(', "\\\("); 
     free(s3); 
     char *s5 = replace(s4, '\)', "\\\)"); 
     free(s4); 
     char *s6 = replace(s5, '\&', "\\\&"); 
     free(s5); 
     char *s7 = replace(s6, '\<', "\\\<"); 
     free(s6); 
     char *s8 = replace(s7, '\>', "\\\>"); 
     free(s7); 
     char *s9 = replace(s8, '\;', "\\\;"); 
     free(s8); 
     char *s10 = replace(s9, '\*', "\\\*"); 
     free(s9); 
     char *s11 = replace(s10, '\|', "\\\|"); 
     free(s10); 
     char *s12 = replace(s11, '\~', "\\\~"); 
     //this if un-escaped gives current directory ! 
     free(s11); 
     char *s13 = replace(s12, '\¬', "\\\¬"); 
     free(s12); 
     char *s14 = replace(s13, '\`', "\\\`"); 
     free(s13); 
    // char *s15 = replace(s14, '\¦', "\\\¦"); 
    // free(s14); 
     return s14; 
} 

(code from inputer native binary: interactive converter for input).