我正在尝试在Android中编译Arduino的.ino文件。所以我正在使用avr-gcc,avr-g ++,avr-objcopy可执行(二进制)文件。这些文件在给定位置生成某些文件作为输出。我在内部存储中使用了/ data / local / tmp(/data/user/0/com.dtlabz.dreamkit/files/local/tmp/)目录。但是这些可执行文件无法输出文件。
这是执行可执行文件的代码:
private void execCommand(List<String> comm) throws Exception {
StringBuilder sb = new StringBuilder();
for(String c : comm) {
sb.append(c);
sb.append(" ");
}
exec(sb.toString());
try {
Log.d(LOG,"Comm: "+comm);
Process process = Runtime.getRuntime().exec(comm.toArray(new String[0]));
MessageSiphon in = new MessageSiphon(process.getInputStream(), new MessageConsumer() {
public void message(String s) {
stdout(s);
}
});
MessageSiphon err = new MessageSiphon(process.getErrorStream(), new MessageConsumer() {
public void message(String s) {
stderr(s);
if(s.contains("error:")) {
Util.p("it's an error");
errorHappened = true;
errorString = s;
}
}
});
try {
in.join();
err.join();
int result = process.waitFor();
Log.d(LOG,"Result is: "+ result);
} catch (Exception ex) {
Log.e(LOG,"ExecCommand MsgSiphon Join Error: "+ex);
}
if(errorHappened) {
throw new CompileException("compiler error",errorString);
}
} catch (IOException e) {
Log.e(LOG,"Exec error: "+ e.getMessage());
}
}
这是命令。例如,我将以下命令作为comm:
/data/user/0/com.dtlabz.dreamkit/files/local/tmp/arduino_compiler_files/tools/avr/bin/avr-g++ -c -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -mmcu = atmega328p -DF_CPU = 16000000L -MMD -DARDUINO = 101 -DUSB_VID = -DUSB_PID = -I / data / user / 0 / com .dtlabz.dreamkit /文件/本地的/ tmp / arduino_compiler_files /硬件/ Arduino的/核心/ Arduino的 -I /数据/用户/ 0 / com.dtlabz.dreamkit /文件/本地的/ tmp / arduino_compiler_files /硬件/ Arduino的/变体/标准 /data/user/0/com.dtlabz.dreamkit/files/local/tmp/arduino_compiler_files/hardware/arduino/cores/arduino/CDC.cpp -o /data/user/0/com.dtlabz.dreamkit/files/local/tmp/CDC.cpp.o
此命令应生成CDC.cpp.o文件。但是我在上面给出的代码中通过process.GetErrorStream()得到了以下错误。
Cannot create temporary file in ./: Read-only file system
请帮助。