Performance 如何在Android应用程序中编写adb命令?
我想知道如何在代码中执行adb命令。例如,我想在adb shell中推送一个文件,我写了以下内容:Performance 如何在Android应用程序中编写adb命令?,performance,android-activity,adb,android,Performance,Android Activity,Adb,Android,我想知道如何在代码中执行adb命令。例如,我想在adb shell中推送一个文件,我写了以下内容: package org.example.adbshell; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import android.support.v7.app.ActionBarActivity; import android.support.v7.a
package org.example.adbshell;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Process process;
try {
process = Runtime.getRuntime().exec("adb push C:/Users/Savio/Desktop/savio.xml /storage/sdcard0/");
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment())
.commit();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
return rootView;
}
}
}
我应该能够在/storage/sdcard0文件夹中看到savio.xml。但由于某种原因,我无法查看该文件。我猜这个命令没有被执行。我做错了什么?有三种类型的命令
mv/edit/cp/cd
等Process process Runtime.getRuntime().exec("your command");
//or
Process process Runtime.getRuntime().exec("/path/your_command");
我的工作是复制文件:
Process process Runtime.getRuntime().exec("/system/bin/mv my_file_path");
您可以借助于process
object读取输出数据
// Use buffer reader for the same.
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
Android端没有ADB命令。ADB只是Android SDK的一部分,始终在计算机上运行,而不是在Android上运行 另外,Android对C:/Users/Savio/Desktop/Savio.xml一无所知,因为它不是文件系统中的文件 您应该使用HTTP(或类似)服务器实现桌面应用程序,并使用它从Android下载和上传文件到PC。您可以从轻量级HTTP实现NanoHTTP开始
或者,您可以使用服务器在Android和计算机之间进行通信,并根据Android的请求在该计算机上运行ADB命令 这是行不通的。ADB在Android上不是一个有效的命令。@Václav Hodek是的,你是对的,但他们仍然在手机上以某种特权执行某些命令,比如拥有root权限。我只是指出,对于给定的问题,这不是正确的解决方案,因为作者特别要求ADB,他想使用它复制文件。所以在Android上运行命令根本不是一个解决方案。你的代码仍然不会从连接的计算机上复制文件。ADB不是关于本地操作,而是关于Android和PC之间的通信。这是系统命令无法解决的任务。我确信它会复制文件,我已经测试过了。我已经通过这段代码复制了我的应用程序日志文件。是的,您可以从一个设备运行adb命令到另一个设备。我好像以前做过,但我不知道他们是怎么做的。我认为他们设法在根设备上安装了adb外壳。在根设备上运行adb命令是可能的,但它仍然不能解决问题,而且对主题作者没有帮助,因为它无法用于从计算机传输文件。