2011-08-20 123 views
2

如何在我的應用程序中編輯/ system/Directory中的文件?在android應用程序中安裝R/W系統來編輯只讀文件

我必須讓系統R/W寫入?

我已經試過:

process = Runtime.getRuntime().exec("su"); 
os = new DataOutputStream(process.getOutputStream()); 
os.writeBytes("mount -o remount,rw /system\n"); 
os.writeBytes("exit\n"); 
os.flush(); 
process.waitFor(); 

和很多很多很多人,都沒有成功。

如果有人能幫助我,我非常感謝它! :) 另外,如果我終於做到了,它將適用於所有根系電話? 或者在某些手機中有所不同?

+0

這通常是不是一個應該被attemptin g從android應用程序中執行。但要做到這一點,文件系統必須重新安裝可寫,然後或者文件必須從根進程被修改(其中一個Android應用程序是沒有,儘管它可能是能夠推出一個從屬進程以root權限),或有其權限被根進程改變,隨後可由諸如android應用的非根進程寫入。 –

回答

6

我用:

os.writeBytes("mount -o remount rw /system/\n"); 
    //instead of a comma, I have a space. 
    //When I tried it with a comma, mine didn't work either. 

這讓我成功安裝。

如果退出後的權利,當然這是行不通的。您必須保持在同一個進程中,並使用linux命令來編輯文件。

我不知道如何編輯這些文件,但我建議使用Google如何做事的Linux終端,然後把正確的代碼在os.writeBytes("CODE_HERE");

雖然,只要在安裝過程來講,我不知道這個命令是否可以普遍使用。幸運的是可以在我的設備上工作。

編輯:
我現在用RootTools:http://code.google.com/p/roottools/downloads/list
這裏是Wiki頁面:
http://code.google.com/p/roottools/w/list

但我現在用的是:

RootTools.remount(file, mountType); 
//For example: 
RootTools.remount("/system/", "rw"); 

我認爲是普遍的

+1

我實現了這個。它實際上更大的代碼。爲了使其具有通用性,您可以找到每個設備特定的安裝命令的運行時間,因爲它依賴於系統的位置。並使其不依賴於busybox,因爲也許有人有他的老版本等busybox感謝回覆。 – Paschalis

+1

你說得對。我認爲這不是普遍的。我更新了我的答案,並且我相信RootTools處理整個過程。即使不是,你也有'RootTools.getMounts()'。不過,RootTools很棒。我在XDA上發現了他們。 – Jakar

1

編輯:以下代碼的所有版本都不會將系統掛載爲RW。 *閱讀下面的評論,看看爲什麼。 解決方案不是一個簡單的命令。編輯1:我繼續超級用戶apk,設置選項卡,並在最後一項「點擊」,以更新蘇二進制文件。隨着更新,下面的一切都無法正常工作。

編輯2:在這裏開始與我的自我對話。修正當前最新的二進制文件是在帖子的底部

================================= =================================================

找到了如何做到這一點!第二天的努力,終於找到了!!!!! 試了幾件事情,並回答是一個簡單的變化模式,

我做了什麼:

第一版代碼:(不工作)

String[] mountRW = { "su", "-c", 
"chmod 777 /system/etc/build.prop"}; 

String[] mountRO = {"su", "-c", 
"chmod 755 /system/etc/build.prop"}; 

//TODO REMOVE testing purposes   
File file2 = new File("/system/build.prop"); 

//Make file Read-Write 
process = Runtime.getRuntime().exec(mountRW); 
process.waitFor(); 

//TODO REMOVE testing purposes 
Log.d("MOUNT RW?", "RW WRITABLE? "+ file2.canWrite()); 

/////////////////////// 
// process the file 
////////////////////// 

// After editing finish, 
//make Read Only file again 
process = Runtime.getRuntime().exec(mountRO); 
process.waitFor(); 

//TODO REMOVE 
Log.d("MOUNT RO?", "RO WRITABLE? "+ file2.canWrite()); 

我沒有粘貼一些嘗試抓住案件。 另外我得到了另一個問題..我解決了它在版本2中。小問題是,我要求一個特定的su命令,並且用戶,必須接受SU cmd RO,SU cmd RW ..另一次在我的程序中的其他東西。 在第二版本I M使用通用su命令,所以用戶必須接受SU特權只有一次,和I M使用的輸出流。

代碼版本2(Recomended)(不工作)

String mountRW = "chmod 777 /system/build.prop"; 
String mountRO = "chmod 755 /system/build.prop"; 

//TODO REMOVE 
File file2 = new File("/system/build.prop"); 

//Make file Read-Write 
process = Runtime.getRuntime().exec("su"); //Generic SU Command 
os = new DataOutputStream(process.getOutputStream()); 
os.writeBytes(mountRW + " \n"); 
os.writeBytes("exit\n"); 
os.flush(); 
process.waitFor(); 


//TODO REMOVE 
Log.d("MOUNT RW?", " RW WRITABLE? "+ file2.canWrite()); 

//////////////////////////// 
/// mod the file 
/////////////////////////// 

// After editing finish, make Read Only file again 
process = Runtime.getRuntime().exec("su"); 
os = new DataOutputStream(process.getOutputStream()); 
os.writeBytes(mountRO + " \n"); 
os.writeBytes("exit\n"); 
os.flush(); 
process.waitFor(); 

//TODO REMOVE 
Log.d("MOUNT RO?", "RO WRITABLE? "+ file2.canWrite()); 
  • 兩個代碼需要root您的設備上。
  • 這兩個版本都不包括catch case。 (Eclpise會發現他們對你)
  • 查看您所在的logcat(亞行logcat),一看就知道它確實工作!
  • 有了最新的蘇二進制,該代碼稍有變化。更改模式命令需要4位數字。 0777爲rw權限,0755爲ro權限!
  • 此代碼由它自己,它無助於你的設備。

只有它安裝built.prop RW,然後再安裝回RO。 雖然如果你改變它,你可能會阻止你的設備!保重!

+0

你並沒有「掛載」任何東西,因此這段代碼通常不能正常工作。通常,你必須重新掛載/系統分區可寫,可能你在之前的嘗試中做過。您錯誤地稱爲「mountRW」和「mountRO」的命令字符串不能完成掛載,而是改變文件權限,以便運行java代碼的非根進程可以更改文件。你應該重新命名爲「chmodRW」或類似的東西。如果你希望它通常是有用的(對於任何需要root的東西都可以是普通的),你將需要處理重新安裝/ system –

+0

Hello Chris!感謝您花時間回答。 Ver2在我的設備上的superuser.apk上的su二進制版本上運行良好。但我更新su二進制到最新的,它失敗了。現在我想通了。 chmod cmd需要4位數才能工作。例如「0777」進行安裝。這段代碼就像一個原型,我想分享,因爲花費了我很多時間和精力來計算。這不是我在我的程序中實際做的。不是很好,我沒有安裝RW整個系統,但一個特定的文件,我想修改?然後給RO權限?我想徵求意見!:) – Paschalis

+0

@Psachialis。你誤會了。 「chmod」不會「掛載」任何東西。您的代碼解決了讓非根進程修改已經寫入文件系統上的受保護文件的一個不同的問題,僅僅是足夠的,因爲你已經安裝了整個/系統可寫在上次重新啓動以前的一些時間。電源循環您的設備你會發現,它就會失敗(除非你有一個非標準設計不當的設備通常具有/系統安裝可寫) –

相關問題