1. 程式人生 > >apk中啟動一個shell指令碼

apk中啟動一個shell指令碼

JAVA中,可以呼叫execCommand方法執行shell指令碼,以下是一個例子:

1. #! /system/bin/sh

2. #最簡單的一個shell,沒什麼功能

3. #需要注意的是必須是 #! /system/bin/sh開頭(有空格)

4. #和一般linux不同,如果用#!/bin/sh就會找不到(因為沒有)

5. ls

複製程式碼

在cmd中用adb push d:\\x.sh /data/ziyouku上傳shell

第一個引數是本地檔案位置,第二個是遠端位置(也就是放在android中的位置),在根目錄的data目錄下,ziyouku是我自己建立的一個資料夾. 如果失敗了,說是隻有隻讀許可權的話,需要修改資料夾的許可權.具體如下:

進入adb shell,使用mount命令檢視掛了哪些塊.

1. C:\Documents and Settings\Ziyoukutang>adb shell

2. # mount

3. mount

4. rootfs / rootfs ro 0 0

5. tmpfs /dev tmpfs rw,mode=755 0 0

6. devpts /dev/pts devpts rw,mode=600 0 0

7. proc /proc proc rw 0 0

8. sysfs /sys sysfs rw 0 0

9. tmpfs /sqlite_stmt_journals tmpfs rw,size=4096k 0 0

10. /dev/block/mtdblock0 /system yaffs2 ro,noatime,nodiratime 0 0

11. /dev/block/mtdblock1 /data yaffs2 rw,nosuid,nodev 0 0

12. /dev/block/mtdblock2 /cache yaffs2 rw,nosuid,nodev 0 0

複製程式碼

比如/dev/block/mtdblock0 /system就是隻讀的,/dev/block/mtdblock1 /data是讀寫的

修改讀寫許可權用mount命令

例如 mount -t yaffs2 -o remount,rw,noatime,nodiratime /dev/mtdblock0 /system

-o選項用來描述裝置或者檔案的掛接方式,常用的有

loop:用來把一個檔案當成硬碟分割槽掛接上系統

ro:採用只讀方式掛接裝置

rw:採用讀寫方式掛接裝置

具體的用法可以google linux命令mout的用法.

上面那句話的意思就是讓/system資料夾有讀寫的許可權

2. cd到shell所在的資料夾,檢視x.sh的許可權,一般上傳上去的話是沒有執行許可權的,可以用ls -l檢視

使用chmod 777 x.sh增加許可權,具體可以google chmod的用法.

3. 執行 ./x.sh

4. 如何在程式中執行shell

1. package com.ziyouku.hellocommand;

2.

3. import java.io.BufferedReader;

4. import java.io.IOException;

5. import java.io.InputStream;

6. import java.io.InputStreamReader;

7. import android.app.Activity;

8. import android.os.Bundle;

9. import android.widget.TextView;

10.

11. public class HelloCommand extends Activity {

12. /** Called when the activity is first created. */

13. private TextView tv;

14.

15. @Override

16. public void onCreate(Bundle savedInstanceState) {

17. super.onCreate(savedInstanceState);

18. setContentView(R.layout.main);

19. tv = (TextView)findViewById(R.id.tv01);

20.

21.

22. try {

23. execCommand("./data/ziyouku/x.sh");

24. } catch (IOException e) {

25. // TODO Auto-generated catch block

26. e.printStackTrace();

27. }

28. }

29.

30. public void execCommand(String command) throws IOException {

31.

32. // start the ls command running

33. //String[] args = new String[]{"sh", "-c", command};

34. Runtime runtime = Runtime.getRuntime();

35. Process proc = runtime.exec(command); //這句話就是shell與高階語言間的呼叫

36. //如果有引數的話可以用另外一個被過載的exec方法

37.

38. //實際上這樣執行時啟動了一個子程序,它沒有父程序的控制檯

39. //也就看不到輸出,所以我們需要用輸出流來得到shell執行後的輸出

40. InputStream inputstream = proc.getInputStream();

41. InputStreamReader inputstreamreader = new InputStreamReader(inputstream);

42. BufferedReader bufferedreader = new BufferedReader(inputstreamreader);

43.

44. // read the ls output

45.

46. String line = "";

47. StringBuilder sb = new StringBuilder(line);

48. while ((line = bufferedreader.readLine()) != null) {

49. //System.out.println(line);

50. sb.append(line);

51. sb.append('\n');

52. }

53.

54. tv.setText(sb.toString());

55.

56. //使用exec執行不會等執行成功以後才返回,它會立即返回

57. //所以在某些情況下是很要命的(比如複製檔案的時候)

58. //使用wairFor()可以等待命令執行完成以後才返回

59. try {

60. if (proc.waitFor() != 0) {

61. System.err.println("exit value = " + proc.exitValue());

62. }

63. }

64. catch (InterruptedException e) {

65. System.err.println(e);

66. }

67. }

68. }

