Performance 如何在Android应用程序中编写adb命令?

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

我想知道如何在代码中执行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.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命令是可能的,但它仍然不能解决问题,而且对主题作者没有帮助,因为它无法用于从计算机传输文件。