如何使用android程序在/ etc / wifi / wpa_supplicant.conf文件中编写文件?

时间:2016-11-14 15:02:06

标签: android service permissions wifi wpa-supplicant

我正在开发与wifi相关的应用程序,它会让用户提供用户名密码,并且需要在系统/ etc / wifi / path中的文件中编写(编辑/追加)。

我在stackoverflow中搜索并得到了一些答案然后尝试但没有运气。这是有根的设备。我也做了重新安装和su。我能够读取同一个文件。我也将所有权限都放在了清单中。我错过了什么?

try {
    String[] command = new String[]{"/system/bin/ls", "-l",
            "/system/etc/wifi/wpa_supplicant.conf" };
    Process process = Runtime.getRuntime().exec(command);
    BufferedReader reader = new BufferedReader(
            new InputStreamReader(process.getInputStream()));
    int read;

    String output = "";
    String line;
    while ((line = reader.readLine()) != null) {
        output.concat(line + "\n");
        Log.w("myApp", "[[output]]:" + line);
    }
    reader.close();
    process.waitFor();

    String[] command2 = new String[]{"/system/etc/wifi/chmod", "777",
            "/system/etc/wifi/wpa_supplicant.conf" };

    Runtime rt = Runtime.getRuntime();
    Process p = rt.exec(new String[]{"/system/bin/sh", "-c", "echo \"12345678\" > /system/etc/wifi/wpa_supplicant.conf"});

    File path= Environment.getDataDirectory();
    FileWriter fw = new FileWriter(new File("/system/etc/wifi/wpa_supplicant"));
    fw.write('9');
    fw.close();

    Log.d(TAG, "File Saved Successfully !!!");

    //display file saved message
        /*Toast.makeText(getBaseContext(), "File saved successfully!",
        Toast.LENGTH_SHORT).show();*/

} catch (Exception e) {
    e.printStackTrace();
}

这是我的清单权限(外部应用程序标记和一些其他用途的更多权限)。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/> 

以下是错误,

01-01 06:13:53.565: W/myApp(11205): [[output]]:-rw-rw-rw- root     root           58 2000-01-01 03:56 wpa_supplicant.conf
01-01 06:13:53.580: W/System.err(11205): java.io.FileNotFoundException: /system/etc/wifi/wpa_supplicant: open failed: EROFS (Read-only file system)
01-01 06:13:53.580: W/System.err(11205):    at libcore.io.IoBridge.open(IoBridge.java:452)
01-01 06:13:53.580: W/System.err(11205):    at java.io.FileOutputStream.<init>(FileOutputStream.java:87)
01-01 06:13:53.580: W/System.err(11205):    at java.io.FileOutputStream.<init>(FileOutputStream.java:72)
01-01 06:13:53.581: W/System.err(11205):    at java.io.FileWriter.<init>(FileWriter.java:42)
01-01 06:13:53.581: W/System.err(11205):    at com.intel.sunnypoint.headless.HeadlessService.WriteBtn(HeadlessService.java:450)
01-01 06:13:53.581: W/System.err(11205):    at com.intel.sunnypoint.headless.HeadlessService.setupWifiAPConfig(HeadlessService.java:386)
01-01 06:13:53.581: W/System.err(11205):    at com.intel.sunnypoint.headless.HeadlessService$HttpServiceThread$WiFiPageHandler.handle(HeadlessService.java:1094)
01-01 06:13:53.581: W/System.err(11205):    at org.apache.http.protocol.HttpService.doService(HttpService.java:248)
01-01 06:13:53.581: W/System.err(11205):    at org.apache.http.protocol.HttpService.handleRequest(HttpService.java:192)
01-01 06:13:53.581: W/System.err(11205):    at com.intel.sunnypoint.headless.HeadlessService$HttpServiceThread.run(HeadlessService.java:663)
01-01 06:13:53.581: W/System.err(11205): Caused by: android.system.ErrnoException: open failed: EROFS (Read-only file system)
01-01 06:13:53.581: W/System.err(11205):    at libcore.io.Posix.open(Native Method)
01-01 06:13:53.581: W/System.err(11205):    at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
01-01 06:13:53.582: W/System.err(11205):    at libcore.io.IoBridge.open(IoBridge.java:438)
01-01 06:13:53.582: W/System.err(11205):    ... 9 more

1 个答案:

答案 0 :(得分:0)

您是否拥有超级用户权限?如果没有root访问权限,只有闪存更新的机制(通过恢复或OTA)可以修改/system。要被接受,这样的更新存档必须使用与ROM相同的密钥进行签名 - 这只是ROM的开发人员可以做的事情。

通过自定义恢复可能有一种方法可让您直接编辑所有文件系统(twrp)。但不知道它是什么设备,就不能说是否存在匹配的恢复。除此之外,它要么支持设备,要么不编辑/system中的任何文件。

如果您具有root访问权限,则应该以root身份执行命令!应该使用su命令

Runtime.getRuntime().exec("su");

或每个命令中su.bin的完整路径。