作者:5257wals_220 | 来源:互联网 | 2023-07-30 12:24
P{margin-bottom:0.21cm;}A:link{}anroid的彩信短信是使用sqlite数据库存储的。要做短彩方面的研发,比如添加,删除,修改,监听等,对数据库的数据表了
anroid的彩信短信是使用sqlite数据库存储的。要做短彩方面的研发,比如添加,删除,修改,监听等,对数据库的数据表了,字段了,数据了是要有一个比较清楚的了解的。android的厂商众多,而某些的模块的数据库,在一些重大历史版本更新中,也可能会有或多或少的变化,而同时各大厂商在做深度开发时,也往往会对原生态的数据库做一些添加和修改。这给我们开发带来了不少的麻烦。比如前段时间搞的新短信监听,在某些手机上,无法获得,某些手机上,又获得的不对,归根结底是android不同版本的数据库起了变化,而有些厂商为了通信的安全,也修改了数据库。
使用SQLite数据库浏览器,可以十分清楚的了解彩信数库。如下图,打开HTC的短信数据mmssms.db,得到数据表如下:
数据库中有HTC自已订制的数据表。打开sms数据表,如下,可以看到数据表内所有的字段:
消息数据库mmssms.db可以使用命令adbpull /data/data/com.android.providers.telephony/databases/mmssms.db获取,路径/data/data/com.android.providers.telephony/databases/mmssms.db中包括了几乎全部的手机使用到的数据库,如果需要通话或者其他,同样是可以的。
如果你无法使用 adbpull命令,需要先执行下adbremount,如果你连adbremount也不行,大约可能是没有ROOT的原因,有关ROOT,你懂的,不多说。如果确认了手机已经ROOT,adb remount却不能执行,可以试试下面的方法,先进入adbshell,然后:
shell@android:/$ su
shell@android:/ # mount -o rw,remount -t yaffs2/dev/block/mtdblock3 /system
shell@android:/ # chmod 777 /system
shell@android:/system/app # exit
shell@android:/ $ exit
如果adbremount成功了,担adbpull不行,还可以使用 chmod777修改databases,如果仍然无法成功。只能使用必杀技了。首先检查下手机是否ROOT,如果了没有ROOT,先ROOT,如果ROOT了,可以在手机上安装RE管理器,使用这个超级的文件管理工具,把所需要的数据复制到存储卡或者其他可用空间上,然后你懂的,把复制的文件移到电脑上,就可以研究了。
如果把所有的方法都试过了,仍然前路漫漫,困难重重,那就换一以手机试试吧。我觉得判断一个机子是否ROOT成功应该比判断一台机子是不是android智能机更有难度。
如果不巧你无法获得SQLite数据库浏览器,其实如果安装了android的ADK,相应的也会有一个叫sqlite3的命令行程序可以使用。
输入.help可以看到命令列表。
输入sql语句createtable user(username text primary key, password text); 建一张user表
输入sql语句insertinto user values("tianyou121", "123"); 插入一个用户。
输入sql语句select* from user; 可以查看user表.
输入sql命令是记得结尾的';'号。
下面的代码摘自一个网友的博客,了解开发工具实现的原理,对于学习编程来说,也很有用的。代码摘自http://blog.csdn.net/tianyou121/article/details/6104317
1#include
2 #include
3
4 #include
5
6int myfunc(void *p, int argc, char **argv, char **argvv)
7{
8 inti;
9 *(int*)p = 0;
10 for(i =0; i 11 {
12 printf("%s = %s ", argvv[i], argv[i] ? argv[i]:"NULL");
13 }
14 putchar('/n');
15 return 0;
16 }
17
18 int main(int argc,char *argv[])
19 {
20 sqlite3 *db;
21 char *err =0;
22 int ret =0;
23 int empty =1;
24
25 ret = sqlite3_open("student",&db);
26 if(ret !=SQLITE_OK)
27 {
28 fputs("/n",stderr);
29 exit(1);
30 }
31 ret =sqlite3_exec(db, "select * from user;", myfunc, &empty,&err);
32
33 if(ret != SQLITE_OK)
34 {
35 fputs(err,stderr);
36 fputs("/n",stderr);
37 sqlite3_close(db);
38 exit(1);
39 }
40
41 if(empty)
42 {
43 fputs("table student is empty/n",stderr);
44 exit(1);
45 }
46
47 sqlite3_close(db);
48
49 return 0;
50 }
保存文件为sqlite3_t.c和数据库文件放在一个目录下。
用gcc编译:gcc-o sqlite_t sqlite3_t.c -lsqlite3
记得加上-lsqlite3指定库文件,否则编译不通。
./sqlite_t
可以看到user表中用户信息。
可以使用多表联合查询来研究短彩信数据库,甚至修正数据库的错误,我的手机库有些网络彩信显示号码有误,通过联合查询可以比较方便的发现这些错误。
selecttable1.abc from canonical_addresses, where table1.xxx=table2.xxx;
参考:
http://blog.csdn.net/tianyou121/article/details/6104317
http://blog.sina.com.cn/s/blog_74dfa9f401017s69.html
免费短信测试:
http://www.dailysms.us/index.php?on=sms