我不知道为什么因为我切换到kitkat我的应用程序无法在系统中创建任何文件(此方法适用于android 4.1.2)。我的应用程序具有su权限,将系统挂载为RW,并在清单中声明READ和WRITE_EXTERNAL_STORAGE权限。 Logcats告诉我它允许SU权限但没有错误。
它不起作用的代码如下所示。
File file = new File(Environment.getRootDirectory().getPath().toString(), "/etc/init.d/script");
清单
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.hasta.cocoremanager"
android:versionCode="1"
android:versionName="1.7" >
<uses-sdk
android:minSdkVersion="16"
android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.ACCESS_SUPERUSER" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name="com.hasta.cocoremanager.Main"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
答案 0 :(得分:1)
自4.4.2以来,设备存储上有新的IO规则:
Article
简而言之:现在您只能在应用程序的文件夹中书写。
答案 1 :(得分:0)
确保该文件对每个人都具有读/写权限。
Runtime.getRuntime().exec(new String[] { "su", "-c", "chown 777 /etc/init.d/script" });
现在您将能够获得该文件的实例。
如果文件不存在,请先运行
Runtime.getRuntime().exec(new String[] { "su", "-c", "echo '#' > /etc/init.d/script" });
编辑:在不知道你想如何使用文件实例的情况下,我会采取措施
File file = null;
try
{
file = new File(Environment.getRootDirectory().getPath().toString(), "/etc/init.d/script");
}
catch (Exception e)
{
// Cannot get file so set permissions.
Runtime.getRuntime().exec(new String[] { "su", "-c", "chown 777 /etc/init.d/script" });
try
{
file = new File(Environment.getRootDirectory().getPath().toString(), "/etc/init.d/script");
}
catch (Exception e)
{
// File does not exits, so create it.
Runtime.getRuntime().exec(new String[] { "su", "-c", "echo '#' > /etc/init.d/script" });
// Now set permissions.
Runtime.getRuntime().exec(new String[] { "su", "-c", "chown 777 /etc/init.d/script" });
try
{
file = new File(Environment.getRootDirectory().getPath().toString(), "/etc/init.d/script");
}
catch (Exception e)
{
// Should never get here.
}
}
// Do stuff with your file.
您可以随时在应用用户区域执行此操作,然后执行
Runtime.getRuntime().exec(new String[] { "su", "-c", "cp " + Environment.getDataDirectory() + "/script /etc/init.d/script" });
关于调用su的说明,这种语法也有效。
Runtime.getRuntime().exec("su -c cp " + Environment.getDataDirectory() + "/script /etc/init.d/script");
答案 2 :(得分:-1)
设置两者的清单权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
因为您还需要RW和READ的读取权限