當前位置:首頁 » 安卓系統 » androidshell

androidshell

發布時間: 2022-07-29 00:13:51

1. 如何讓Android系統或Android應用執行shell腳本

android系統執行shell腳本,需要首先確認用戶具有修改shell的許可權,使用 process來執行指令,如下代碼:

java">publicvoidexecShell(Stringcmd){
try{
//許可權設置
Processp=Runtime.getRuntime().exec("su");//開始執行shell腳本
//獲取輸出流
OutputStreamoutputStream=p.getOutputStream();
=newDataOutputStream(outputStream);
//將命令寫入
dataOutputStream.writeBytes(cmd);
//提交命令
dataOutputStream.flush();
//關閉流操作
dataOutputStream.close();
outputStream.close();
}
catch(Throwablet)
{
t.printStackTrace();
}
}

2. Android執行shell命令的代碼該怎麼寫

Android中執行adb shell命令的方式如下:

041424344

/** * 執行一個shell命令,並返回字元串值 * * @param cmd * 命令名稱&參數組成的數組(例如:{"/system/bin/cat", "/proc/version"}) * @param workdirectory * 命令執行路徑(例如:"system/bin/") * @return 執行結果組成的字元串 * @throws IOException */ public static synchronized String run(String[] cmd, String workdirectory) throws IOException { StringBuffer result = new StringBuffer(); try { // 創建操作系統進程(也可以由Runtime.exec()啟動) // Runtime runtime = Runtime.getRuntime(); // Process proc = runtime.exec(cmd); // InputStream inputstream = proc.getInputStream(); ProcessBuilder builder = new ProcessBuilder(cmd); InputStream in = null; // 設置一個路徑(絕對路徑了就不一定需要) if (workdirectory != null) { // 設置工作目錄(同上) builder.directory(new File(workdirectory)); // 合並標准錯誤和標准輸出 builder.redirectErrorStream(true); // 啟動一個新進程 Process process = builder.start(); // 讀取進程標准輸出流 in = process.getInputStream(); byte[] re = new byte[1024]; while (in.read(re) != -1) { result = result.append(new String(re)); } } // 關閉輸入流 if (in != null) { in.close(); } } catch (Exception ex) { ex.printStackTrace(); } return result.toString(); }

android系統底層採用的是linux,所以adb這樣的linux指令是可以在java代碼中調用的,可以使用ProcessBuilder 這個方法來執行對應的指令。還可以通過如下方式執行:

12345678910111213141516
Process p = Runtime.getRuntime().exec("ls"); String data = null; BufferedReader ie = new BufferedReader(new InputStreamReader(p.getErrorStream())); BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream())); String error = null; while ((error = ie.readLine()) != null && !error.equals("null")) { data += error + "\n"; } String line = null; while ((line = in.readLine()) != null && !line.equals("null")) { data += line + "\n"; } Log.v("ls", data);

3. 如何在android程序中執行adb shell命令

android中執行shell命令有兩種方式:

1.直接在代碼中用java提供的Runtime 這個類來執行命令,以下為完整示例代碼。

public void execCommand(String command) throws IOException {

// start the ls command running

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

Runtime runtime = Runtime.getRuntime();

Process proc = runtime.exec(command); //這句話就是shell與高級語言間的調用

//如果有參數的話可以用另外一個被重載的exec方法

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

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

InputStream inputstream = proc.getInputStream();

InputStreamReader inputstreamreader = new InputStreamReader(inputstream);

BufferedReader bufferedreader = new BufferedReader(inputstreamreader);

// read the ls output

String line = "";

StringBuilder sb = new StringBuilder(line);

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

//System.out.println(line);

sb.append(line);

sb.append(' ');

}

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

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

//所以在某些情況下是很要命的(比如復制文件的時候)

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

try {

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

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

}

}

catch (InterruptedException e) {

System.err.println(e);

}

}

}


2.直接安裝shell模擬器,即已經開發好的android應用,啟動後類似windows的dos命令行,可以直接安裝使用,可執行常用的linux命令,應用在附件。



4. android shell腳本

你是要在Android的模擬器上安裝程序是嗎?如果說的,下面的提示希望能幫到你。
1. 先確認你的環境變數的里的path變數值里有沒有sdk的目錄,如果沒有,先把這個目錄添加上去;
2. 打開你的cmd,然後輸入adb,然後點擊enter鍵,系統會出來很多代碼,不用理這個;
3. 進入你放你要安裝的apk的目錄里;
4. 然後輸入「adb install apk文件名」,最後點擊enter鍵,耐心等待系統幫你安裝了。

5. 怎麼讓Android系統或Android應用執行shell腳本

