【问题标题】:Android: Why doesn't native binary have access to the internet, while my Android application doesAndroid:为什么原生二进制文件不能访问互联网,而我的 Android 应用程序可以
【发布时间】: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


【解决方案1】:

正如 cmets 中所指出的,我在 C 代码中犯了一个令人尴尬的错字,..

/system/bin/ping -c nu.nl

应该是

/system/bin/ping -c 1 nu.nl

(正如 curl 库中的链接所指出的那样,我确实遇到了连接问题,但现在 curl 不再抱怨这个问题了)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-13
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    相关资源
    最近更新 更多