2012-04-13 17 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

相關問題