一、Android應用啟動服務執行腳本
1 如何寫服務和腳本
在android源碼根目錄下有/device/tegatech/tegav2/init.rc文件相信大家對這個文件都不陌生(如果不明白就仔細研讀下android啟動流程)。如果在該腳本文件中添加諸如以下服務:
service usblp_test /data/setip/init.usblpmod.sh
oneshot
disabled
註解:每個設備下都會有自己對應的init.rc,init.設備名.rc腳本文件。oneshot disabled向我們說明了在系統啟動的時候這個服務是不會自動啟動的。並且該服務的目的是執行/data/setip/init.usblpmod.sh腳本。腳本的內容你可以隨便寫,只要符合shell語法就可以了,比如腳本可以是簡單的設置eth0:
# ! /system/bin/sh //腳本的開頭必須這樣寫。
Ifconfig eth0 172.16.100.206 netmask 255.255.0.0 up//設置ip的命令
2、如何在應用中啟動服務
1)首先了解下在服務啟動的流程
1. 在你的應用中讓init.rc中添加的服務啟動起來。
首先了解下在服務啟動的流程:
在設備目錄下的init.c(切記並不是system/core/init/init.rc)
Main函數的for(;;)循環中有一個handle_property_set_fd(),函數:
for (i = 0; i < fd_count; i++) {
if (ufds[i].revents == POLLIN) {
if (ufds[i].fd == get_property_set_fd())
handle_property_set_fd();
else if (ufds[i].fd == get_keychord_fd())
handle_keychord();
else if (ufds[i].fd == get_signal_fd())
handle_signal();
}
}
這個函數的實現也在system/core/init目錄下,該函數中的check_control_perms(msg.value, cr.uid, cr.gid)函數就是檢查該uid是否有許可權啟動服務(msg.value就是你服務的名字),如果應用為root或system用戶則直接返回1.之後就是調用handle_control_message((char*) msg.name + 4, (char*) msg.value),該函數的參數就是去掉1.ctl.後的start和2.你服務的名字。這個函數的詳細內容:
void handle_control_message(const char *msg, const char *arg)
{
if (!strcmp(msg,"start")) {
msg_start(arg);
} else if (!strcmp(msg,"stop")) {
msg_stop(arg);
} else if (!strcmp(msg,"restart")) {
msg_stop(arg);
msg_start(arg);
} else {
ERROR("unknown control msg '%s'\n", msg);
}
}
匹配start後調用msg_start.服務就這樣起來了,我們的解決方案就是在檢查許可權的地方「下點功夫」,因為我們不確定uid,所以就讓check_control_perms這個函數不要檢查我們的uid,直接檢查我們服務的名字,看看這個函數:
static int check_control_perms(const char *name, unsigned int uid, unsigned int gid) {
int i;
if (uid == AID_SYSTEM || uid == AID_ROOT)
return 1;
/* Search the ACL */
for (i = 0; control_perms[i].service; i++) {
if (strcmp(control_perms[i].service, name) == 0) {
if ((uid && control_perms[i].uid == uid) ||
(gid && control_perms[i].gid == gid)) {
return 1;
}
}
}
return 0;
}
這個函數裡面是必須要檢查uid的,我們只要在for循環上寫上。
if(strcmp(「usblp_test」,name)==0) //usblp_test就是我們服務的名字。
return 1;
這樣做不會破壞android原本的結構,不會有什麼副作用。
init.c和init.rc都改好了,現在就可以編譯源碼了,編譯好了裝到機子開發板上就可以了。

6. android apk 怎麼執行adb shell命令

