[Android]利用run-as命令在不root情况下读取data下面的数据
前言
这一段时间都在做换肤功能,遇到很多问题,解决后又有新的问题,这里分享一则,想在不使用shareUserId来实现多APK共享资源,也建议谨慎使用shareUserId。
声明
欢迎转载,但请保留文章原始出处:)
博客园:http://www.cnblogs.com
农民伯伯: http://over140.cnblogs.com
正文
一、关键步骤
over@over-ThinkPad-R52:~$ adb shell
$ run-as com.package
$ cd /data/data/com.package
$ ls
databases
lib
$ cd databases
$ ls
preferences.db
$ cat preferences.db > /mnt/sdcard/preferences1.db
$ run-as com.package
$ cd /data/data/com.package
$ ls
databases
lib
$ cd databases
$ ls
preferences.db
$ cat preferences.db > /mnt/sdcard/preferences1.db
代码说明:
注意com.package换成自己的完整包名,关键是run-as命令,最后使用cat命令把数据库拷贝到sd卡下面。
二、补充
同事分享/data/data/package/lib这个目录是可以直接访问的,也就是说adb shell后虽然无法读取/data目录,但是可以直接访问这个目录下的文件,可以通过上面的run-as命令看得出其权限与其他目录的权限是不同的,为system权限,这为多apk共享so提供了便利,这也是Vitamio所使用的方式。
2012-6-14
如果签名了并且指定设置了android:debuggable="false"将无法使用该命令。
2012-7-13
感谢网友分享(见评论),注意不要把adb shell 和 run-as作为一条命令一起执行,例如:adb shell run-as com.pack
三、参考文件
android上使用手機跑adb存取data資料夾[blogspot]
Why do I get access denied to data folder when using adb?
结束
关于共享数据也可以研究一下/data/data/package/files,使用openFileOutput的第二个参数来指定访问权限。事物总有其多面性,本文有鼓励窥视apk之嫌,方法分享给你,至于你用来做什么我可以管不了了 :) 也算是一种黑客精神,提醒大家开发应用时切勿对重要的数据明文存放。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
2011-06-13 Android中文API(125) —— VideoView