Debugging SQLite with adb
注意:下面所有操作假设设备已经具有root权限,否则没有权限读取这些数据 存储位置一个应用的db文件存储在 adb介绍Android Debug Bridge是Google提供的调试工具。
从上面的图也可以看出来,adb是client-server模式的。 只有在设备打开开发者选项中的调试模式的时候adb才会有作用 常见命令
常用Linux命令因为进入shell之后就是操作Android,由于Android是基于Linux内核,因此需要使用几个常用的Linux命令。
复制SQLite文件到本地具体命令如下: adb -d shell 'run-as your_package_name cat /data/data/your_package_name/databases/your_db_file_name > /sdcard/your_db_file_name'
adb pull /sdcard/your_db_file_name location_of_file_in_your_machine
具体说明可以参阅:Debugging sqlite database on the device 打开cmd,切换到 脚本实现复制上面的命令已经很简单了,但是如果以后想使用的话,就需要自己一点一点去改命令中的参数,但是如果可以使用代码实现输入对应的参数然后自动执行就好了,下面的代码就是实现了这个功能。 import java.util.Scanner;
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.File;
/** * @author jy.wang */
public class AdbPullDatabase{
public static void main(String args[]){
Scanner sin = new Scanner(System.in);
System.out.println("Please input adb directory:");
final String adbDirectory =sin.nextLine().trim();
System.out.println();
System.out.print("Please input package name:");
final String packageName = sin.nextLine().trim().split("s+")[0];
System.out.println();
System.out.print("Please input database name:");
final String dbName = sin.nextLine().trim().split("s+")[0];
System.out.println();
System.out.print("Please input database location:");
final String dbLocation = sin.nextLine().split("s+")[0];
System.out.println();
sin.close();
try{
final String changeDirectory = "cd /d "+adbDirectory;
final String saveToSdCardCommand = "adb -d shell 'run-as "+packageName+" cat /data/data/"+packageName+"/databases/"+dbName+" > /sdcard/"+dbName+"'";
final String pullDBCommand = "adb pull /sdcard/"+dbName+" "+dbLocation;
File file = new File("command.bat");
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
writer.write(changeDirectory,0,changeDirectory.length());
writer.newLine();
writer.write(saveToSdCardCommand,saveToSdCardCommand.length());
writer.newLine();
writer.write(pullDBCommand,pullDBCommand.length());
writer.close();
Runtime.getRuntime().exec("cmd /c start "+file.getAbsolutePath());
}catch(Exception e){
e.printStackTrace();
}
}
}
其中使用了bat批处理文件实现java调用多条cmd命令的技巧,具体可以参阅Java中调用多条cmd命令 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |