2012-07-03 104 views
3

我試圖啓動一個應用程序,因此我可以將我的應用程序備份到sdcard。我跑:運行shell命令從Android應用程序複製文件

 Process p = Runtime.getRuntime().exec("su"); 
    Process c = Runtime.getRuntime().exec(
      "cp /data/app/com.ebay.mobile-1.apk" 
        + Environment.getExternalStorageDirectory() 
        + "/ebay.apk"); 
    Log.d("copy", "done"); 

當它運行時我可以授予超級用戶,然後它說,它這樣做,但沒有文件不被複制。我只是使用eBay應用程序作爲示例和測試。

感謝您的任何幫助。

修復:感謝下面的幫助,但我發現一個完整的修復和有點不同的方式做事情在這裏「http://stackoverflow.com/questions/10735273/copy-folders-in-data-data-to- sdcard-viceversa?rq = 1「

+0

哇,我覺得自己像個白癡,我沒加WRITE_EXTERNAL_STORAGE許可。 「dd if = source_file of = dest_file」 – user1056798

+0

你自己找到的解決方案工作,感謝股票! – VinceStyling

回答

7

Android不支持cp命令。對於這一點,你必須要麼使用命令(從外殼僅)一樣,

cat source_file > dest_file 

或者使用了BusyBox與您的應用程序。

編輯:

你也可以使用命令,

dd if=source_file of=dest_file 
+0

更多信息http://stackoverflow.com/questions/4714411/how-to-copy-and-edit-files-in-android-shell – user370305

+0

請注意,您實際上並不需要root用戶,前提是應用程序具有外部存儲權限。但是cat source> dest trick不是一個你可以執行的進程,而是一個必須由shell解釋的東西。在java中使用while循環讀取文件並將其寫回來可能更可取。 –

+0

@ChrisStratton - 如果您想安裝busybox並使用命令shell,那麼只需要root權限,否則其他選項只能在應用程序的清單文件中使用WRITE_EXTERNAL_STORAGE權限。 – user370305

0

這QA幫了我很多,所以我想添加一些不同的EXEC答案。不要使用Runtime.getRuntime()。exec(String),而應考慮使用Runtime.getRuntime()。exec(String [])。這應該防止帶有空格的文件路徑對文件系統造成嚴重破壞。

嘗試

Process copy = Runtime.getRuntime().exec(
new String[]{ 
    "dd", 
    "if=" + inputFile.getAbsolutePath(), 
    "of=" + outputFile.getAbsolutePath() 
}); 
相關問題