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


    有个测试机里没有自带sqlite,记录了一下安装过程。以防遗忘

    (一)第一步: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

  • 相关阅读:
    docker中安装python3.8
    deeplearning系列(四)主成分分析与白化
    Aspect# 应用实例
    招兼职程序员(仅限北京)
    今天开始学Pattern Recognition and Machine Learning (PRML)书,章节1.2,Probability Theory 概率论(上)
    今天开始学Pattern Recognition and Machine Learning (PRML),章节1.2,Probability Theory (下)
    今天开始学Pattern Recognition and Machine Learning (PRML),章节1.1,介绍与多项式曲线拟合(Polynomial Curve Fitting)
    机器学习降维算法四:Laplacian Eigenmaps 拉普拉斯特征映射
    今天开始学Pattern Recognition and Machine Learning (PRML),章节1.6,Information Theory信息论简介
    Linux系统安装shapely报错:OSError: Could not find library geos_c or load any of its variants ['libgeos_c.so.1', 'libgeos_c.so']解决办法
  • 原文地址:https://www.cnblogs.com/maxiaodoubao/p/4798782.html
Copyright © 2020-2023  润新知