精华内容
下载资源
问答
  • Linux命令大全android

    2011-12-09 18:52:35
    Linux命令大全 androidLinux apk
  • Android手机上执行Linux命令,文档介绍通过相关工具使android手机可以执行linux命令行。
  • 安卓程序中调用 linux 命令

    千次阅读 2016-03-26 18:21:13
    安卓程序中调用 linux 命令

    博客: 安卓之家
    微博: 追风917
    CSDN: 蒋朋的家
    简书: 追风917

    景色无边

    在研究串口 jni 开发的时候,遇到了这样一段代码:

        Process su;
        su = Runtime.getRuntime().exec("/system/bin/su");
        String cmd = "chmod 666 " + device.getAbsolutePath() + "\n"
                + "exit\n";
        su.getOutputStream().write(cmd.getBytes());

    这段代码相当于执行了三个 linux 命令:

    $ /system/bin/su    //获取超级权限
    # chmod 666 文件名  //改变文件属性
    # exit              //退出超级权限

    由此开启了安卓程序中调用 linux 命令的序幕。

    调用方法


    1. 在 JDK 1.5 之前使用 Runtime 的 exec 方法执行 linux 命令

    2. 在 JDK 1.5 之后,可以使用 ProcessBuilder 的 start 方法执行 linux 命令

    两者都被用来创建一个操作系统进程(执行命令行操作),并返回 Process 类的一个实例,该实例是子进程,并且没有自己的终端或控制台,因此该子进程的标准IO(如stdin,stdou,stderr)都通过 Process.getOutputStream(),Process.getInputStream(), Process.getErrorStream() 方法重定向给它的父进程了。ProcessBuilder 提供的功能更加丰富,能够设置设置工作目录、环境变量等

    1 Runtime

    该类的使用,开头已经涉及了,那是单个命令的执行操作,如果命令带参数或者有组合命令,还是这么操作吗?

    现在有这个需求:切换到 /dev 目录并查看设备详情

    这个组合在 linux 命令行可以这么写:

    $ cd /dev && ls -l

    直接用上面的操作:

    $ Process p = Runtime.getRuntime().exec("cd /dev && ls -l");

    事实证明这样是不可行的。

    那么该如何操作呢,我们可以看到 exec 方法有好几个重载方法,可以用 String 数组来完成一系列操作:

        String cmd = "cd /dev && ls -l";
        Process p = Runtime.getRuntime().exec(new String[] {"/bin/sh", "-c", cmd});

    这样就可以了。

    2 ProcessBuilder

        ProcessBuilder pb = new ProcessBuilder("ls", "-l");  
        pb.directory(new File("/dev"));  //切换到工作目录 /dev
        Map<String, String> map = pb.environment();  // 得到进程生成器的环境 变量,这个变量可以自己修改
        Process p = pb.start(); 

    github 上找到了个安卓应用,可以执行 linux 命令行:Android-Terminal-Emulator

    长这样:

    Android-Terminal-Emulator

    好了,今天就到这里了。

    分享是一种美德,更是一种生活方式!!

    也许你会说我是一个梦想者,但我不是唯一的一个。

    悦分享,越快乐^_^

    欢迎交流,转载请注明出处,谢谢!

    展开全文
  • 在做Android开发板相关的开发需求的时候,我们有的时候需要去到Android系统的一个linux终端(adbshell)里面来执行一些命令,以便于查看部分文件内容或者修改部分文件权限等需求,通常我们可以使用Android studio...

    2020年6月2日17:37:27更新:

    这篇博文还是有挺多人看的,但之前写的方法其实比较早还是有点问题的,后面我又优化了下工具类。
    后来我无意间看到一个之前看到非Root运行Adb的技巧,算是黑科技吧,亲测可用,放到了另一篇博文。转发的,大家可以研究研究。
    非root直接在手机端运行adb命令:地址:https://miqt.github.io/2020/06/02/高级权限命令,例如修改手机设置等(转)/


    在做Android开发板相关的开发需求的时候,我们有的时候需要去到Android系统的一个linux终端(adbshell)里面来执行一些命令,以便于查看部分文件内容或者修改部分文件权限等需求,通常我们可以使用Android studio自带的terminal工具运行先adb shell 命令来进行

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SK34yrQy-1592041774421)(\blogimgs\terminal.png)]

    这样不好的就是我们可能有的操作就要每次设备重启的时候都要手动的敲一遍这样的代码,十分麻烦。那么怎么才能让app启动的时候自己来运行这些命令呢?
    一番查资料,终于找到了,主要是使用到了_java.lang.Process_这个类,通过使用Runtime.getRuntime().exec(“su”);这个方法,我们就能获得Process的一个实例,通过这个Process的实例,我们就可以获取命令终端的输入输出流来提交命令和获取命令执行结果啦。

    RootCmd工具类

    注意:

    Runtime.getRuntime().exec("su");
    

    这行代码只能在已经root的设备上才能运行,没有root的设备运行会抛出异常。

    下面来看它的具体实现代码吧,我把它封装成了一个工具类:

    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import android.util.Log;
    
    /**
     * Android运行linux命令
     */
    public final class RootCmd {
        private static final String TAG = "RootCmd";
        private static boolean mHaveRoot = false;
        /**
         *   判断机器Android是否已经root,即是否获取root权限
         */
        public static boolean haveRoot() {
            if (!mHaveRoot) {
                int ret = execRootCmdSilent("echo test"); // 通过执行测试命令来检测
                if (ret != -1) {
                    Log.i(TAG, "have root!");
                    mHaveRoot = true;
                } else {
                    Log.i(TAG, "not root!");
                }
            } else {
                Log.i(TAG, "mHaveRoot = true, have root!");
            }
            return mHaveRoot;
        }
    
        /**
    		 * 执行命令并且输出结果
    		 */
        public static String execRootCmd(String cmd) {
            String result = "";
            DataOutputStream dos = null;
            DataInputStream dis = null;
    
            try {
                Process p = Runtime.getRuntime().exec("su");// 经过Root处理的android系统即有su命令
                dos = new DataOutputStream(p.getOutputStream());
                dis = new DataInputStream(p.getInputStream());
    
                Log.i(TAG, cmd);
                dos.writeBytes(cmd + "\n");
                dos.flush();
                dos.writeBytes("exit\n");
                dos.flush();
                String line = null;
                while ((line = dis.readLine()) != null) {
                    Log.d("result", line);
                    result += line;
                }
                p.waitFor();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (dos != null) {
                    try {
                        dos.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (dis != null) {
                    try {
                        dis.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return result;
        }
    
        /**
    		 * 执行命令但不关注结果输出
    		 */
        public static int execRootCmdSilent(String cmd) {
            int result = -1;
            DataOutputStream dos = null;
    
            try {
                Process p = Runtime.getRuntime().exec("su");
                dos = new DataOutputStream(p.getOutputStream());
    
                Log.i(TAG, cmd);
                dos.writeBytes(cmd + "\n");
                dos.flush();
                dos.writeBytes("exit\n");
                dos.flush();
                p.waitFor();
                result = p.exitValue();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (dos != null) {
                    try {
                        dos.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return result;
        }
    }
    

    使用

    在app启动的onCreate()方法中,来执行linux命令,注意命令的结尾要加\n才表示执行。

    class App : Application() {
    
        override fun onCreate() {
            super.onCreate()
    				//修改/dev/bus/usb/文件夹的权限,注意添加\n
            val commend = "chmod 777 /dev/bus/usb/ -R \n"
            val result = RootCmd.execRootCmd(commend)
        }
    }  
    

    结束

    亲测以上内容linux的大部分的命令都可以执行,但有一部分命令却执行不了,例如给一块硬盘分区:

    运行
    127|rk3399_firefly_box:/ # fdisk /dev/sda
    输出
    sh: fdisk: not found
    

    不知道这是为什么,使用android studio terminal工具也是同样的结果。有知道的也请麻烦解答。

    本文出自:http://imaster.top
    转载请注明出处

    展开全文
  • android下的linux命令

    千次阅读 2019-05-24 17:04:09
    Android本来就是一个linux操作系统,所以大部分都是linux命令,如mkdir,ls,netstat,mount,ps 等,这里就不具体介绍了, 主要介绍几个Android特有的。 getprop 返回Android的所有系统属性。 getevent 打印所有的...

    Android本来就是一个linux操作系统,所以大部分都是linux的命令,如mkdir,ls,netstat,mount,ps 等,这里就不具体介绍了,
    主要介绍几个Android特有的。
    getprop 返回Android的所有系统属性。
    getevent 打印所有的键盘和触摸事件
    logcat 输出日志
    printenv 系统环境变量
    am 运行start/broadcast/instrument(instrument可以运行自动化测试代码,其它的还没有试过)

    Android模拟器启动命令模式

    在android-sdk-windows-1.1\tools执行emulator以执行模拟器
    加上-skin参数,指定显示模式HVGA-L,即可改为横向
    emulator - skin HVGA-L (480320,水平显示)
    emulator - skin HVGA-L (320
    480,垂直显示,模拟器预设模式)
    emulator - skin HVGA-L (320240,水平显示)
    emulator - skin HVGA-L (240
    320,垂直显示)

    使用mksdcard指令模拟1GB的记忆卡

    mksdcard 1024M sacard.img

    模拟插入sd卡的模拟器

    emulator - sdcard sdcard.img

    使用 adb+push 上传文件SD记忆卡

    adb push 001.jpg /sdcard (复制文件到/sdcard目录下)
    adb push pictures /sdcard
    adb push mp3 /sdcard
    adb shell (Android 模拟器启动命令模式)
    #cd /sdcard (进入 /sdcard 目录)
    #ls (查看 SD 记忆卡中的档案)

    使用 adb+pull 从sdcard卡下载文件

    adb pull /sdcard/001.jpg . (下载 /sdcard 目录下的档案)
    adb pull /sdcard/pictures . (下载 sdcard 目录下的 pictures 目录)

    删除 SD 卡里面的档案

    adb shell
    #cd /sdcard
    #rm 001.jpg (删除 SD 记忆卡里的档案)
    #rm -r * (删除 SD 记忆卡里所有档案与目录)

    Android仿真器影片播放方法

    mksdcard 4096M video.img (制作一个图像文件的 SD 记忆卡)
    adb push video.avi /sdcard (从计算机复制图像文件到 SD 卡中)
    emulator -sdcard video.img (启动模拟器并载入SD卡)
    adb install iiivpa.apk (安装Meridian Video Player)
    接下来就可以用装上去的player播放.mp4、3gp与.wmv三种文件格式

    安装 APK 应用程序

    adb install filename.apk (安装filename.apk)
    adb install -r filename.apk (保留已设定数据,重新安装filename.apk)
    adb -s emulator-5554 install filename.apk (指定安装 APK 套件在 5554 的 Android 仿真器中)

    移除 APK 应用程序

    adb uninstall package
    adb uninstall -k package (移除程序时,保留数据)
    此package名称不是安装APK套装时的文件名或显示在仿真器中的应用程序名称
    可以先到/data/data或data/app目录下,查询想移除的package名称
    adb shell
    ls /data/data 或 /data/app (查询package名称)
    exit
    adb uninstall package (移除查询到的 Package)
    $adb devices (显示目前有多少个仿真器正在执行)
    $adb -s (指定模拟器来操作操作)
    adb -s emulator-5554 install email.apk
    $adb install apkfile (安装 APK 应用程序)
    adb install email.apk
    $adb uninstall package (移除 APK 应用程序)
    adb uninstall com.android.email
    $adb shell (进入android shell命令模式)
    $ls
    $dmesg (查看 Android Linux Kernel 运行信息)
    ls - 显示文件目录
    cd - 进入目录
    rm - 删除文件
    mv - 移动文件
    mkdir - 产生目录
    rmdir - 删除目录
    $adb push <file/dir> (复制文件到 SD 卡)
    adb push mp3 /sdcard
    $adb pull <file/dir> . (从Android 系统下载文件)
    adb pull /data/app/com.android.email
    $adb logcat (监控模拟器运作记录,以Ctrl + c离开监控模式)
    $adb bugreport (产生adb出错报告)
    $adb get-state (获得adb模拟器工作状态)
    $adb start-server (启动adb服务器)
    $adb kill-server (关掉adb服务器)
    $adb forward tcp:6100 tcp:7100 (更改模拟器通讯网路)
    $adb shell ps -x (显示android模拟器上所有在执行的进程)
    $adb version (显示 adb 版本)
    $adb help (显示 adb 指令参数)
    5、搜索模拟器/设备的实例:
    取得当前运行的模拟器/设备的实例的列表及每个实例的状态:
    adb devices
    6、查看bug报告:
    adb bugreport
    7、记录无线通讯日志:
    一般来说,无线通讯的日志非常多,在运行时没必要去记录,但我们还是可以通过命令,设置记录:
    adb shell
    logcat -b radio
    8、获取设备的ID和序列号:
    adb get-product
    adb get-serialno
    9、访问数据库SQLite3
    adb shell
    sqlite3

    Emulator 命令行启动参数

    emulator -timezone Asia/Taipei (指定时区)
    emulator -no-boo-anim (省略开机小机器人启动画面)
    emulator -scale auto (调整模拟器视窗大小)
    emulator - scale factor (factor: 0.1-3.0)
    emulator -dpi-device 300 (更改仿真器的分辨率,default为 165dpi)
    emulator -skin (更改模拟器显示模式)
    emulator -help-keys (显示键盘快速说明)
    emulator -shell (相当于adb shell 功能)
    emulator -data data.img (使 /data 目录使用 data.img 的文件空间)
    emulator -sdcard sdcard.img (使 /sdcard 目录使用 sdcard.img 的文档空间)
    emulator -cache cache.img (浏览器暂存空间)
    emulator -wipe-data (使模拟器恢复到原始设置)
    emulator -help (显示 emulator 指令参数)
    Using SQLite from Shell in Android
    命令模式下
    #ls 查看即可

    展开全文
  • Android下执行linux命令

    千次阅读 2016-09-11 18:48:47
    Android su 命令

    最近在开发过程中 使用了几个命令来对   手机的文件的权限进行修改;现在记录一下:

    用到的方法:

    1:判断是否有Root权限;

     /**
         * 判断当前手机是否有ROOT权限
         * @return
         */
        public static boolean isRoot(){
            boolean bool = false;


            try{
                if ((!new File("/system/bin/su").exists()) && (!new File("/system/xbin/su").exists())){
                    bool = false;
                } else {
                    bool = true;
                }
                Log.e("判断手机是否root:", "bool = " + bool);
            } catch (Exception e) {


            }
            return bool;
        }

    2:对手机进行重启(建议是6.0系统一下使用)

        /**
         * LS:手机重启命令
         */
    //    Save save;
        public static  void  ResetPhone(Context context){
            save = new Save(context);
            String cmd = "su -c reboot";
            try {
                Runtime.getRuntime().exec(cmd);
     
            } catch (IOException e) {
                // TODO Auto-generated catch block


                new AlertDialog.Builder(context).setTitle("Error").setMessage(
                        e.getMessage()).setPositiveButton("OK", null).show();
            }
        }


    3:手机关机命令

      /**
         * LS:手机关机
         */
        public  static void ClosePhone(){
            //LS:关机命令
    // Log.v(TAG, "system service->reboot");
    //         SystemProperties.set("ctl.start", "system_reboot");
    //         System.set("ctl.start", "system_reboot");


    //        Log.e("---1111","-----11111111111");
            String[] commands = new String[] { "su","-c","reboot -p"};
            Process process = null;
            DataOutputStream dataOutputStream = null;
            try {
                process = Runtime.getRuntime().exec("su");
    //            Log.e("---22222222","-----22222222222222222222");
                dataOutputStream = new DataOutputStream(process.getOutputStream());
                int length = commands.length;
                for (int i = 0; i < length; i++) {
                    dataOutputStream.writeBytes(commands[i] + "\n");
                }
    //            Log.e("---3333333333","-----333333333333333333");
                dataOutputStream.writeBytes("exit\n");
                dataOutputStream.flush();
                process.waitFor();
    //            Log.e("---4444444444444","-----4444444444444444");
            } catch (Exception e) {
            } finally {
                try {
                    if (dataOutputStream != null) {
                        dataOutputStream.close();
                    }
    //                Log.e("---5555555","-----55555555555555555");
                    process.destroy();


                } catch (Exception e) {
                }
            }


        }


    4:在开发VPN用到的要对安装虚拟网卡的文件权限进行修改;

    命令:     String[] commands = new String[] { "mount -o remount,rw /system",
                    "/system/bin/sh", "-c", "chmod -R 777 /etc/ppp/ip-up-vpn",
                    "mount -o remount,ro /system" };

    代码:

     /**
         * LS:获取虚拟网卡权限
         */
        public static  void GetVpnPerssion(Context context) {
            String[] commands = new String[] { "mount -o remount,rw /system",
                    "/system/bin/sh", "-c", "chmod -R 777 /etc/ppp/ip-up-vpn",
                    "mount -o remount,ro /system" };
            Process process = null;
            DataOutputStream dataOutputStream = null;
            try {
                process = Runtime.getRuntime().exec("su");
                dataOutputStream = new DataOutputStream(process.getOutputStream());
                int length = commands.length;
                for (int i = 0; i < length; i++) {
                    dataOutputStream.writeBytes(commands[i] + "\n");
                }
                dataOutputStream.writeBytes("exit\n");
                dataOutputStream.flush();
                process.waitFor();
            } catch (Exception e) {
            } finally {
                try {
                    if (dataOutputStream != null) {
                        dataOutputStream.close();
                    }
                    process.destroy();




                } catch (Exception e) {
                }
            }
        }


    总结: 对于在代码中执行命令 ;一般要用到这段代码;里面放命令就可以了; 比着直接在Thread中执行:Runtime效果要好很多;并且兼容性更强!

    通用代码:

      public static  void Commands(Context context) {
            String[] commands = new String[] { "这个地方填入要执行的命令即可!!!!!!" };
            Process process = null;
            DataOutputStream dataOutputStream = null;
            try {
                process = Runtime.getRuntime().exec("su");
                dataOutputStream = new DataOutputStream(process.getOutputStream());
                int length = commands.length;
                for (int i = 0; i < length; i++) {
                    dataOutputStream.writeBytes(commands[i] + "\n");
                }
                dataOutputStream.writeBytes("exit\n");
                dataOutputStream.flush();
                process.waitFor();
            } catch (Exception e) {
            } finally {
                try {
                    if (dataOutputStream != null) {
                        dataOutputStream.close();
                    }
                    process.destroy();

                } catch (Exception e) {
                }
            }
        }


    展开全文
  • Android手机底层是基于Linux的,通过cmd 运行 adb shell 命令可以远程登录...在日常开发中我有碰到需要用linux命令来控制led灯,但是给客户用时不可能让用户通过命令来控制led灯,于是只能通过代码写入app中控制。...
  • Android中使用vi等linux命令

    千次阅读 2021-03-24 09:11:58
    Android中使用vi等linux命令 日常在开发Android应用的时候, 有时候需要到设备中去修改一些配置文件, 比如权限白名单,sp的的xml什么的,由于Android本身又没有vim/vi等直接编辑软件,所以通常的做法是 先用adb pull...
  • android执行Linux命令

    2014-01-09 11:02:22
    android执行Linux命令   分类:  Android开发2012-06-12 23:002082人阅读评论(4)收藏举报 linuxandroidstring测试 Process localProcess = Runtime.getRuntime().exec("su"); 这条代码获得root权限 ...
  • Android系统查看使用支持的Linux命令 [基础知识,大佬请略过ヽ(  ̄д ̄;)ノ] 大家都知道安卓手机的多种多样,各领风骚,安卓上的Linux也存在着差异。 查看你手机支持的Linux命令 路径:/system/bin/ 知道了安卓上的...
  • android Linux cat 命令

    千次阅读 2017-11-23 20:48:25
    linux命令:cat  使用权限:所有用户(即root帐号和所有普通帐号) 使用方法:cat [参数] 文件名 说明: cat 是一个文本文件查看和连接工具。查看一个文件的内容,用cat比较简单,就是cat 后面直接接文件名...
  • 使用安装封装 runtime echo(new String[]{“echo 1 > /sys/bus/text”}); //调用方式 private void echo(String[] command) { DualExecutor.getExecutorService().execute(() -> { try { ...
  • Android设备执行Linux命令语句

    千次阅读 2017-10-18 10:17:23
    用于Android设备执行Linux命令语句,更改root权限等 import java.io.*; public static boolean RootCommand(String command){ Process process = null; DataOutputStream os = null; try{ process = Runtime....
  • Android的底层实际是Linux内核,当然在shell环境下可以运行Linux命令,尤其是经过root处理的android系统,基本上可以通过调用Linux命令完全控制手机, 下面的RootCmd.java代码就是实现运行Linux外部命令。 ...
  • android java代码调用linux命令

    千次阅读 2013-01-11 17:04:55
    使用linux命令首先要获得root,执行命令时记得加上 busybox 。一般我们在用java IO的基本方法不能把文件放到usb文件,可以用linux命令来做。 ProcessBuilder pb = new ProcessBuilder("/system/bin/sh"); //...
  • 1、启动emulator(模拟器)  在Dos中输入emulator后回车即可启动emulator,前提是你把android sdk 的tools目录添加到了环境...2、查看android支持的linux 命令  待模拟器启动好之后,在Dos中输入adb shell 回车...
  • Adb连接Android studio自带的模拟器 1.首先要确认自己的模拟器没有问题; 2.使用命令:Adb connect 127.0.0.1:5555连接模拟器,自带的模拟器的端口号是5555。 3.使用adb shell进入命令模式,此时可能会出现如下问题...
  • private void linuxCommand(String command) { try { Runtime runtime = Runtime.getRuntime(); // Process proc = runtime.exec(command); // 有打印信息的api runtime.exec(command); // 不打印,直接执行 } ...
  • Android的底层其实linux,所以可以在android shell下运行linux命令,尤其是经过root处理的Android系统,基本上可以通过调用linux命令完全操作手机,下面的RootCmd.Java代码就是实现运行linux外部命令。   ...
  • Android执行linux外部命令

    千次阅读 2011-11-09 08:49:33
    android的底层实际是Linux内核,当然在shell环境下可以运行linux命令,尤其是经过root处理的android系统,基本上可以通过调用linux命令完全控制手机,下面的RootCmd.java代码就是实现运行linux外部命令。    ...
  • Linux 命令

    千次阅读 2013-09-03 15:38:54
    linux 查看系统信息命令linux初学者必备的基础知识, 这些命令也非常有用, 因为进入linux第一件事就可能是首先查看系统信息, 因此必要的系统的学习一下这些linux系统信息命令还是非常有必要的! 下面给除了各...
  • public static void screenShot(){ try { Process sh = Runtime.getRuntime().exec("sh"); //Process sh = Runtime.getRuntime().exec("su...exec("su")不行的话就exec("sh"),因为这条命令是需要在root进程中使用
  • Linux命令: touch 创建文件 touch framework/base/Android.mk // 创建文件夹 mkdir 创建文件夹cat 显示文件所有内容(合并文件) cat aa文件 bb文件(可以多个) > 合并到的aabb文件 cat framework/base/Android....
  • Android开发中常用到的adb和Linux命令 我自己平时开发的时候积累的一些命令,希望对你有所帮助 adb是什么?: adb的全称为Android Debug Bridge,就是起到调试桥的作用。通过adb我们可以在IDE中调试Android程序...
  • 前提是: 1) ...3) 还要有一些基础常识,比如linux命令,telnet。 这里模拟终端推荐以Better Terminal Emulator Pro,任意app市场里搜索 (1) Android端打开terminal软件,输入以下命令
  • Android下用Exec执行linux命令的源代码

    热门讨论 2012-12-12 17:14:38
    Android下用Exec执行linux命令的源代码,还可以在应用中执行init.rc中服务,具体怎么执行服务的方法请见我博客的另一篇文章,上面有如何让Android应用启用init.rc中定义的服务的方法。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 107,993
精华内容 43,197
关键字:

linux命令安卓

linux 订阅