android中執行shell命令有兩種方式: 1.直接在代碼中用java提供的Runtime 這個類來執行命令,以下為完整示例代碼。 public void execCommand(String command) throws IOException { // start the ls command running //String[] args = new String[]{"sh", "-c", command}; Runtime runtime = Runtime.getRuntime(); Process proc = runtime.exec(command); //這句話就是shell與高級語言間的調用 //如果有參數的話可以用另外一個被重載的exec方法 //實際上這樣執行時啟動了一個子進程,它沒有父進程的控制台 //也就看不到輸出,所以需要用輸出流來得到shell執行後的輸出 InputStream inputstream = proc.getInputStream(); InputStreamReader inputstreamreader = new InputStreamReader(inputstream); BufferedReader bufferedreader = new BufferedReader(inputstreamreader); // read the ls output String line = ""; StringBuilder sb = new StringBuilder(line); while ((line = bufferedreader.readLine()) != null) { //System.out.println(line); sb.append(line); sb.append('\n'); } //tv.setText(sb.toString()); //使用exec執行不會等執行成功以後才返回,它會立即返回 //所以在某些情況下是很要命的(比如復制文件的時候) //使用wairFor()可以等待命令執行完成以後才返回 try { if (proc.waitFor() != 0) { System.err.println("exit value = " + proc.exitValue()); } } catch (InterruptedException e) { System.err.println(e); } } } 2.直接安裝shell模擬器,即已經開發好的android應用,啟動後類似windows的dos命令行,可以直接安裝使用,可執行常用的linux命令,應用在附件。 shell.apk大小:455.51K所需財富值:5 已經過網路安全檢測,放心下載 點擊下載下載量:1

7. android的shell有啥用

android 底層驅動實際linux, linux中大量使用了shell。那 shell到底是什麼東西呢?個人理解相當於windows中的

cmd,但是shell很強大,如果你能熟練使用shell,在android開發中如虎添翼。

下面就android常用的shell進行一下說明:

1. cd (change directory)

如: cd / 跳轉到根目錄 cd ~ 跳轉到用戶所在的目錄

2. ls (list)

顯示目錄結構

3. chmod 777 path

在開發過程中,如果發現文件不能讀寫,首先應該想到是否給user許可權,可以通過該命令試試看

改變目錄屬性,如果目錄下面還有子目錄,加上-R

4. chown 該變目錄所有者

如果目錄還有子目錄,加上-R

5. rm 目錄

如果是文件加上-f

如果是目錄加上-r

6. find

找文件,如果找到R.java文件,然後刪除它

find . -name R.java|args rm -rf

find . -name *.svn|xargs rm -rf
find . -name *.class|xargs rm -rf

7. 替換,如某個文件中根據某個模式替換某行

如下命令就是找到FPTitlebar.java這個java文件,找不到// pm.shutDown();,用pm.shutDown();替換之。

find . -name FPTitlebar.java -exec sed -i 's\// pm.shutDown();\ pm.shutDown();\' {} \;

比較難的如下所示:

find . -name *.java -exec sed -i 's\KeyEvent.KEYCODE_2\KeyEvent.KEYCODE_CAMERA \g ' {} \;
find . -name *.java -exec sed -i 's\KeyEvent.KEYCODE_1\KeyEvent.KEYCODE_CALL \g ' {} \;

找到所有的java文件,用KeyEvent.KEYCODE_CAMERA替換KeyEvent.KEYCODE_2

8. 編譯android源碼時實際也是執行shell命令:

//執行build 目錄下envsetup.sh命令

. build/envsetup.sh

//彈出選擇框,分別選擇第一個,第一個,第五個,第三個

choosecombo 1 1 5 3

//設置環境變數

export ANDROID_JAVA_HOME=$JAVA_HOME

//執行update命令

make update-api

//起4 個線程同時編譯

make -j 4

9. 如果你使用了第三so包,需要在android編譯,直接在mk文件中添加如下設置即可:

如下所示:

1. 聲明library名稱

###############################
LOCAL_STATIC_JAVA_LIBRARIES := xstream
###############################

2. 加入引入的庫文件

###############################
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := xstream:xstream-1.3.1.jar
include $(BUILD_MULTI_PREBUILT)
###############################

8. 如何讓Android系統或Android應用執行shell腳本 第2頁

android系統執行shell腳本,需要首先確認用戶具有修改shell的許可權,使用 process來執行指令,如下代碼:
public void execShell(String cmd){
try{
//許可權設置
Process p = Runtime.getRuntime().exec("su"); //開始執行shell腳本
//獲取輸出流
OutputStream outputStream = p.getOutputStream();
DataOutputStream dataOutputStream=new DataOutputStream(outputStream);
//將命令寫入
dataOutputStream.writeBytes(cmd);
//提交命令
dataOutputStream.flush();
//關閉流操作
dataOutputStream.close();
outputStream.close();
}
catch(Throwable t)
{
t.printStackTrace();
}
}

熱點內容
stl源碼剖析中文 發布:2025-01-21 06:14:17 瀏覽:344
我的世界手機版為什麼連不上伺服器 發布:2025-01-21 06:14:17 瀏覽:453
壓縮機的性能參數 發布:2025-01-21 06:10:34 瀏覽:607
2014年預演算法修訂歷時20年 發布:2025-01-21 06:05:46 瀏覽:191
linux切換到root用戶 發布:2025-01-21 06:05:38 瀏覽:516
php存在文件 發布:2025-01-21 06:04:51 瀏覽:171
故鄉的密碼標題運用了什麼手法 發布:2025-01-21 06:00:20 瀏覽:724
java新浪微博 發布:2025-01-21 06:00:07 瀏覽:887
php防止注入 發布:2025-01-21 06:00:04 瀏覽:815
華為honor6a如何重置密碼 發布:2025-01-21 05:37:30 瀏覽:987