Android 根应用程序不工作:无法从终端或 Java 中删除文件
Posted
技术标签:
【中文标题】Android 根应用程序不工作:无法从终端或 Java 中删除文件【英文标题】:Android root app not working: Can't remove file from terminal or Java 【发布时间】:2012-10-26 01:23:42 【问题描述】:我正在为clearing browser localstore 开发一个简单的根应用程序,也许稍后会添加其他内置应用程序无法实现的功能。我正在使用roottools,root 似乎正在工作,但它不会正确删除目录:
public class MainActivity extends Activity
@Override
public void onCreate(Bundle savedInstanceState)
RootTools.debugMode = true;
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.buttonClearBrowser).setOnClickListener(new OnClickListener()
@Override
public void onClick(View arg0)
if (RootTools.isAccessGiven())
RootTools.remount("/data/data/com.android.browser/app_databases/", "RW");
Command command = new Command(0,"rm -rf /data/data/com.android.browser/app_databases/")
@Override
public void output(int arg0, String arg1)
System.out.println(arg1);
;
try
RootTools.getShell(true).add(command).waitForFinish();
catch (InterruptedException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (TimeoutException e)
// TODO Auto-generated catch block
e.printStackTrace();
);
@Override
public boolean onCreateOptionsMenu(Menu menu)
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
这应该会清除 Android 中的 html5 本地存储(您无法从浏览器应用程序中清除)。但是它只给出错误信息:
11-05 21:40:06.650: D/RootTools v2.4(22778): Remounting /data as rw
11-05 21:40:06.650: I/RootTools v2.4(22778): [nodev, relatime, nosuid, rw] AND rw
11-05 21:40:06.650: D/RootTools v2.4(22778): [nodev, relatime, nosuid, rw]
11-05 21:40:06.650: D/RootTools v2.4(22778): Using Existing Root Shell!
11-05 21:40:06.650: D/RootTools v2.4(22778): Sending command(s): rm -rf /data/data/com.android.browser/app_databases/
11-05 21:40:06.660: I/System.out(22778): rm failed for -rf, Read-only file system
11-05 21:40:06.660: D/RootTools v2.4(22778): Command 0finished.
顺便说一句,我在 adb shell 上遇到了同样的错误:
$ su
su
# rm -rf /data/data/com.android.browser/app_databases/http_m.bing.com_0
rm -rf /data/data/com.android.browser/app_databases/http_m.bing.com_0
rm failed for -rf, Read-only file system
/data 不应该是只读的,因为那是应用程序设置所在的位置。电话有问题吗?如果重要的话,这是 Android 2.2.2。具有讽刺意味的是,我可以在 root 模式下使用 Ghost Commander 浏览和删除文件。
【问题讨论】:
如果您有 root AFAIK,则无需重新挂载。/data/data
未安装 RO。
【参考方案1】:
我相信-f
选项在android 中不被rm
command 接受。
要确认它,请从命令行尝试不带-f
的相同命令:
rm -r /data/data/com.android.browser/app_databases/http_m.bing.com_0
问候。
【讨论】:
不错!为了将来参考,是否有完整的列表列出哪些选项可以或不能在 Android 上使用,或专门针对 Android 的手册页? 我不知道。经过几次惊喜之后,我习惯于对有效的命令选项进行一些尝试和错误:-( 哈,所以它试图删除根目录下的f
文件或其他什么,因此出现“只读”消息?内置的toolbox
二进制文件确实无法识别-f
,但我认为busybox 可以(虽然不是100% 肯定)。【参考方案2】:
如上所述,您不需要重新挂载/data
,它已经挂载了rw
。一般在挂载/重挂载的时候需要给挂载点的路径作为参数:/system
、/data/
、/mnt/sdcard
等。给出完整路径/data/data/com.foobar.app/files/foobaz.txt
传递给@时会报错987654327@ 命令。
当然还有一个问题,为什么/data
似乎是ro
。在运行这段代码之前你做了什么特别的事情吗?
【讨论】:
注释该行给出相同的结果。 重启后试了rm命令,还是报错。 你确定你真的有root吗?这是什么手机?以上是关于Android 根应用程序不工作:无法从终端或 Java 中删除文件的主要内容,如果未能解决你的问题,请参考以下文章
错误记录在 Android Studio 的 Terminal 终端执行 gradlew 报错 ( 无法将“gradlew”项识别为 cmdlet函数脚本文件或可运行程序的名称。请检查名称 )
错误记录在 Android Studio 的 Terminal 终端执行 gradlew 报错 ( 无法将“gradlew”项识别为 cmdlet函数脚本文件或可运行程序的名称。请检查名称 )