【发布时间】:2017-09-01 14:49:27
【问题描述】:
我导入了一个从 Android 应用程序启动的本机二进制文件,该应用程序或多或少地描述如下: Compile and use ABI-dependent executable binaries in Android with Android Studio 2.2 and CMake
然后我用Runtime.getRuntime().exec()启动二进制文件
问题是二进制文件无法访问互联网,而 Java 应用程序可以。比较:
java.lang.Runtime.getRuntime().exec("ping -c 1 nu.nl");
工作 (returns 0),而 ...
res = system("/system/bin/ping -c nu.nl");
...不起作用,它返回512(应该是右移8,这意味着ping返回退出代码2)
为什么这不起作用?
显然清单文件包含:
uses-permission android:name="android.permission.INTERNET"
【问题讨论】:
-
which ping不使用互联网,但如果您在应用中安装 ping,它就不会在路径上。如果您的应用程序要在上下文中运行此 ping,Runtime.exec()必须提供可执行文件的完整路径 -
对不起,我复制了错误的行。
res = system("/system/bin/ping -c nu.nl");给出 512 结果(而which ping返回 0) -
我更新了我原来的问题
-
编辑后的问题更加混乱。当您使用隐式路径运行 ping 时,它仍然是系统二进制文件,而不是您嵌入 APK 中的那个。
-
@AlexCohn DOOHH!这很尴尬,.. 我想这就是为什么我们不应该审查我们自己的代码,.. 对。谢谢!
标签: android java-native-interface