一、说明
Android应用或游戏在数据持久化时,一般会将文件写入到sdcard或者私有目录files目录下,也可以直接在私有目录下新建文件夹进行存入。
如:
/storage/emulated/0/Android/data/[package name]/
/storage/emulated/0/Android/data/[package name]/files/
/data/user/0/[package name]/
/data/user/0/[package name]/files
由于权限机制的设定,sdcard目录用户只需注册对应权限即可访问,shell用户可直接访问。
而应用私有目录,一般用户除自应用外没有权限进行访问,包括shell在内。
二、可行方案
1、手机进行ROOT,shell运行时执行su命令,通过权限管理工具获取ROOT权限,进而可以访问任意位置;
2、利用多开器的特性,在virtualxposed、平行空间中运行程序,利用其它应用对该程序进行读取数据,因为都处于同一多开器中,权限对等,可以相互访问私有目录和内存空间等;
3、自身应用执行时,代码执行权限设置,开放私有目录给外部用户,用于测试。
三、实现
1、获取ROOT权限后,使用是最方便的,但是出于某些原因或者情况,可能没法获取ROOT权限,因此此方案不提。
2、多开器的方案需要定制化的设置,当然可以和第三种方案进行结合,效果也不错,唯一有个问题,要保证自身应用兼容多开器。
3、通过自身代码执行获取权限,关键在通过chmod函数实现.
String filesPath = getApplication().getFilesDir().getAbsolutePath();
String privatePath = filesPath.substring(0,filesPath.lastIndexOf('/'));
try {
Runtime.getRuntime().exec("chmod 777 " + filesPath);
Runtime.getRuntime().exec("chmod 777 " + privatePath);
} catch (IOException e) {
e.printStackTrace();
}
改了之后直接可以通shell权限进行访问。