2012-04-13 76 views
2

我对我的应用程序使用了以下代码,没有任何问题。如何在java中使用预先存在的unix库

inputstream = Runtime.getRuntime().exec("/system/bootmenu/recovery/sbin/tune2fs -l /data.img").getInputStream(); 

但是最近tune2fs可执行文件被tune2fs库取代。我不能再让这个代码工作。

我想:

inputstream = Runtime.getRuntime().exec("/system/bootmenu/recovery/sbin/tune2fs -l data.img",new String[]{"LD_LIBRARY_PATH=/system/bootmenu/recovery/sbin:$LD_LIBRARY_PATH"}).getInputStream(); 

但是,如果没有sucess,我该如何解决这个问题?

回答

2

我建议使用ProcessBuilder代替Runtime

ProcessBuilder pb = new ProcessBuilder("/system/bootmenu/recovery/sbin/tune2fs", "-l", "data.img"); 
Map<String, String> env = pb.environment(); 
env.put("LD_LIBRARY_PATH", "/system/bootmenu/recovery/sbin:" + env.get("LD_LIBRARY_PATH")); 
pb.directory(new File("/mnt/sdcard/multiboot/MIUI/")); 
Process p = pb.start(); 
+1

我不认为$ LD_LIBRARY_PATH将得到解决。您需要从当前环境中提取LD_LIBRARY_PATH并追加它。 – j13r 2012-04-13 07:28:32

+0

谢谢,更新了答案。 – nobeh 2012-04-13 07:31:15

+0

这适用,因为“初始值是当前进程的环境的副本(请参阅System.getenv())。” http://docs.oracle.com/javase/6/docs/api/java/lang/ProcessBuilder.html – j13r 2012-04-13 07:35:20

相关问题