码迷,mamicode.com
首页 > 移动开发 > 详细

【原】Android 设备,如何root,执行adb shell,查看设备中的数据库信息等

时间:2015-09-10 19:29:21      阅读:283      评论:0      收藏:0      [点我收藏+]

标签:

 

(一)第一步:root

使用百度一键root 等app,一键就可root,步骤略

 

(二) 

1、执行

adb shell
su 获得root权限
ls 查看当前目录

技术分享

 

cd data/data
ls

技术分享

 

选com.tencent.cm为例

cd com.tencent.cm/database
ls

 

技术分享

 

看到里边有一些 .db数据库文件

这时候,执行

sqlite3 tes_db.db

 

如果你的设备中有sqlite3,这句应该会执行成功,接下来就可以 执行select 语句了,

----------------------------------------------------------------下边就不用看了--------------------------------------------------------------

 

 

 

本文主要说明 一些小米和其他手机中没有sqlite3的情况,和我一样,执行会发现  

sqlite3:not found

技术分享

 

附  Android的每个版本对应的sqlite3 版本:

SQLite 3.8.4.3:
21-5.0-Lollipop
20-Android L Developer Preview
SQLite
3.7.11: 19-4.4-KitKat 18-4.3-Jelly Bean 17-4.2-Jelly Bean 16-4.1-Jelly Bean
SQLite
3.7.4: 15-4.0.3-Ice Cream Sandwich 14-4.0-Ice Cream Sandwich 13-3.2-Honeycomb 12-3.1-Honeycomb 11-3.0-Honeycomb
SQLite
3.6.22: 10-2.3.3-Gingerbread 9-2.3.1-Gingerbread 8-2.2-Froyo
SQLite
3.5.9: 7-2.1-Eclair 4-1.6-Donut 3-1.5-Cupcake
Note: Android SDK level links show where the android.database.sqlite package has changed. Where there is no link (e.g. SDK level
17), indicates no changes to that package.
Note: Here are some anomalies (list by no means exhaustive): SQLite
3.7.13 (instead of 3.7.11): LG Optimus L70 MS323 LGMS323|KOT49I.MS32310b (19-4.4-KitKat) LG Optimus G E975 LG-E975|JZO54K (16-4.1-Jelly Bean) LG G2 D802 LG-D802|JDQ39B (17-4.2-Jelly Bean)
SQLite
3.7.6.3 (instead of 3.6.22): LG Optimus Sol E730/myTouch E739/myTouch Q C800 (10-2.3.3-Gingerbread, GRJ22) LG Optimus Vu F100S/F100L (10-2.3.3-Gingerbread, RK39F) LG Optimus LTE TAG F120K/F120L (10-2.3.3-Gingerbread, GRK39F) LG Optimus LTE L-01D (10-2.3.3-Gingerbread, GRJ90) LG Optimus Net P690b (10-2.3.3-Gingerbread, GINGERBREAD) LG Prada KU5400 (10-2.3.3-Gingerbread, GWK74) LG Prada P940 (10-2.3.3-Gingerbread, GWK74) LG LU6200/SU640 (10-2.3.3-Gingerbread, GRJ90)s
SQLite
3.7.5 (instead of 3.7.4): Samsung Galaxy Note (15-GT-N7000|IML74K.ZSLPF) Samsung Galaxy SII (15-SC-02C|IML74K.OMMP4 and GT-I9100|IML74K.DXLP7) Samsung Galaxy S Duos (15-GT-S7562|IMM76I.S7562XXBMD6) Samsung Galaxy Tab 7.7 (15-GT-P6810|IMM76D.ZSLP8)
SQLite
3.7.0.1 (instead of 3.6.22): LG Esteem MS910 (10-2.3.3-Gingerbread, GSE-_v.05) AndroTab (8-2.2-Froyo, 1.0.7100.0385) GPLUS MUSN M500 (8-2.2-Froyo, FRG83G)
SQLite
3.6.23.1 (instead of 3.5.9): Motorola Backflip MB300 (7-2.1-Eclair, ERD79) Garmin-Asus nüvifone A10/A50/Garminfone (7-2.1-Eclair, ERE27) Note: adb command to get SQLite version only works on emulators and on devices with sqlite3 available: http://stackoverflow.com/a/3645800/444761

 

比较简单的获取对应版本的Sqlite的方法:

1、查看你手机的Andorid的版本,比如我的是 4.3

2、在eclipse中打开对应版本(很重要,否则会提示cannot locate sqlite3_enable_load_extensions)的模拟器(创建 如果没有)并且启动

3、在DDMS窗口的File Explorer面板下展开system > xbin

看到了sqlite3 了么?ok。点击右上角的软盘图标(pull a file from the device) 将其保存到其他位置

4、然后连接你的手机,打开控制台,输入adb shell。(什么?提示adb命令无效?那去配置环境变量吧)

5、然后查看一下提示符 如果是 # 那就不用管了,如果是 $ ,那么说明你需要获得root权限进行下面的操作

6、保持手机屏幕没有锁屏最好是常亮模式 在提示符下敲入 su 或者 su root,如果手机弹框提示是否允许获得root权限请选择 是。点击后发现 $ 变成 # 了。OK 可以进行下面的操作了

7、将先前保存其他位置的sqlite3 在DDMS面板中通过右上角手机图标(push a file onto the device) 将文件push到sdcard中,准确的是在/mnt/sdcard

