【发布时间】:2019-09-17 12:07:03
【问题描述】:
使用最新的Android Q 更难或在某些情况下不可能execute native executables 在/data/data/com.example/files/example.so 中
例如,我正在执行 C/C++ 可执行文件:
Process.exec("/data/data/com.example/files/example.so -a -e -n 192.168.1.1")
并从InputStreamReader(process.inputStream) 获取其输出。
我只是想知道是否有办法从 Java Native e.x 加载库:
System.loadlibrary("example") 之后发送与上述相同的command 并直接从中获取output?
谢谢
P.s : 如果可能的话,一个例子会很棒!
https://repl.it/repls/CookedLoyalProfiles
如何转换像传递这样的东西:"executable -a -e -n" 到 JNI call 和 read the output
【问题讨论】:
-
@Onik,感谢您的评论。我了解如何构建可执行文件,但我不知道如何将“executable -a -e -n”之类的内容转换为 JNI 调用并读取输出
-
.so文件通常不是可执行,而是可加载。 -
@DavisHerring,我知道但是要将它们包含在 APK 文件中应该在最后添加
lib和.so -
好的——我只是想确定你想对它采取什么行动。
-
我很惊讶您的可执行文件位于 files 下。如果你把它命名为正确,如libexectutable.so,你会发现它在lib下自动解压,您可以从那里使用
Process.exec()运行它。
标签: java android c++ c java-native-interface