2011-11-20 47 views
1

我對apk開發相當陌生。到目前爲止,在購買了一本書以及大量的谷歌搜索之後,我設法制作了一個應用程序來控制自定義ROM的一些功能。我目前正在嘗試實施2個備份功能。我想將/data/system/batterystats.bin備份到/ sdcard,並且我想將我的touchwiz啓動程序的launcher.db備份到/ sdcard。將/data/system/xxxx.bin備份到/ sdcard

對於第一部分我還沒有找到任何東西。我已經搜索了很多關於如何恢復文件的內容,但沒有多少內容出現。它主要是關於SQL .db文件。我也尋找了通過apk運行shell腳本來執行備份的可能性。使用shell腳本很容易,但通過.java執行此操作,我確實沒有任何線索。

此外,我已經嘗試了很多代碼來讓我的sqlite數據庫文件備份,但我很不成功。這裏是我的代碼,你看:在androidmanifest

public class Backup extends Activity { 
public void exportDB(){ 
    try { 
     File sd = Environment.getExternalStorageDirectory(); 
     if (sd.canWrite()) { 
      String currentDBPath = "data/data/com.sec.android.app.twlauncher/databases/launcher.db"; 
      String backupDBPath = sd + "/launcher.db"; 
      File currentDB = new File(currentDBPath); 
      File backupDB = new File(backupDBPath); 

      if (currentDB.exists()) { 
       FileChannel src = new FileInputStream(currentDB).getChannel(); 
       FileChannel dst = new FileOutputStream(backupDB).getChannel(); 
       dst.transferFrom(src, 0, src.size()); 
       src.close(); 
       dst.close(); 
       } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

}

我已經添加權限外部存儲寫入,當然,但沒有任何反應。沒有FC,它只是坐在那裏無所事事。當我檢查我的SD卡時,那裏什麼也沒有。

任何幫助將不勝感激。謝謝

+0

看看logcat的輸出。可能會有一個「fileNotFoundException」。如果沒有進一步的測試,我認爲你想複製的文件不存在,或者你想要寫入的文件尚未創建。 – stefan

+0

它可能不會強制關閉,因爲錯誤發生在try語句中並且被捕獲。爲了更好地進行錯誤處理,使用catch(FileNotFoundException e)和catch(IOException e)'和那些東西而不是泛型'catch(Exception e)'更容易。 – stefan

+0

非常感謝你的答覆。我會嘗試一些進一步的測試。你碰巧知道我的問題的第一部分?將/data/system/batterstats.bin文件(非SQLlite)備份到SD卡,甚至更好(對於我:P)如何通過apk運行shell腳本命令? –

回答

1

下載RootTools(jar文件)。

然後,您可以運行Linux命令是這樣的:

RootTools.sendShell(command);

例如備份,你可以這樣做:

RootTools.sendShell("cp -f /data/data/com.sec.android.app.twlauncher/databases/launcher.db /sdcard/directory/"); 

,並恢復文件:

RootTools.sendShell("cp -f /sdcard/directory/launcher.db /data/data/com.sec.android.app.twlauncher/databases/"); 

cp是複製命令,-f允許它覆蓋文件如果它已經存在。

RootTools是巨大的,併爲命令,只是谷歌如何做Linux的命令,然後將它們放到sendShell

我不知道怎麼用java做。但我個人認爲,使用linux命令比使用10倍容易。

而且要注意,它實際上是很好的獲得SD卡的位置是這樣的:
Environment.getExternalStorageDirectory();

,然後存儲位置信息追加其餘的是結束。

+0

非常感謝你。你爲我節省了時間。是的,我發現shell腳本比java簡單一百萬倍。我昨天正在查看根工具,但不知道sendShell命令!它的工作原理:D –

+0

不客氣。當我發現有關roottools的時候,我很驚訝,很開心。 jar文件包含索引命令的HTML文件。文檔是適中的,但Wiki也有一些有用的信息。 – Jakar