不能,雖然兩者都是基于同一內(nèi)核開發(fā)的產(chǎn)品,但是兩者經(jīng)過了后期開發(fā),兩者為了達到一些應用都做了優(yōu)化、改動,所以在linux 上能做的事情,在安卓那里就不能做,不是說一定不能,這個是可以通過一些小的應用來實現(xiàn)一些的(個人見解)
目前累計服務客戶近1000家,積累了豐富的產(chǎn)品開發(fā)及服務經(jīng)驗。以網(wǎng)站設計水平和技術實力,樹立企業(yè)形象,為客戶提供成都網(wǎng)站設計、成都網(wǎng)站制作、網(wǎng)站策劃、網(wǎng)頁設計、網(wǎng)絡營銷、VI設計、網(wǎng)站改版、漏洞修補等服務。創(chuàng)新互聯(lián)始終以務實、誠信為根本,不斷創(chuàng)新和提高建站品質(zhì),通過對領先技術的掌握、對創(chuàng)意設計的研究、對客戶形象的視覺傳遞、對應用系統(tǒng)的結(jié)合,為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,攜手廣大客戶,共同發(fā)展進步。
Android的底層是Linux內(nèi)核,因此在shell環(huán)境下可以運行Linux命令,尤其是經(jīng)過root處理的android系統(tǒng),基本上可以通過調(diào)用Linux命令完全控制手機,下面的RootCmd.java代碼可以實現(xiàn)運行Linux外部命令。
package?my.android.code;
import?android.os.Environment;
import?dalvik.annotation.Signature;
import?java.io.BufferedReader;
import?java.io.DataInputStream;
import?java.io.DataOutputStream;
import?java.io.File;
import?java.io.FileReader;
import?java.io.InputStream;
import?java.io.OutputStream;
import?java.util.Vector;
public?final?class?RootCmd
{
//執(zhí)行l(wèi)inux命令并且輸出結(jié)果
protected?static?Vector?execRootCmd(String?paramString)
{
Vector?localVector?=?new?Vector();
try
{
Process?localProcess?=?Runtime.getRuntime().exec("su?");//經(jīng)過Root處理的android系統(tǒng)即有su命令
OutputStream?localOutputStream?=?localProcess.getOutputStream();
DataOutputStream?localDataOutputStream?=?new?DataOutputStream(localOutputStream);
InputStream?localInputStream?=?localProcess.getInputStream();
DataInputStream?localDataInputStream?=?new?DataInputStream(localInputStream);
String?str1?=?String.valueOf(paramString);
String?str2?=?str1?+?"\n";
localDataOutputStream.writeBytes(str2);
localDataOutputStream.flush();
String?str3?=?localDataInputStream.readLine();
localVector.add(str3);
localDataOutputStream.writeBytes("exit\n");
localDataOutputStream.flush();
localProcess.waitFor();
return?localVector;
}
catch?(Exception?localException)
{
localException.printStackTrace();
}
}
//執(zhí)行l(wèi)inux命令但不關注結(jié)果輸出
protected?static?int?execRootCmdSilent(String?paramString)
{
try
{
Process?localProcess?=?Runtime.getRuntime().exec("su");
Object?localObject?=?localProcess.getOutputStream();
DataOutputStream?localDataOutputStream?=?new?DataOutputStream((OutputStream)localObject);
String?str?=?String.valueOf(paramString);
localObject?=?str?+?"\n";
localDataOutputStream.writeBytes((String)localObject);
localDataOutputStream.flush();
localDataOutputStream.writeBytes("exit\n");
localDataOutputStream.flush();
localProcess.waitFor();
localObject?=?localProcess.exitValue();
return?localObject;
}
catch?(Exception?localException)
{
localException.printStackTrace();
}
}
//判斷機器Android是否已經(jīng)root,即是否獲取root權(quán)限
protected?static?boolean?haveRoot()
{
int?i?=?execRootCmdSilent("echo?test");?//通過執(zhí)行測試命令來檢測
if?(i?!=?-1)??return?true;
retrun?false;
}
}
Android繼承了Linux權(quán)限嚴格的優(yōu)點,很多命令需要root權(quán)限才能執(zhí)行,比如說查看系統(tǒng)目錄文件等,如果我們的程序需要用到查看此類文件或執(zhí)行系統(tǒng)命令,就必須先獲取Root權(quán)限。網(wǎng)上看了很多版本的檢測是否有Root權(quán)限的方法,結(jié)果不論是否有權(quán)限,都返回true,根本就沒有用,下面的方法經(jīng)真機檢測確定可行。
上代碼:
package com.pocketdigi;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import android.app.Activity;
import android.os.Bundle;
public class RootActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
DataInputStream stream;
if(isRooted()){
try {
stream = Terminal("ping -c 2 ");
//其實ping并不需要root權(quán)限 ,這里是ping 2次后才停止,所以啟動后需要一點時間才會有顯示
//你可以自己換成需要root權(quán)限的命令試試
String temp;
while((temp=stream.readLine())!=null){
System.out.println(temp);
//循環(huán)輸出返回值
}
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
public DataInputStream Terminal(String command) throws Exception
{
Process process = Runtime.getRuntime().exec("su");
//執(zhí)行到這,Superuser會跳出來,選擇是否允許獲取最高權(quán)限
OutputStream outstream = process.getOutputStream();
DataOutputStream DOPS = new DataOutputStream(outstream);
InputStream instream = process.getInputStream();
DataInputStream DIPS = new DataInputStream(instream);
String temp = command + "\n";
//加回車
DOPS.writeBytes(temp);
//執(zhí)行
DOPS.flush();
//刷新,確保都發(fā)送到outputstream
DOPS.writeBytes("exit\n");
//退出
DOPS.flush();
process.waitFor();
return DIPS;
}
public boolean isRooted() {
//檢測是否ROOT過
DataInputStream stream;
boolean flag=false;
try {
stream = Terminal("ls /data/");
//目錄哪都行,不一定要需要ROOT權(quán)限的
if(stream.readLine()!=null)flag=true;
//根據(jù)是否有返回來判斷是否有root權(quán)限
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return flag;
}
}