首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在android应用程序中获取每行进程的输出?

在Android应用程序中,可以使用Java中的ProcessBuilder类来获取每行进程的输出。以下是实现的步骤:

  1. 创建一个ProcessBuilder对象,并指定要运行的命令或程序,例如:
代码语言:txt
复制
ProcessBuilder pb = new ProcessBuilder("命令或程序");
  1. 设置输出流,以便获取进程的标准输出。可以使用ProcessBuilder的方法redirectOutput指定输出流的目的地,例如:
代码语言:txt
复制
pb.redirectOutput(ProcessBuilder.Redirect.PIPE);
  1. 启动进程并等待其执行完毕:
代码语言:txt
复制
Process process = pb.start();
process.waitFor();
  1. 获取进程的输出,可以使用Process对象的方法getInputStream()来获取进程的标准输出流,然后读取输出,例如:
代码语言:txt
复制
InputStream inputStream = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
    // 处理每行的输出
}
reader.close();

需要注意的是,以上代码只是获取进程的标准输出流,如果需要获取错误输出流,可以使用类似的方法进行处理。

对于Android应用程序,如果需要在UI线程中执行该代码,建议使用异步任务(AsyncTask)或者使用线程池(ThreadPoolExecutor)来执行进程,并在处理每行输出时更新UI界面。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

何在进程读取子(外部)进程标准输出和标准错误输出结果

最近接手一个小项目,要求使用谷歌aapt.exe获取apk软件包信息。依稀记得去年年中时,有个同事也问过我如何获取被调用进程输出结果,当时还研究了一番,只是没有做整理。...但是,实际情况并不是我们想那么简单。比如我文前提到问题:别人提供了一个Console控制台程序,我们将如何获取其执行输出结果呢?...它是我们启动子进程时,控制子进程启动方式参数。...我们之后将hWrite交给我们创建进程,让它去将信息写入管道。而我们父进程,则使用hRead去读取子进程写入管道内容。...设置标准输出和标准错误输出句柄 si.hStdError = hWrite; // 把创建进程标准错误输出重定向到管道输入 si.hStdOutput = hWrite

3.9K10

python 从subprocess运行进程实时获取输出

起因是这样,c++程序开发后 功能号和指令,校验需要人工去看对照二进制代码,量大还费力, 于是打算利用python 去调用 c++程序去校验指令, 首先要做就是用python 获取c++程序...printf() 或cout 输出; 环境linux python 3.8.x 以下代码实现,获取子程序输出 command='....linux shell指令,如果要用shell 指令ls 要将false 变成true, 通过指定stderr=subprocess.STDOUT,将子程序标准错误输出重定向到了标准输出,以使我们可以直接从标准输出同时获取标准输出和标准错误信息...p.poll() 返回子进程返回值,如果为None 表示 c++子进程还未结束. p.stdout.readline() 从 c++标准输出获取一行....参考文章1 pythonsubprocess.Popen()使用 参考文章 2 python 从subprocess运行进程实时获取输出

