Android: 通过Runtime.getRuntime().exec调用底层Linux下的程序或脚本

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

Android Runtime使得直接调用底层Linux下的可执行程序或脚本成为可能

比如Linux下写个测试工具,直接编译后apk中通过Runtime来调用

或者写个脚本,apk中直接调用,省去中间层或者JNI

这个至少效率应该比较高吧

 

 

代码:

  1. public class test extends Activity {  
  2.     TextView text;  
  3.       
  4.     /** Called when the activity is first created. */  
  5.     @Override  
  6.     public void onCreate(Bundle savedInstanceState) {  
  7.         super.onCreate(savedInstanceState);  
  8.         setContentView(R.layout.main);  
  9.           
  10.         text = (TextView) findViewById(R.id.text);  
  11.           
  12.         Button btn_ls = (Button) findViewById(R.id.btn_ls);  
  13.         btn_ls.setOnClickListener(new OnClickListener() {  
  14.             public void onClick(View v) {                 
  15.                 do_exec("ls /mnt/sdcard");  
  16.             }             
  17.         });  
  18.         Button btn_cat = (Button) findViewById(R.id.btn_cat);  
  19.         btn_cat.setOnClickListener(new OnClickListener() {  
  20.             public void onClick(View v) {                 
  21.                 do_exec("cat /proc/version");  
  22.             }             
  23.         });          
  24.         Button btn_rm = (Button) findViewById(R.id.btn_rm);  
  25.         btn_rm.setOnClickListener(new OnClickListener() {  
  26.             public void onClick(View v) {                 
  27.                 do_exec("rm /mnt/sdcard/1.jpg");  
  28.             }             
  29.         });      
  30.         Button btn_sh = (Button) findViewById(R.id.btn_sh);  
  31.         btn_sh.setOnClickListener(new OnClickListener() {  
  32.             public void onClick(View v) {                 
  33.                 do_exec("/system/bin/sh /mnt/sdcard/test.sh 123");  
  34.             }             
  35.         });           
  36.     }  
  37.       
  38.     String do_exec(String cmd) {  
  39.         String s = "/n";  
  40.         try {  
  41.             Process p = Runtime.getRuntime().exec(cmd);  
  42.             BufferedReader in = new BufferedReader(  
  43.                                 new InputStreamReader(p.getInputStream()));  
  44.             String line = null;  
  45.             while ((line = in.readLine()) != null) {  
  46.                 s += line + "/n";                 
  47.             }  
  48.         } catch (IOException e) {  
  49.             // TODO Auto-generated catch block  
  50.             e.printStackTrace();  
  51.         }  
  52.         text.setText(s);  
  53.         return cmd;       
  54.     }  
  55. }  

 

test.sh:

echo test.sh
echo $1

 

需要注意:

1. exec不等于console命令

2. exec的输入输出流需要自己处理

3. exec执行时阻塞、非阻塞,返回结果问题

4. 注意权限问题 

 

有个文章讲的比较深入,贴出来研究:

http://blog.csdn.net/zmyde2010/archive/2011/01/12/6130895.aspx

http://kuangbaoxu.javaeye.com/blog/210291

 

 


文件包含漏洞实战:从PHP伪协议到CTFshow通关指南 文件包含漏洞是Web安全领域的经典攻击向量,其核心原理在于应用程序将用户可控的输入作为文件路径加载执行,导致逻辑混淆。攻击者利用此漏洞可读取敏感文件、执行任意代码,甚至获取服务器权限。在PHP环境中,伪协议(Wrapper)成为漏洞利用的关键技术,例如php://filter可用于读取源码,php://input能执行POST数据中的代码,data://协议则允许内联代码执行。这些技术常与日志污染、Session文件包含等手法结合,形成完整的攻击链。CTFshow平台的Web入门题目(78-86、116、1 阅读详情

相关推荐

Android Runtime.getRuntime().exec()

