- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
TLDR;问题:
当我使用 Runtime.exec()
单独运行我的原生 Android 可执行文件时, 我可以得到它的 printf()
我的应用程序的输出。但是当我用 Runtime.exec("su -c <native executable>")
做的时候,我无法再得到它的输出。
更好的解释:
所以,假设我有一个 Android 应用程序,它有一个名为 “executable” 的 native 可执行文件。我将 "executable" 重命名为 "libexecutable.so" 以欺骗 apk 安装程序将文件复制到设备中。
然后,应用程序运行可执行文件
String executable = context.getFilesDir().getParent() + "/lib/libexecutable.so";
String me = context.getPackageName();
Process p = Runtime.getRuntime().exec(String.format("%s %s", executable, me));
每当我使用 printf()
时,从我的 native 可执行文件中,我可以使用 p.getInputStream()
在我的应用程序中获取输出
。完美。
但是,这个 native 可执行文件需要 root 权限,所以,我这样运行它:
String su = "su -c";
String executable = context.getFilesDir().getParent() + "/lib/libexecutable.so";
String me = context.getPackageName();
Process p = Runtime.getRuntime().exec(String.format("%s %s %s", su, executable, me));
现在,每当我的 native 可执行文件使用 printf()
,我不再可以用p.getInputStream()
得到输出.
我查了一下,得到了这个: Java: can't get stdout data from Process unless its manually flushed
并尝试了 fflush(stdout)
在每个 printf()
之后直接在我的 native 可执行文件中调用,就像页面建议的那样,但没有用。
最佳答案
String[] cmd = new String[]{
"su",
"-c",
getFilesDir().getParent() + "/lib/libexecutable.so " + getPackageName()
};
Process p = Runtime.getRuntime().exec(cmd);
//No more permission denied error
哦,没关系。我让它运行起来。有人能告诉我为什么这行得通而不是我最初的尝试吗?
关于java - 使用 "su -c"运行 Android NDK 可执行文件 Swallows printf(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22946138/
在我的主应用程序表单中,我有许多菜单和工具栏按钮功能,我为其分配了快捷键,例如 F10、F11 和 F12。除了某些控件具有焦点的情况(例如第 3 方网格控件)外,快捷方式效果很好。在那种情况下,F1
我的项目将 C++ 与 Python 集成的解决方案推迟到现在。但是现在这个问题又被提出来了。有人知道项目的状态吗?在 Google 上:(http://code.google.com/p/unlad
我想要实现的是,在表单更改时,整个 View 应该重新渲染。这是为了提供刚刚编辑的数据的预览,并在勾选复选框时隐藏表单中的某些元素。 当用户编辑字段并单击按钮而不离开字段时,会同时触发前两个事件:更改
我知道没有任何官方的,但我希望我能从某个地方得到一个非官方的? 我在 x86 硬件 (Core 2 Duo) 上运行 32 位 Windows XP。 最佳答案 目前,没有正式的 Windows 二进
我希望浏览器在发生类型错误时显示错误消息。 错误如无法读取未定义的属性或 undefined reference 。 new Promise(function(resolve,reject){
我正在使用nodejs创建一个代理服务器。除非需要 CSRF token ,否则它可以正常工作。 使用请求插件 ( https://github.com/request/request ) 发出请求时
这是我几天来一直在努力解决的一个非常奇怪的问题。起初我以为它与我们的应用程序中的某些东西有关,但我已经将它剥离到最简单的 html 页面并且它仍在发生。基本上任何时候我在页面上添加一个标签 html
我有一个正在转发接收消息的对象。它不使用 forwardInvocation 实现将它们转发给其他对象。但是,由于程序的组织方式,methodSignatureForSelector 在某些时候并不总
我有一个正在转发接收消息的对象。它不使用 forwardInvocation 实现将它们转发给其他对象。但是,由于程序的组织方式,methodSignatureForSelector 在某些时候并不总
我在另一个 View 之上有一个 View 。单击底部 View 应该会触发回调。单击顶部 View 时不应触发任何回调。 我面临的问题是,当点击顶部 View 时,底部 View 会触发其回调。我想
我使用 RxJava 遍历文件列表,进行网络调用以上传每个文件,然后收集列表中成功上传的文件,并在成功时将这些文件保存在订阅者中。 此代码有效,但发生错误时除外。行为应该是它记录错误并继续,它确实如此
遇到了意外的 bash/sh 行为,我想知道有人可以解释其背后的基本原理,并提供以下问题的解决方案。 在交互式 bash shell session 中,我执行: $ bash -c 'sleep 1
看看这个例子: import java.io.FileDescriptor; import java.io.FileOutputStream; import java.io.IOException;
我正在研究 Objective-C 的“消息转发”。我编写了一个测试程序来验证我是否可以在运行时“吞下”一个无法识别的选择器。所以我这样做了: - (void) forwardInvocation:
自 2009 年第 4 季度发布以来,Google 似乎没有更新过结果部分。我一直想知道什么时候将它放入 Python 主干,以及它是否以任何方式准备好生产。 此外,“我们渴望不做任何原创作品”也在
例如,我想把中间的元素放到最后: let students=[ {"name":"a","uid":"001"}, {"name":"b","uid":"002"}, {"na
我在 UISCrollView 控件(使用 Xamarin.iOS 单绑定(bind)的 Google Maps iOS SDK)中嵌入的 View 上有一个 Google MapView 控件。 问
TLDR;问题: 当我使用 Runtime.exec() 单独运行我的原生 Android 可执行文件时, 我可以得到它的 printf()我的应用程序的输出。但是当我用 Runtime.exec("
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我是一名优秀的程序员,十分优秀!