8、然后在命令行敲入 cat /mnt/sdcard/sqlite3 > /system/xbin/sqlite3 复制文件(为什么不用mv?我也试过,不过报failed on /sdcard/test.mp3 - Cross-device link 错误)

9、ok,检查手机/system/xbin下多了一个sqlite3文件,不过还不能执行。

10、继续敲入 chmod 4755 /system/xbin/sqlite3

好的 大功告成。你可以试试敲入sqlite3试试了。可以看到可以正常使用了。

 

 

-------------------------------------------------------------如果你成功了,不用看下边-------------------------------------------------------------------------

首先,机器上没有对应android 4.3的avd,所以参考http://www.cnblogs.com/localhost/archive/2012/04/09/2439558.html的方法

下载了sqlite3文件包,地址为http://files.cnblogs.com/localhost/sqlite3_not_found.rar(事实证明他这个包的版本,我不能用,他这个版本太老了)

下这个:http://pan.baidu.com/share/link?shareid=534077&uk=839950715 

 

报了异常,因为直接push进 /system/xbin目录中了,没权限

技术分享

 

建一个临时文件夹

技术分享

 

push进这个临时文件夹中

技术分享

 

再将sqlite3从

  /mnt/sdcard/tmp

拷贝到

  /system/xbin 目录中,不会报错

cp /mnt/sdcard/tmp/sqlite3 /system/xbin/sqlite3 

注意:这一步可能报两种错,

第一种: cp not found,将命令换成cat /mnt/sdcard/tmp/sqlite3 > /system/xbin/sqlite3,

第二种:permission denied,说明/system是只读的,此时需要重新mount,改为可读写,然后继续拷贝

 

为什么除了sqlite3,还要push进去libncurse.so,因为缺乏依赖库,报了以下异常

技术分享

  

我的出现了第二种权限错误 ,执行mount操作

mount -o remount,rw /system

技术分享

技术分享

 

mount命令的解释在 http://blog.csdn.net/progbelief/article/details/6032518  

重点解释这条语句的作用

mount -o remount,rw -t yaffs2 /dev/block/mtdblock6 /system

  简单来说就是将块设备“/dev/block/mtdblock6” 挂载到/system目录上,挂载格式为yaffs2,这里主要的问题是“/dev/block/mtdblock6”是个什么东东。
  mtdblock就是手机 的flash存储设备,但是这个分块号则依机型的不同而有所变化,比如:Droid 的/system是挂载在/dev/block/mtdblock4上的,欧版的milestone 在/dev/block/mtdblock7上,港版的在/dev/block/mtdblock6上,HTC 系列的机器 则好像是在/dev/block/mtdblock3上。而现在有的教程 上写的命令不尽相同,也有这样写的

       mount -o remount,rw /dev/block/mtdblock3 /system

这多半上从HTC的论坛 上抄来的吧。
  但是有些人可能会说,我就是用这条命令成功了!(好吧,其实我也是的……汗,真是好险 ),甚至用任何分块号mtdblock3、mtdblock4、mtdblock11等等都能正常运行!那么这种错误命令为什么能成功呢?其实我们的命令参数“-o remount”其实自动 忽略了/dev/block/mtdblock? 这一段参数,只是简单的把/system重新挂载了一下而已。这条命令的偷懒不知道救回了多少人的爱机啊!

  好吧,说到这里大家应该明白了吧,虽然这条命令即使错误也可以成功,但你毕竟试图将一个错误的块挂载到/system上,悄有不慎肯定变砖。
  所以强烈建议大家在执行此命令时使用

     cat /proc/mtd

来检查下自己的JJ具体参数,再套用命令,
或者强烈建议新手使用

      mount -o remount,rw /system

这样的简化命令来代替上述命令使用!

 

 

 有了上边的解释, 获取你的设备mount信息,执行

mount

 

从屏幕列出来的mount数据中找到/system的mount信息,空格隔开的,第一列表示设备名,第二列表示目录,第三列表示文件系统,第四列表示权限。网上其他教程在这一步都直接列出了他们的命令,由于设备名和文件系统不一样,所以执行不成功

mount命令为:mount  -o  remount,rw  -t  第三列信息  第一列信息  /system

 如下图,注意看圈红的地方:


技术分享

mount成功后,再执行上面说的文件copy的步骤,然后就能copy到 /system/xbin目录下了

需要改下文件的权限,命令:

chmod 4755 /system/xbin/sqlite3

最后运行下,sqlite3,发现成功了吧

 

---------------------------------------------------------------你又成功了,我又没有----------------------------------------------------------

执行了mount,结果如下(没有system啊,但是上边的 mount -o remount,rw /system 执行成功了,所以也无所谓了 ):

技术分享

 

 

这时候执行sqlite3命令,出现了Illegal instruction错误

技术分享

 

这大概说明,我的sqlite3版本不对,下了个比较新的: http://pan.baidu.com/share/link?shareid=534077&uk=839950715

拷进去,改权限,执行

技术分享

成功

 

在sqlite的...> 状态退不出来的时候,一般是进入SQL数据语言模式了,此时输入个;(分号) 就可以退回到sqlite>状态

技术分享

 

.quit 退出 sqlite
.help 查看帮助
.schema 抓出数据库中所有的表
.tables 抓出数据库中所有的表和索引(
都可以使用LIKE来匹配)

 

 

附:

sqlite的官网

http://www.sqlite.org/lang.html

 

【原】Android 设备,如何root,执行adb shell,查看设备中的数据库信息等

标签:

原文地址:http://www.cnblogs.com/maxiaodoubao/p/4798782.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!