getRuntimeRuntime.getRuntime().exec共有六个重载方法:public Process exec(String command)public Process exec(String [] cmdArray)public Process exec(String command, String [] envp)public Process exec(String [] cmdArray, String [] envp)public Process exec(String comma

xianrenli38的博客 7794

Runtime.getRuntime().exec() 解析

Runtime.getRuntime().exec() 解析

qq_39609284的博客 3572

在apk 中执行Runtime.getRuntime().exec adb shell各种命令远程控制其他Android设备(一)

在手机中可以运行adb命令来远程连接操作其他的Android设备(包括手机、智能电视) 前提,两台设备必须连入同一个局域网络中。 参考方法: public void execShell(String cmd){ try{ //权限设置 Process p = Runtime.getRuntime().exec("sh");

a day a better 1万+

2022-05-27 Android Android getRuntime()exec 执行命令(linux 下的bin文件等)并解得到返回值、执行ping命令

一、形式一:只执行命令不获取返回值。 public static String execute_command(String cmd) { try { //String keyCommand = "setprop " + propName; Runtime runtime = Runtime.getRuntime(); Process proc = runtime.exec(cmd); }..

海月汐辰 3572

Runtime.getRuntime().exec执行命令的问题

Runtime.getRuntime().exec执行命令的问题 平常写android代码时,经常使用Runtime.getRuntime().exec来执行一段linux命令, 如果是一些简单的命令可以直接使用: Runtime.getRuntime().exec(cmd); //cmd一个字符串 可以正常执行,但是如果是一些相对复杂一点点的比如: cat apk路径 | pm install -S apk大小 会一直报cat: Unknown option S (see “cat --help”) 可以

大小白 3745

杨辉三角形(pascal triangle)的两种不同思路的C实现方法

杨辉三角形(pascal triangle),winxp+dev_c++4环境下实现:1:利用公式函数化实现:#includestdio.h>#define M 10int factor(int m)...{    int mult=1,i;    for(i=1;im;++i)        mult*=i;    return mult; } //计算阶乘;int pascal(int

CLassic_Ms的专栏 1446

eg 4-27 Pascal triangle

/* 编写一个程序,打印n阶(n不大于13)杨辉三角形 分析:在杨辉三角形中Cij(表示第i行第j列的值) Cij的计算如下: Cij=1 (i=0,1,2,3...) Cij=Cij*(i*j+1)/j (j=1,2,3,...,i) */ #include "stdio.h" #define M 13

zmyyyyu的博客 106

LeetCode——Pascal's Triangle

GivennumRows, generate the firstnumRowsof Pascal's triangle. For example, givennumRows= 5, Return [ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ] 原题链接:https://oj.le...

weixin_30851867的博客 95

leetcode 生成杨辉三角形, 118 119 Pascal's Triangle 1,2

Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5, Return [ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ] 解决方案: vector> gene

shiter编写程序的艺术 2229

LeetCode 118. Pascal's Triangle

题目链接:https://leetcode.com/problems/pascals-triangle/ Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5, Return [ [1], [1,1], [1,2,1],

ibingoogle的博客 468

leetcode刷题日记:118.Pascal‘s Triangle(杨辉三角)

题目给我们一个整数numRows表示杨辉三角形的行数,返回杨辉三角形的前numRows行,下面给出一个杨辉三角形看看它有哪些规律;

apprentice_eye的博客 334

Android RunTime执行指令

android Runtime 执行

qunimaode的博客 1490

android runtime.exec 权限,Runtime.getRuntime().exec获取root权限,并执行命令

public String execRootCmd(String cmd) {String result = "";DataOutputStream dos = null;DataInputStream dis = null;try {Process p = Runtime.getRuntime().exec("su");// 经过Root处理的android系统即有su命令dos = new D...

weixin_42628573的博客 3633

Android Runtime.getRuntime().exec

try { // Executes the command. Process process = Runtime.getRuntime().exec(cmd); // NOTE: You can write to stdin of the command using ...

weixin_34138521的博客 445

Runtime.getRuntime().exec详解

Runtime

liuqinhou的博客 3927

Android开发 使用Runtime.getRuntime().exec()方法执行外部命令实现模拟点击屏幕控件

Android开发 使用Runtime.getRuntime().exec()方法执行外部命令实现模拟点击屏幕控件

Android应用开发工程师 1475

Android O 获取Runtime.getRuntime().exec生成的进程号PID并模拟adb shell的Ctrl+C 操作

    前提:公司的手持设备,做了两个mic。写工厂测试apk的同事写测试代码的时候就没有用上层的AudioMediaMediaRecorder的相关api去做。而是用的Runtime.getRuntime().exec(...)去执行tinymix,tinycap指令来进行测试。      录音过程:先用tinymix打开相关流,然后tinycap开始录音。然后tinymix关闭相关流,tin...

Mis_wenwen的博客 7086

Android 执行Runtime.getRuntime().exec报错Permission denied

Android调用Runtime.getRuntime().exec()函数执行命令时,报错了。 java.io.IOException: Cannot run program "/data/data/com.example.testhband/outTest": error=13, Permission denied 使用命令 run-as com.example.testhband进入APK安装目录,发现outTest存在,权限也是正常的。 再查看应用程序AndroidManifest.xm

zhaoguangjun33的专栏 5437
上一篇: Runtime.getRunTime.exec(String command)的使用
下一篇: Android休眠与唤醒
xiaodanpeng
博客等级 码龄16年 52粉丝 5原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值