java - 无法通过android中的进程生成器编译和运行c代码
问题描述
我正在尝试使用进程构建器来编译和运行 c 代码,但它在 UNIX 进程本机方法上失败,无法运行 gcc 权限被拒绝,它在说什么权限?请帮助我无法理解问题
class MainActivity : AppCompatActivity() {
val CMD_COMPILE_C_CODE ="gcc -o"
val cFileName= "hello.c"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val file = File(Environment.getExternalStorageDirectory().absolutePath + File.separator + cFileName)
file.createNewFile()
file.setExecutable(true)
//write the bytes in file
if (file.exists()) {
val fo = FileOutputStream(file)
val osw = OutputStreamWriter(fo)
osw.write("#include <stdio.h>\n" +
"int main(void)\n" +
"{\n" +
"printf(\"Hello World\\n\");\n" +
"return 0;\n" +
"}\n")
fo.close()
Log.i("Vikas","file created: $file")
}
val cFilePath = Environment.getExternalStorageDirectory().absolutePath + File.separator + cFileName
excCFile(cFilePath)
}
private fun excCFile(fileName: String) {
val className = fileName.split(".").get(0)
val listOfCmd = listOf<String>("$CMD_COMPILE_C_CODE $fileName")
val pb = ProcessBuilder("gcc", "$fileName")
result.setText(pb.start().inputStream.read())
}
}
但得到错误::
Caused by: java.io.IOException: Cannot run program "gcc": error=13, Permission denied
at java.lang.ProcessBuilder.start(ProcessBuilder.java:983)
at example.androidtest.MainActivity.excCFile(MainActivity.kt:49)
at example.androidtest.MainActivity.onCreate(MainActivity.kt:41)
at android.app.Activity.performCreate(Activity.java:6942)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2880)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2988)
at android.app.ActivityThread.-wrap14(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1631)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6682)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
Caused by: java.io.IOException: error=13, Permission denied
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:133)
解决方案
也许您需要以 root 用户(管理员)身份运行它。
推荐阅读
- python - Python中的多类和多标签分类模型?
- java - 未知字段操作(服务:AmazonIdentityManagement;状态代码:400)
- php - 在 CronJobs 之间传递信息
- java - 如何将名称添加到 JSON 数组中的列表,使用 springboot 发布响应
- python - 使用 python selenium 按下 F 键——切换阅读器视图
- python - Matplotlib 动画保存方法返回创建具有意外帧数的静态图像
- javascript - 为什么在您的 package.json 中设置“private”时“无许可证字段”警告消失:true
- r - 由于非有限值导致的密度图问题 (stat_density)
- activemq-artemis - Apache Artemis 中 HA 的最小集群部署?
- kubernetes - 将文件注入 Pod 的最佳方法是什么?