相關推薦

apk啟動一個shell指令碼

JAVA中,可以呼叫execCommand方法執行shell指令碼,以下是一個例子: 1. #! /system/bin/sh 2. #最簡單的一個shell,沒什麼功能 3. #需要注意的是必須是 #! /system/bin/sh開頭(有空格) 4. #和一般linux不同,如果用#!/bin/sh就會

一個shell指令碼啟動伺服器

使用shell指令碼寫一個一鍵啟動伺服器 ####由於我們伺服器使用的docker, nginx和 redis 還有mysql都是docker啟動好的 我們專案使用supervisor程序管理工具,需要提前配置,但是不知道什麼原因,以前的環境配置出了問題,supervisor不

一個shell指令碼啟動伺服器 -----python

使用shell指令碼寫一個一鍵啟動伺服器 由於我們伺服器使用的docker, nginx和 redis 還有mysql都是docker啟動好的 我們專案使用supervisor程序管理工具,需要提前配置,但是不知道什麼原因,以前的環境配置出了問題,sup

Shell 指令碼呼叫另一個 Shell 指令碼的三種方式

先來說一下主要以下有幾種方式: fork: 如果指令碼有執行許可權的話,path/to/foo.sh。如果沒有,sh path/to/foo.sh。 exec: exec path/to/foo.sh source: source path/to/foo.s

Shell 指令碼呼叫另一個 Shell 指令碼的三種方式以及返回值問題

指令碼呼叫: 先來說一下主要以下有幾種方式: fork: 如果指令碼有執行許可權的話,path/to/foo.sh。如果沒有,sh path/to/foo.sh。新開啟子shell,需要在父shell定義環境變數的變數子shell才可以使用可以繼承環境變數。在指令碼中

在守護進程啟動一個新進程

gis users man channel catch hat 進程 bject callback 以websocketpp的example為基礎, #include <websocketpp/config/asio_no_tls.hpp> #include

向大家分享一個shell指令碼的坑

打算在跳板機上寫一個shell指令碼,批量檢查遠端伺服器上的main程序是否在健康執行中。 先找出其中一臺遠端機器,檢視main程序執行情況 [[email protected] tmp]# ps -ef|grep main root 23448 23422 0 11:4

編寫第一個Shell指令碼【TLCL】

怎樣編寫一個 Shell 指令碼 編寫一個指令碼 使指令碼檔案可執行 把指令碼放到Shell能夠找到的地方 指令碼檔案格式 #!/bin/bash # This is our first script. echo 'Hello World!' #

編寫第一個shell指令碼檔案

vi test.sh 這樣就新建了一個名為test.sh的指令碼檔案,之後按i進入編輯模式,輸入以下內容: echo "What is your name?" read PERSON echo "Hello, $PERSON" 按esc鍵退出編輯模式,再輸

Linux "編寫一個shell指令碼,讓使用者輸入某個目錄名/使用者名稱,先判斷輸入名稱是否存在且是個目錄名稱"及其變式