10.4K10
  • Android 逆向】修改运行 Android 进程内存数据 ( Android 命令行获取要调试应用进程 PID | 进程注入调试进程内存 so 库 )

    文章目录 一、Android 命令行获取要调试应用进程 PID 二、进程注入调试进程内存 so 库 一、Android 命令行获取要调试应用进程 PID ---- 前置博客 【Android...逆向】修改运行 Android 进程内存数据 ( 运行环境搭建 Android 模拟器安装 | 拷贝 Android 平台可执行文件和动态库到 /data/system ) 先安装 Android...模拟器 , 雷电模拟器 3.75 版本 ; 在模拟器安装要调试应用后 , 直接运行 ; 执行 dumpsys activity top|grep pid 命令 , 查看当前正在运行应用进程号...PID 为 2328 ; 二、进程注入调试进程内存 so 库 ---- 在 【Android 逆向】修改运行 Android 进程内存数据 ( 运行环境搭建 Android 模拟器安装 | 拷贝.../tool 2328 命令 , 即可完成 进程 注入操作 ; 如果命令行输出 hook_entry_addr = 0xa36044e0 不为空 , 是一个实际地址 , 说明调试动态库注入成功 ; 完整命令行输出

    71610

    Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取 远程 目标进程 systemliblibc.so 动态库 mmap 函数地址 )

    文章目录 一、获取 远程 目标进程 /system/lib/libc.so 动态库 mmap 函数地址 二、从 /proc/pid/maps 文件获取 指定 进程 /system/lib.../libc.so 动态库地址 三、获取 本地进程 /system/lib/libc.so 动态库 mmap 函数地址 四、获取 远程进程 /system/lib/libc.so 动态库...mmap 函数地址 一、获取 远程 目标进程 /system/lib/libc.so 动态库 mmap 函数地址 ---- 获取 远程 目标进程 /system/lib/libc.so...文件获取 指定 进程 /system/lib/libc.so 动态库地址 ---- 查看 /proc/2223/maps 进程对应内存信息 : 其中涉及到 /system/lib/libc.so...module_name 动态库地址 */ return (void*)addr; } 三、获取 本地进程 /system/lib/libc.so 动态库 mmap 函数地址 ---- 获取本地进程函数地址

    87420

    Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取 linker dlopen 函数地址 并 通过 远程调用 执行该函数 )

    文章目录 一、dlopen 函数简介 二、获取 目标进程 linker dlopen 函数地址 三、远程调用 目标进程 linker dlopen 函数 一、dlopen 函数简介 ----...; void* 返回值 : 动态库句柄 二、获取 目标进程 linker dlopen 函数地址 ---- 获取 某个动态库 / 可执行文件 某个方法地址 , 参考 【Android 逆向...】Android 进程注入工具开发 ( 注入代码分析 | 获取 远程 目标进程 /system/lib/libc.so 动态库 mmap 函数地址 ) 博客 ; 获取 远程 目标进程 动态库...函数地址流程 : ① 获取 本地进程 动态库 地址 ; ② 获取 远程进程 动态库 地址 ; ③ 计算 本地进程 与 远程进程 动态库 地址 偏移量 ; ④ 获取 本地进程 函数地址 ; ⑤ 根据...本地进程 函数地址 + 本地进程 与 远程进程 动态库 地址 偏移量 , 计算出 远程进程 动态库 函数地址 ; 三、远程调用 目标进程 linker dlopen 函数 ---- dlopen

    1.1K10

    Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程 libc.so 动态库 mmap 函数 三 | 等待远程函数执行完毕 | 寄存器获取返回值 )

    文章目录 前言 一、等待远程进程 mmap 函数执行完毕 二、从寄存器获取进程返回值 三、博客资源 前言 前置博客 : 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 |...远程调用 目标进程 libc.so 动态库 mmap 函数 一 | mmap 函数简介 ) 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程 libc.so...动态库 mmap 函数 二 | 准备参数 | 远程调用 mmap 函数 ) 本博客进行收尾 , 远程调用 mmap 函数后 , 等待函数执行 , 获取该函数执行返回值 ; 一、等待远程进程 mmap...---- 等待远程进程 mmap 函数执行完毕返回后 , 先调用 ptrace_getregs 方法 , ptrace_getregs(target_pid, regs) 获取远程进程 寄存器信息...; 然后读取该寄存器数据 EAX 寄存器值 , 用于获取远程执行 dlopen 函数返回值 , 返回是 libbridge.so 动态库首地址 ; /* 读取寄存器返回值 */ long ptrace_retval

    64920

    Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取注入 libbridge.so 动态库 load 函数地址 并 通过 远程调用 执行该函数 )

    文章目录 一、dlsym 函数简介 二、获取 目标进程 linker dlsym 函数地址 三、远程调用 目标进程 linker dlsym 函数 获取 注入 libbridge.so 动态库...* symbol : 函数名称 / 全局变量名称 ; void* 返回值 : 返回对应 函数 / 变量 地址 ; 二、获取 目标进程 linker dlsym 函数地址 ---- 获取 某个动态库.../ 可执行文件 某个方法地址 , 参考 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取 远程 目标进程 /system/lib/libc.so 动态库...mmap 函数地址 ) 博客 ; 获取 远程 目标进程 动态库 函数地址流程 : ① 获取 本地进程 动态库 地址 ; ② 获取 远程进程 动态库 地址 ; ③ 计算 本地进程 与 远程进程...远程调用 目标进程 linker dlsym 函数 获取 注入 libbridge.so 动态库 load 函数地址 ---- 参考 【Android 逆向】Android 进程注入工具开发

    85410

    android 权限列表

    允许应用程序访问额外位置提供命令 005 ACCESS_NETWORK_STATE 允许程序获取网络信息状态,当前网络连接是否有效 006 ACCESS_NOTIFICATION_POLICY...允许绑定到运营商应用程序服务系统进程将有这个权限 015 BIND_CHOOSER_TARGET_SERVICE 必须由ChooserTargetService要求,确保只有系统 可以绑定到它...android.permission.READ_USER_DICTIONARY从一个提供器获取数据,针对对应提供器,应用程序需要“读访问权限” 49.android.permission.READ_SYNC_STATS...允许一个应用程序捕获视频输出,不被第三方应用使用 108.android.permission.CAPTURE_SECURE_VIDEO_OUTPUT允许一个应用程序捕获视频输出。...允许一个应用程序添加语音邮件系统 134.android.permission.ACCOUNT_MANAGER允许程序获取账户验证信息,主要为GMail账户信息,只有系统级进程才能访问权限 135

    1.8K30

    Android 进程保活】oom_adj 值 ( 简介 | 查询进程 PID | 根据进程 PID 查询 oom_adj 值 )

    ; 在内存不足 , 要杀进程 , 回收内存时 , 会根据该 oom_adj 值决定是否回收该进程 ; oom_adj 值越大 , 对应进程优先级越低 ; 二、查询进程号 PID ---- 获取进程号...: 执行如下命令 , 可以获取 Android 手机进程号 ; adb shell ps PS 每行输出含义 : USER : 进程所属用户 , ROOT 是权限最高用户 , 其它都是各个应用对应用户名称...; WCHAN : 休眠进程对应在内核地址 ; NAME : 进程名称 ; 最后看到了熟悉企鹅进程保活操作 , 有 3 个进程 ; 在 Android Studio 界面也可以查看进程...ID , 在 Logcat 面板 , 进程 , 可以看到 kim.hsl.app2 进程进程 PID 是 11694 ; 在 PS 对应该 PID 为 11694 进程 ; u0_a356..., 执行如下命令 , 即可查询进程号对应进程 oom_adj 值 ; 首先进入 Android 设备 adb shell 命令行 , adb shell 然后获取 root 权限 , su 最后查询进程号对应进程

    5.6K30

    安卓很受伤:Black Hat 2015黑客大会上将公布6个移动安全威胁

    研究人员在安卓当前指纹扫描框架中发现严重了问题,他们将展示如何通过指纹认证劫持手机支付授权,以及展示一个能获取指纹图像指纹传感器。 华为Mate 7跪了 ? 黑客能否攻破所谓“可信”环境?...申迪将在大会上谈谈关于TrustZone开发、如何在不可靠可信执行环境运行shellcode以及如何Root设备和禁用最新Android SE。 Binder通讯机制权限提升 ?...Binder进程间通信机制一般用于所有不同级别的特权进程之间,然而在通过Binder之前向系统服务输入参数并不能通过验证。...奇虎360安全研究员龚广(音译)将在大会上给出首个挖掘这种漏洞Fuzzing工具“通过Binder通讯机制注入Android系统服务来升级权限”,除此之外他还会详细说明如何利用这种漏洞获取安卓系统服务器许可...CheckPoint技术领导者Avi Bashan和移动威胁防御区域经理Ohad Bobrov将演讲“攻破大量androidcertifigate”,他们将展示如何入侵被运营商和原始设备制造商认证应用程序以获得设备控制权

    1.4K90

    安卓Camera2 YUV_420_888

    可以预见,Image将会用来统一Android内部混乱中间图片数据(这里中间图片数据指各式YUV格式数据,在处理过程中产生和销毁)管理。...本文主要介绍YUV_420_888格式图片数据如何在Image存储和管理。 从YUV420谈起 YUV即通过Y、U和V三个分量表示颜色空间,其中Y表示亮度,U和V表示色度。...不同于RGB每个像素点都有独立R、G和B三个颜色分量值,YUV根据U和V采样数目的不同,分为YUV444、YUV422和YUV420等,而YUV420表示就是每个像素点有一个独立亮度表示,即Y...plane[1] 是U数据,rowStride 是1920, rowStride是2 ,说明每行1920个像素每两个连续U之间隔了一个像素,buffer索引为: 0 , 2 , 4, 6, 8 …...看8 x 4NV12存储结构(NV21只是UV交错顺序相反): 结论 plane[0] + plane[1] 可得NV12 plane[0] + plane[2] 可得NV21 参考3获取I420

    2.6K50

    Android 手机到底需要多少RAM

    Android 内存管理 在Android上启动新应用程序时,Linux内核会创建一个新进程进程是具有自己虚拟地址空间(映射到物理内存)执行单元。...Linux内核管理该进程所需资源,包括在CPU上运行时间,数据输入和输出(通过网络或通过文件系统)以及物理内存(RAM)。 当资源丰富时,内核工作很容易。...当您没有更多内存时,等待更长时间可能不会导致释放更多RAM。这时,内核需要主动获取一些RAM。 Linux和Android以两种方式处理此问题。首先,使用zRAM进行交换。...Android压缩内存并将其写回到内存,如果我们假设压缩率为50%,则128KBRAM可以减少到64KB,从而释放64KB。这等效于将页面换出到磁盘。...:YouTube/WhatsApp/Crossy Road/Candy Crush “媒体密集型”应用程序,这些应用程序加载大量图像,因此使用更多内存.:Google相册和Instagram之类标题

    1.8K30

    基于Android服务器端程序实例

    其实在Android也有很多这些类似的 APP,为了方便和 PC 之间共享 APP 里应用数据,也会有 FTP 或者WebDAV服务在 APP 里运行。...但是 Android 可以选择将数据存放在外部沙盒中,也就是 APP 外部数据目录,可以通过Context.getExternalFilesDir() 获取到该路径,甚至还有其他歪门邪道 APP 在外置存储里随便建立文件夹...这里举个栗子说说如何在 Android 上运行 httpd for arm,可以先将编译好 httpd 放入 raw 文件夹,在 MainActivity 启动时判断是否在指定位置,没有则释放。...中有一个 Runtime 类,这个类主要是用来让 Android 应用程序可以与它所在运行环境进行交互,可以直接通过调用 Runtime.getRuntime() 静态方法来得到这个类实例,再调用...Android 上是没有控制台窗口,那么如何捕捉控制台输出呢,简单,重定向输出到输入流即可。

    1.2K30

    Linux服务器检查性能瓶颈

    在Linux系统,这些数据表示等待CPU资源进程和阻塞在不可中断IO进程进程状态为D)数量。这些数据可以让我们对系统资源使用有一个宏观了解。...上面例子输出,可以看见最近1分钟平均负载非常高,且远高于最近15分钟负载,因此我们需要继续排查当前系统中有什么进程消耗了大量资源。...可以通过下文将会介绍vmstat、mpstat等命令进一步排查。 系统核心指标 vmstat 1 结果 vmstat 命令,每行输出一些系统核心指标,这些指标可以让我们更详细了解系统状态。...这个数据比平均负载更加能够体现CPU负载情况,数据不包含等待IO进程。如果这个数值大于机器CPU核数,那么机器CPU资源已经饱和。...示例输出,eth0网卡设备,吞吐率大概在22 Mbytes/s,既176 Mbits/sec,没有达到1Gbit/sec硬件上限。

    4.3K20

    Android ANR问题解析(一)

    InputDispatcher运行在system_server进程一个子线程,每当接收到一个新输入事件,InputDispatcher就会检测前一个已经发给应用程序输入时间是否已经处理完毕,如果超时...如果步骤3zygote迟迟创建不出应用B进程,那么焦点应用会一直保持在A上,超时后就会报出A发生ANR;此外Android4.4上为了适应多窗口逻辑需要,WMS和InputDispatcher维护焦点窗口和焦点应用可以不同步...由于系统性能原因,CPU占用率高/平均等待队列长/内存碎片化/页错误高/GC慢/用户空间冻结/进程陷入不可打断睡眠,会造成整体运行慢使ANR频繁发生。...与前两类ANR不同,系统对这类ANR不会显示对话框提示,仅在slog输出异常信息。...CPU驱动错误导致四核手机只有一个核运行、Kernel将用户空间冻结导致任何程序都不能执行、I/O吞吐量低下导致应用程序长时间等待I/O,HAL层实时进程长时间占用CPU导致调度队列过长、AMS原生Bug

    2.4K10

    【错误记录】Android 应用漏洞修复处理 ( 动态反调试漏洞 | 调用 Debug.isDebuggerConnected 函数查询是否被动态调试 )

    一、动态调试攻击 针对 Android 应用 进行 动态调试攻击 , 攻击者利用 Frida、Xposed 等调试工具 , 对 Android 应用进行 运行时 分析和修改 , 从而获取应用 关键函数...、核心逻辑 和 敏感数据 等信息 ; 首先 , 选择 包含有价值 敏感数据 或 关键业务逻辑 应用 , : 金融类应用 , 车载应用 ; 然后 , 在设备或模拟器上 配置 Frida、Xposed...Hook 勾住 应用关键函数 , : 加密解密函数 , 数据传输函数 等 , 监控 / 截取 函数 输入 / 输出数据 , 以及内部处理逻辑 ; 最后 , 篡改 被 Hook 目标函数核心逻辑...应用程序 , 可以使用 Debug.isDebuggerConnected 方法来检测当前是否有调试器连接 , 这个方法返回一个布尔值 , 指示调试器是否已连接到应用程序 , 该函数函数原型如下...BuildConfig.DEBUG) { // 检查是否有调试器连接 if (Debug.isDebuggerConnected()) { // 获取当前进程

    15010

    深入理解AndroidstartActivity过程

    WMS会获取到ActivityOptions定义切换动画,并进行播放,从而实现平滑Activity切换效果。...在这个方法,你可以获取到新Activity返回数据。 1.8 处理异常 在startActivity过程,如果发生了异常(Activity未找到、权限不足等),系统会抛出相应异常。...Zygote进程创建App进程:Zygote进程Android系统应用程序进程孵化器,负责创建新应用程序进程。收到请求后,Zygote进程会fork出一个新进程,即App进程。...这个方法会不断地从消息队列(MessageQueue)获取消息,并分发给相应Handler处理。这样,应用程序可以在一个线程处理多个事件,而无需创建额外线程。..._1)一文详细时序图,大家有兴趣可以进一步阅读: 四、总结 AndroidstartActivity过程涉及到Android系统多个部分,包括应用程序、AMS、WMS、ActivityThread

    14210
    领券