android執行shell
A. 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
B. 如何在android程序中執行adb shell命令
android程序執行adbshell命令(實例源碼)packagenet.gimite.nativeexe;importjava.io.BufferedReader;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.net.HttpURLConnection;importjava.net.MalformedURLException;importjava.net.URL;importnet.gimite.nativeexe.R;importandroid.app.Activity;importandroid.os.Bundle;importandroid.os.Handler;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.*;{privateTextViewoutputView;privateButtonlocalRunButton;privateEditTextlocalPathEdit;privateHandlerhandler=newHandler();privateEditTexturlEdit;privateButtonremoteRunButton;/**.*/@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);outputView=(TextView)findViewById(R.id.outputView);localPathEdit=(EditText)findViewById(R.id.localPathEdit);localRunButton=(Button)findViewById(R.id.localRunButton);localRunButton.setOnClickListener(onLocalRunButtonClick);}=newOnClickListener(){publicvoidonClick(Viewv){Stringoutput=exec(localPathEdit.getText().toString());output(output);//try{//////Processprocess=Runtime.getRuntime().exec(localPathEdit.getText().toString());////}catch(IOExceptione){////TODOAuto-generatedcatchblock//e.printStackTrace();//}}};//ExecutesUNIXcommand.privateStringexec(Stringcommand){try{Processprocess=Runtime.getRuntime().exec(command);BufferedReaderreader=newBufferedReader(newInputStreamReader(process.getInputStream()));intread;char[]buffer=newchar[4096];StringBufferoutput=newStringBuffer();while((read=reader.read(buffer))>0){output.append(buffer,0,read);}reader.close();process.waitFor();returnoutput.toString();}catch(IOExceptione){thrownewRuntimeException(e);}catch(InterruptedExceptione){thrownewRuntimeException(e);}}privatevoiddownload(StringurlStr,StringlocalPath){try{URLurl=newURL(urlStr);HttpURLConnectionurlconn=(HttpURLConnection)url.openConnection();urlconn.setRequestMethod("GET");urlconn.setInstanceFollowRedirects(true);urlconn.connect();InputStreamin=urlconn.getInputStream();FileOutputStreamout=newFileOutputStream(localPath);intread;byte[]buffer=newbyte[4096];while((read=in.read(buffer))>0){out.write(buffer,0,read);}out.close();in.close();urlconn.disconnect();}catch(MalformedURLExceptione){thrownewRuntimeException(e);}catch(IOExceptione){thrownewRuntimeException(e);}}privatevoidoutput(finalStringstr){Runnableproc=newRunnable(){publicvoidrun(){outputView.setText(str);}};handler.post(proc);}}
C. android執行shell腳本打開藍牙
網路的問題。shell腳本打開藍牙多數是網路連接異常導致。
1、首先打開電腦檢查網路。
2、其次打開android程序進行測試網路連接是否異常。
3、最後重新連接網路後重新登錄該程序即可。
D. 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)
###############################
E. 如何讓Android系統或Android應用執行shell腳本
android系統執行shell腳本,需要首先確認用戶具有修改shell的許可權,使用 process來執行指令,如下代碼:
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();
}
}