(3)shell指令碼,提示使用者輸入一個使用者名稱,如果存在;顯示使用者UID和SHELL資訊;否則,則顯示無此使用者;顯示完成之後,提示使用者再次輸入;如果是quit則退出 https://www.cnblogs.com/wangyuebo/p/5836

迴圈刪除程式碼^M的shell指令碼

#! /bin/bash #echo “start……” #define a function to read all the files in the folder function readfile(){ for file in ls $1 do if [

在自定義控制元件啟動一個活動時出現的undefin的錯誤問題

public class TitleLayout extends LinearLayout{     public TitleLayout(Context context, AttributeSet attrs) {     &nb

Linux 高效編寫 Shell 指令碼的 10 個技巧

Shell 指令碼程式設計 是你在 Linux 下學習或練習程式設計的最簡單的方式。尤其對 系統管理員要處理著自動化任務,且要開發新的簡單的實用程式或工具等(這裡只是僅舉幾例)更是必備技能。 本文中,我們將分享 10 個寫出高效可靠的 bash 指令碼的實用技巧,它們包括: 1、 指令碼中多寫註釋

一個Shell指令碼裝逼的小技巧,讓指令碼屏顯酷炫起來

在我們腦海裡,Shell指令碼執行在Putty/Xshell裡也就是黑白的字元,但今天小編整理了一個可以快速讓你讓Sehll指令碼的列印屏顯酷炫起來,下面這條命令: echo -e “\033[44;37;5m So Cool! \033[0m” 執行後,打印出來的效果是這樣的,是不是覺得逼格滿滿?

Android動態部署六:如何從外掛apk啟動BroadcastReceiver和ContentProvider

實現Android動態部署的過程中最重要的是從外掛apk中啟動四大元件,經過前面幾篇文章的分析,現在只剩下BroadcastReceiver和ContentProvider了,BroadcastReceiver是可以通過java程式碼動態註冊的,可想而知

ubuntu上第一個shell指令碼

Ubuntu下第一個shell指令碼 在home目錄下新建資料夾xk mkdir xk 進入xk資料夾,新建檔案helloshell touch helloshell 在helloshell檔案中輸入如下內容: #!/bin/bash

關於在hue當中調shell指令碼的操作(這裡的shell 指令碼是在shell腳本當巢狀shell指令碼的操作使用source的方式)

這兩天在做資料的匯入操作,為了方便資料的匯入我們採用sqoop的方式將資料匯入。但是在表很多的情況下,在hue當中部署工作流就是一件很麻煩的事情, 然後想著能不能通過shell指令碼調shell指令碼的方式實現在一個shell腳本當中就可以實現對多個匯入操作指令碼的呼叫。 操作指令碼如下: #!/

mac下編寫自己的第一個shell指令碼

bash shell兩種工作模式 互動模式和指令碼模式 指令碼模式效率更高,可以實現自動化 1.helloworld.sh vi helloworld.sh #!/bin/bash echo "hello world 2018.11.1" #!bin/bash 是用

web專案啟動一個執行緒,的方法

JavaWeb 服務啟動時,在後臺啟動載入一個執行緒。 目前,我所掌握的一共有兩種方法,第一種是監聽(Listener),第二種是配置隨專案啟動而啟動的Servlet。 下面對這兩種方法做一簡單的介紹,(Mark一下,防止以後急用又忘記了): 1.監聽(Listener) 首先,我們建立

python:一秒啟動一個下載伺服器

一、背景 在實際工作中,時不時會有這樣的一個需求:將檔案傳給其他同事。將檔案傳給同事本身並不是一個很繁瑣的工作,現在的聊天工具一般都支援檔案傳輸。但是,如果需要傳送的檔案較多,那麼,操作起來就會比較麻煩。此外,如果檔案在遠端的伺服器上,你要將檔案傳給同事,則需要先將遠端伺服器的檔案下載到本地,然