Android开发调试命令汇总
  R3jekIqJDwNw 2023年11月02日 92 0

本文用于记录工作中常使用调试命令和方法,持续更新中...

一、git & repo

git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 众所周知,Android源码库由若干个git仓库独立管理,为了更好的维护和管理整个Android源码,Google引入了repo工具——使用Python对git进行了一定的封装,简化了对多个Git版本库的管理。

1.1、repo

切换仓库分支

# xxx表示分支名(同下)
repo start --all xxx
#或者
repo forall -c "git checkout xxx"

还原所有仓库修改

#repo forall -c "[git command]"对所有仓库执行git命令,如下git reset --hard
repo forall -c "git reset --hard"

1.2、git

查看分支

#查看当前所在分支
git branch

#查看远程分支
git branch -r

#查看所有分支(本地+远程)
git branch -a

添加分支

#添加本地/远程分支,xxx表示分支名
git checkout -b xxx  //新建本地分支并切换至新分支
git push origin xxx  //新分支推至远程

删除本地/远程分支

git branch -d xxx  //删除本地分支
git push origin xxx  //更新至远程
#或者
git push origin --delete xxx

git lg 命令配置

git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

修改commit注释

#修改最近一次修改的commit
git commit --amend
git push origin HEAD:refs/for/xxx   //更新至远程分支

#配置commit模板
vim ~/commit_template
问题单号:
问题描述:
解决方案:
关联修改:
自测:

git config commit.template ~/commit_template

查看/查找指定提交

#查看当前分支所有提交记录
git lg 或git log

#按关键字key查找提交记录
git lg | grep -a "key"  //-a表示忽略关键字大小写

#查看指定文件提交记录
git lg [filePath]

#查看指定作者的提交记录
git lg --author=老王   //查找老王的提交记录

#作者分类查看提交记录
git shortlog

#定位某个文件某处修改提交记录
git blame [filePath] | grep "key"  //查看filePath文件中,关键字为key的提交记录

#清除所有未跟踪文件(慎用)
git clean -xdf

#gerrit提交
git push origin HEAD:refs/for/xxx   向远程分支XXX提交修改

二、Android相关命令

2.1 、adb

查看adb设备

adb devices

连接/断开连接,需在同一网段

adb connect [IP]  //连接指定IP的设备
adb disconnect  //断开连接

adb push文件至设备

adb root ; adb remount; adb push \\wsl$\Ubuntu-18.04\home\user\xxx\out\target\product\xxx\system\framework\services.jar system/framework/services.jar;adb shell sync

adb pull 获取设备文件

adb root;adb remount;adb pull /data/system/packages.xml C:\Users\user\Desktop

logcat

adb logcat >C:\Users\user\Desktop\adbLog\080801.log
#抓error级log
adb shell "logcat *:e"  >C:\Users\user\Desktop\adbLog\080801.log

#过滤指定TAG(hello) log
adb shell "logcat -s 'hello' "  >C:\Users\user\Desktop\adbLog\080801.log

#反过滤指定TAG(hello) log
adb shell "logcat |grep -v 'hello' "  >C:\Users\user\Desktop\adbLog\080801.log

重启设备

adb reboot

adb reboot recovery  //进入recovery模式

进入9008 download(高通)模式

adb reboot edl
  • 模拟发送广播
//模拟发送电池电量变化广播,并指定电池电量为100%,AC充电,电池温度为60°C
adb shell am broadcast -a android.intent.action.BATTERY_CHANGED --ei level 100 --ei plugged 1 --ei temperature 600

参数说明

参数

描述

-a action

指定intent操作,如android.intent.action.VIEW

-f flags

向setFlags()支持的intent添加标记。如FLAG_RECEIVER_INCLUDE_BACKGROUND:0x01000000

–es extra_key extra_string_value

以键值对的形式添加字符串数据

–ez extra_key extra_boolean_value

以键值对的形式添加布尔值数据

–ei extra_key extra_int_value

以键值对的形式添加整数型数据

–el extra_key extra_long_value

以键值对的形式添加长整型数据

–ef extra_key extra_float_value

以键值对的形式添加浮点型数据

2.2 、dumpsys

查看顶层activity

dumpsys activity activities | grep mResumedActivity

查看输入设备

dumpsys input

获取设备事件(如:按键,触摸,键盘等)

getevent

查看电池电量相关信息

查看电池状态

$dumpsys battery
Current Battery Service state:
  AC powered: true				//true表示使用AC电源
  USB powered: false			//false表示没使用USB电源
  Wireless powered: false	//false表示没使用无线充电
  Max charging current: 0	//最大充电电压
  Max charging voltage: 0	//最大充电电流
  Charge counter: 104430	//
  status: 4							//电池状态:1(UNKNOWN未知)、2(CHARGING充电)、3(DISCHARGING放电)、4(NOT_CHARGING未充电)、5(FULL满电)
  health: 2							//电池健康:1(UNKNOWN未知)、2(GOOD良好)、3(OVERHEAT过热)、4(DEAD损坏)、5(OVER_VOLTAGE过压)、6(UNSPECIFIED_FAILURE未指定故障)
  present: true						//true表示已安装电池
  level: 30								//当前电量百分比为30
  scale: 100							//最大电量百分比
  voltage: 3749					//当前电压3.749V
  temperature: 350				//当前电池问题35.0°C
  technology: Li-ion				//电池类型为锂电池

查看dumpsys battery 命令详解

$ dumpsys battery help
Battery service (battery) commands:
  help
    Print this help text.
  set [-f] [ac|usb|wireless|status|level|temp|invalid] <value>  //设置充电模式(电源|usb|无线),电池状态,电量,温度
    Force a battery property value, freezing battery state.
  	unplug [-f]										 //设置未充电模式
    Force battery unplugged, freezing battery state.
  	reset [-f]										//重置电池信息                            
    Unfreeze battery state, returning to current hardware values.

电池信息设置

cmd

fuction

dumpsys battery set level 1

设置电量为1%

dumpsys battery set temp 690

设置电池温度69°C(高于68°C高温阈值,会自动关机)

dumpsys battery set ac/usb/wireless 1

设置为AC/USB/Wireless充电

dumpsys battery set status 2

电池为充电状态

dumpsys battery unplug

设置断开充电(Android 6.0以上)

dumpsys battery reset

复位,恢复实际状态

  • 查看&设置屏幕亮度、角度
su
#查看屏幕亮度
cat sys/class/backlight/panel0-backlight/brightness  //panel0-backlight因平台而异
104  //亮度值0~255

设置屏幕亮度
echo 255 >sys/class/backlight/panel0-backlight/brightness

查看屏幕旋转角度
getprop persist.panel.orientation
设置屏幕旋转角度(0/90/180/270)
setprop persist.panel.orientation 90

监听设备存储

cmd

fuction

dumpsys devicestoragemonitor

显示设备存储信息

dumpsys devicestoragemonitor force-low -f

强制设置设备存储容量不足

dumpsys devicestoragemonitor force-not-low -f

强制取消设备存储容量不足

dumpsys devicestoragemonitor reset -f

强制复位设备存储配置

2.3、获取/设置屏幕密度

wm density  //查看屏幕密度
wm density 240  //设置屏幕密度

wm size  //查看屏幕分辨率
wm size 1920x1080  //设置屏幕分辨率

2.3、pm

查询系统所有package

pm list packages

禁用(diable)或启用(enable)package

pm enable com.android.provision

2.4、service

查看所有服务

service list

2.5、settings配置

#查看当前使用输入法:
$settings get secure default_input_method
com.android.inputmethod.pinyin/.PinyinIME

#设置指定输入法
settings put secure default_input_method com.android.inputmethod.pinyin/.PinyinIME

2.6、输入法

查看当前输入法ime命令详解

$ime
ime <command>:
  list [-a] [-s]
    prints all enabled input methods.
      -a: see all input methods
      -s: only a single summary line of each
  enable [--user <USER_ID>] <ID>
    allows the given input method ID to be used.
      --user <USER_ID>: Specify which user to enable. Assumes the current user if not specified.
  disable [--user <USER_ID>] <ID>
    disallows the given input method ID to be used.
      --user <USER_ID>: Specify which user to disable. Assumes the current user if not specified.
  set [--user <USER_ID>] <ID>
    switches to the given input method ID.
      --user <USER_ID>: Specify which user to enable. Assumes the current user if not specified.
  reset [--user <USER_ID>]
    reset currently selected/enabled IMEs to the default ones as if the device is initially booted w
    ith the current locale.
      --user <USER_ID>: Specify which user to reset. Assumes the current user if not specified.

$ime list -s com.android.inputmethod.pinyin/.PinyinIME

查看当前输入法

$ime list -s
com.android.inputmethod.pinyin/.PinyinIME

查看所有输入法

$ime list -a

2.7、模块化编译

基于Android 10为例

framework/base/core/res

```
###更新framework-res.apk###
#项目根目录mmm编译framework-res模块,如果有新增文件使用mmma
mmm frameworks/base/core/res/
#adb 更新设备framework-res.apk
adb root;adb remount;adb push \\wsl$\Ubuntu-18.04\home\userName\AOSP_An10\out\target\product\xxx\system\framework\framework-res.apk system/framework/framework-res.apk;adb shell sync;adb reboot
```

framework/base/core/jni

#编译framework/base/core/jni后更新system/lib/libandroid_runtime.so、system/lib64/libandroid_runtime.so 
mmm frameworks/base/core/jni/
$adb root;adb remount;adb push \\wsl$\Ubuntu-18.04\home\userName\AOSP_An10\out\target\product\xxx\system\lib\libandroid_runtime.so system/lib/libandroid_runtime.so
$adb push \\wsl$\Ubuntu-18.04\home\userName\AOSP_An10\out\target\product\xxx\system\lib64\libandroid_runtime.so system/lib64/libandroid_runtime.so;adb shell sync;adb reboot

frameworks/base/services/

### 更新services.jar###
#项目根目录mmm编译framework services模块,如果有新增文件使用mmma
mmm frameworks/base/services/
#adb 更新设备services.jar
adb root;adb remount;adb push \\wsl$\Ubuntu-18.04\home\userName\AOSP_An10\out\target\product\xxx\system\framework\services.jar system/framework/services.jar;adb shell sync;adb reboot

2.8 audit2allow 根据avc log生成selinux policy

//获得设备avc log
$adb shell "cat /proc/kmsg | grep avc" > avc_log.txt
$audit2allow -i avc_log.txt -p out/target/product/xxxvendor/etc/selinux/precompiled_sepolicy
#============= netd ==============
allow netd system_file:dir { add_name write };
allow netd system_file:file create;

#============= proc_net ==============
allow proc_net proc:filesystem associate;

#============= su ==============
allow su bt_firmware_file:filesystem getattr;
allow su firmware_file:filesystem getattr;

2.x、其他

查看ADJ

cat sys/module/lowmemorykiller/parameters/adj
cat sys/module/lowmemorykiller/parameters/minfree

三、Android.mk & AndroidManifest.xml

3.1、Android.mk

Android.bp或Android.mk禁用odex

//Android.bp
android_app {
    name: "Music",
    srcs: ["src/**/*.java"],
    resource_dirs: ["kotlin/res"],
    sdk_version: "current",
    product_specific: true,
    optimize: {
        proguard_flags_files: ["proguard.flags"],
    },
+	dex_preopt: {
+       enabled: false,
+	},
}

//Android.mk
+LOCAL_DEX_PREOPT := false

系统编译禁用dexpreopt,常用于模块化编译验证

build/make/core/board_config.mk
-  WITH_DEXPREOPT := true
+  WITH_DEXPREOPT := false

build/make/core/dex_preopt_config.mk
-    WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY ?= true
+    WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY ?= false
...
   # only. b/74209329
-  ifeq (,$(filter eng, $(TARGET_BUILD_VARIANT)))
-    ifneq (true,$(WITH_DEXPREOPT))
-      ifneq (true,$(WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY))
-        $(call pretty-error, DEXPREOPT must be enabled for user and userdebug builds)
-      endif
-    endif
-  endif
+#  ifeq (,$(filter eng, $(TARGET_BUILD_VARIANT)))
+#    ifneq (true,$(WITH_DEXPREOPT))
+#      ifneq (true,$(WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY))
+#        $(call pretty-error, DEXPREOPT must be enabled for user and userdebug builds)
+#      endif
+#    endif
+#  endif

Android.mk中"=",":=","?=","+="的区别

= 是最基本的赋值
:= 是覆盖之前的值
?= 是如果没有被赋值过就赋予等号后面的值
+= 是添加等号后面的值

Android.mk添加打印

a. $(info string) 打印正常输入信息
b. $(warning string) 打印警告信息
c. $(error string) 打印错误信息

3.2、AndroidManifest.xml

  • android:clearTaskOnLaunch="true" 表示是否从栈中清除掉除了根Activity之外的其他Activity。如果设置为true,每次启动应用时,都 只会看到根Activity,栈中的其他Activity就会被清除出栈。
  • android:stateNotNeeded="true" 是否 activity被销毁和成功重启并不保存状态。默认为false,若设为true,则当Activity重新启动时不会调用onSaveInstanceState()方法。
  • android:windowSoftInputMode="adjustPan" 该属性负责主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题。主要作用: 当有焦点产生时,软键盘是隐藏还是显示 是否减少活动主窗口大小以便腾出空间放软键盘 可以设置的值及其含义:
  • stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置。
  • stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示。
  • stateHidden:用户选择activity时,软键盘总是被隐藏。
  • stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的。
  • stateVisible:软键盘通常是可见的。
  • stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态。
  • adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示。
  • adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间。
  • adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分。 该属性设置的值必须是以上值的一个或多个组合,多个值用|分开: - android:windowSoftInputMode="stateVisible|adjustResize"
  • android:screenOrientation="unspecified" 该属性用来设置Activity在屏幕中显示的方向,可设置的值及其含义如下:
  • unspecified:默认值,由系统来选择方向。它的使用策略,以及由于选择时特定的上下文环境,可能会因为设备的差异而不同。
  • user:使用用户当前首选的方向。
  • behind:使用Activity堆栈中与该Activity之下的那个Activity的相同的方向。
  • landscape:横向显示(宽度比高度要大)。
  • portrait:纵向显示(高度比宽度要大)。
  • reverseLandscape:与正常的横向方向相反显示,在API Level 9中被引入。
  • reversePortrait:与正常的纵向方向相反显示,在API Level 9中被引入。
  • sensorLandscape:横向显示,但是基于设备传感器,既可以是按正常方向显示,也可以反向显示,在API Level 9中被引入。
  • sensorPortrait:纵向显示,但是基于设备传感器,既可以是按正常方向显示,也可以反向显示,在API Level 9中被引入。
  • sensor:显示的方向是由设备的方向传感器来决定的。显示方向依赖与用户怎样持有设备;当用户旋转设备时,显示的方向会改变。但是,默认情况下,有些设备不会在所有的四个方向上都旋转,因此要允许在所有的四个方向上都能旋转,就要使用fullSensor属性值。
  • fullSensor:显示的方向(4个方向)是由设备的方向传感器来决定的,除了它允许屏幕有4个显示方向之外,其他与设置为“sensor”时情况类似,不管什么样的设备,通常都会这么做。例如,某些设备通常不使用纵向倒转或横向反转,但是使用这个设置,还是会发生这样的反转。这个值在API Level 9中引入。
  • nosensor:屏幕的显示方向不会参照物理方向传感器。传感器会被忽略,所以显示不会因用户移动设备而旋转。除了这个差别之外,系统会使用与“unspecified”设置相同的策略来旋转屏幕的方向。
  • android:configChanges 用于捕获手机状态的改变时,通知程序调用onConfigurationChanged()函数。 取值范围及含义:
  • mcc:移动国家号码,由三位数字组成,每个国家都有自己独立的MCC,可以识别手机用户所属国家。
  • mnc: 移动网号,在一个国家或者地区中,用于区分手机用户的服务商。
  • locale: 所在地区发生变化。
  • touchscreen:触摸屏已经改变。(这不应该常发生。)
  • keyboard:键盘模式发生变化,例如:用户接入外部键盘输入。
  • keyboardHidden:用户打开手机硬件键盘
  • navigation:导航型发生了变化。(这不应该常发生。)
  • orientation:设备旋转,横向显示和竖向显示模式切换。
  • fontScale: 全局字体大小缩放发生改变
  • android:resizeableActivity="true" 该属性表示Activity是否可被设置为分屏模式。
  • android:resumeWhilePausing="true" 当前一个Activity还在执行onPause()方法时(即在暂停过程中,还没有完全暂停),允许该Activity显示(此时Activity不能申请任何其他额外的资源,比如相机)

四、linux相关命令

4.1、查看进程

查看进程

ps -A  //可接 | grep "xxx"过滤指定进程

查看进程下的子线程

ps -T -p pid

4.2、查看系统信息

查看CPU信息

cat /proc/cpuinfo

查看kernel信息

cat /proc/version

查看内存使用

cat /proc/meminfo
#或者
free -m

#检测内存情况
watch -d -n 1 free -m  //每隔1s监测内存变化
#等效于
while true;do free -m;sleep 1;done
#间隔500ms打印free -m日志
while true;do free -m;usleep 500000;done

查看进程内存映射表

可用作查看某应用是否使用某so

#已systemUI为例
ps -A	#查看进程列表
...
u0_a100       4044   534 5709508 104580 SyS_epoll+          0 S com.android.systemui:ui
...
cat /proc/4044/maps	#查看4044进程的内存映射表
...
7572c20000-7572c21000 r--p 00000000 fd:00 2988                           /system/lib64/libashmemd_client.so
7572c21000-7572c22000 --xp 00001000 fd:00 2988                           /system/lib64/libashmemd_client.so
7572c22000-7572c23000 rw-p 00002000 fd:00 2988                           /system/lib64/libashmemd_client.so
7572c23000-7572c24000 r--p 00003000 fd:00 2988                           /system/lib64/libashmemd_client.so
#第一列表示内存段的虚拟地址
#第二列表示执行权限
#第三列表示进程地址的偏移量
#第四列表示映射文件的主、次设备号
#第五列表示映射文件的节点号
#第六列表示映射文件路径
...

添加软链接

ln [-sf] 来源文件 目标文件 选项与参数: -s :如果不加任何参数就进行连结,那就是 hard link,至亍 -s 就是 symbolic link -f :如果 目标文件 存在时,就主动的将目标文件直接移除后再建立!

#ln -sf /tmp/folder    /tmp/folder/files_ln
#ls -al
drwxr-x--- 2 root root 4096 Apr 30 16:46 files
lrwxrwxrwx 1 root root   11 Apr 30 16:59 files_ln -> /tmp/folder

4.3 、文件处理

dos文件转unix文件

由于linux环境下编译dos格式文件经常出错,例如:

cd: $‘app/src/main/jni/capnproto/c++\r‘: No such file or directory

经检查由于文件格式为dos,需转为linux环境的Unix格式 方法一:通过notePad++ -->打开文件-->编辑-->文档格式转换-->转为Unix(LF) 方法二:dos2unix

#若未安装dos2unix,需先安装
sudo apt install dos2unix

#单个文件转换
sudo dos2Unix $filepath

#批量转换
for x in $(find . -type f);do sudo dos2unix $x $x;done

统计文件数

#统计当前路径文件个数(不包含子目录)
$ ls -l | grep "^-" | wc -l
11099

#统计当前路径文件个数(包含子目录)
$ ls -lR| grep "^-" | wc -l
11298

#统计当前路径文件夹/目录个数(包含子目录)
$ ls -lR | grep "^d" | wc -l
0

wc统计文件信息

wc命令用于统计指定文件中的字节数,字数,行数,并将统计结果显示输出。wc是word count的缩写。

cmd

fuction

-w,--words

统计字数,一个字被定义为有空白、跳格或换行字符分隔的字符串

-c,--bytes

统计字节数

-l,--lines

统计行数

-m,--chars

统计字符数

-L,--max-line-length

打印最长行的长度

--help

显示帮助信息

--version

显示版本

#下面使用wc命令统计text.txt文件信息,其内容如下:
$ cat text.txt 
qwer
123456
!@#$%^			#!!!注意这行没有换行符

#统计text.txt字数
$ wc -w text.txt 
3 text.txt

#统计text.txt行数
$ wc -l text.txt 
2 text.txt		#文件中只有两个换行符,故行数为2

#统计text.txt字符数
$ wc -m text.txt 
20 text.txt

#统计text.txt最长行的长度
$ wc -L text.txt 
6 text.txt

#统计text.txt字节数
$ wc -c text.txt 
20 text.txt

#查看图片文件字节内容
$ vi -b IRI_20230209_152813.jpg
:%!xxd

删除文件换行符

sed -i ':a;N;$!ba;s/\n/;/g' file

fallocate生成指定大小文件

#生成大小为5000M的test1文件
$ fallocate -l 5000m test1

查看apk签名指纹信息

解压apk后获得META-INF/CERT.RSA文件 在linux环境下使用keytool工具查看apk的签名指纹信息

$keytool -printcert -file test/CERT.RSA
Owner: EMAILADDRESS=xxx, CN=gd07729, OU=Android, O=Guide, L=Wuhan View, ST=Wuhan, C=CN
Issuer: EMAILADDRESS=xxx, CN=gd07729, OU=Android, O=Guide, L=Wuhan View, ST=Wuhan, C=CN
Serial number: 25a955023b8ab1e81f5a9493c45b71d029aa9de8
Valid from: Mon Jul 18 10:34:02 CST 2022 until: Fri Dec 03 10:34:02 CST 2049
Certificate fingerprints:
         SHA1: 8C:A0:99:B8:18:9A:AE:4A:q3:46:AF:AF:23:5C:10:16:60:AD:56:51
         SHA256: DB:4C:DE:D3:8F:9E:41:39:9F:25:EE:D6:65:5B:97:87:94:9B:9F:9F:6B:27:F4:C5:29:C3:FB:54:9C:4F:69:EE
Signature algorithm name: SHA256withRSA
Subject Public Key Algorithm: 2048-bit RSA key
Version: 3

或者通过签名证书文件获取 keytool -list -v -keystore $keystore_file [-storepass password]

查看SD卡文件类型(格式)

//查看所有分区
# df -h
Filesystem                    Size  Used Avail Use% Mounted on
tmpfs                         1.7G  0.9M  1.7G   1% /dev
tmpfs                         1.7G     0  1.7G   0% /mnt
tmpfs                         1.7G     0  1.7G   0% /apex
/dev/block/mmcblk0p50          11M   72K   11M   1% /metadata
/dev/block/dm-0               876M  873M  3.0M 100% /
/dev/block/dm-1               385M  384M  1.1M 100% /product
/dev/block/dm-2               500M  499M  1.8M 100% /vendor
/dev/block/mmcblk0p1          180M  103M   76M  58% /vendor/firmware_mnt
/dev/block/mmcblk0p35          27M   13M   14M  49% /vendor/dsp
/dev/block/mmcblk0p49          27M  1.2M   26M   5% /mnt/vendor/persist
/dev/block/mmcblk0p40          64M  832K   63M   2% /vendor/bt_firmware
/dev/block/mmcblk0p78          94M   44K   94M   1% /guideir
/dev/block/mmcblk0p79          44G   28G   16G  64% /data
/data/media                    44G   28G   16G  64% /mnt/runtime/default/emulated
/dev/block/vold/public:179,65  59G   14G   45G  24% /mnt/media_rw/9C33-6BBD
/mnt/media_rw/9C33-6BBD        59G   14G   45G  24% /mnt/runtime/default/9C33-6BBD

//可知SD卡9C33-6BBD挂载在文件系统/dev/block/vold/public:179,65
# blkid /dev/block/vold/public:179,65
/dev/block/vold/public:179,65: LABEL="disk" UUID="9C33-6BBD" TYPE="exfat" //即SD卡文件类型为exfat

4.4、sqlite数据库处理

使用sqlite3处理.db数据库文件(这里以android系统btopp.db文件为例),常用命令如下:

cmd

fuction

sqlite3 xxx.db

进入数据库命令行

sqlite3 -help

查看sqlite3命令帮助手册

#查看sqlite3命令帮助手册
$ sqlite3 -help
Usage: sqlite3 [OPTIONS] FILENAME [SQL]
FILENAME is the name of an SQLite database. A new database is created
if the file does not previously exist.
OPTIONS include:
   -ascii               set output mode to 'ascii'
   -bail                stop after hitting an error
   -batch               force batch I/O
   -column              set output mode to 'column'
   -cmd COMMAND         run "COMMAND" before reading stdin
   -csv                 set output mode to 'csv'
   -echo                print commands before execution
   -init FILENAME       read/process named file
   -[no]header          turn headers on or off
   -help                show this message
   -html                set output mode to HTML
   -interactive         force interactive I/O
   -line                set output mode to 'line'
   -list                set output mode to 'list'
   -lookaside SIZE N    use N entries of SZ bytes for lookaside memory
   -mmap N              default mmap size set to N
   -newline SEP         set output row separator. Default: '\n'
   -nullvalue TEXT      set text string for NULL values. Default ''
   -pagecache SIZE N    use N slots of SZ bytes each for page cache memory
   -quote               set output mode to 'quote'
   -separator SEP       set output column separator. Default: '|'
   -stats               print memory stats before each finalize
   -version             show SQLite version
   -vfs NAME            use NAME as the default VFS

#进入数据库命令行
$ sqlite3 btopp.db
SQLite version 3.22.0 2018-01-22 18:45:57
Enter ".help" for usage hints.
sqlite>

通过sqlite3 xxx.db进入数据库命令行,可对数据库进行增、删、改、查等操作

cmd

fuction

.help

查看数据库命名帮助手册

.tables

查看数据库所有表

select * from table1

查看数据表table1所有数据

update table1 set value=1 where id=14

更新table1表第14个数据的value值为1

insert into table1 values(10,'test',0)

在table1第10行插入test数据,值为0

#查看数据库命名帮助手册
sqlite> .help;
.archive ...           Manage SQL archives: ".archive --help" for details
.auth ON|OFF           Show authorizer callbacks
.backup ?DB? FILE      Backup DB (default "main") to FILE
.bail on|off           Stop after hitting an error.  Default OFF
.binary on|off         Turn binary output on or off.  Default OFF
.cd DIRECTORY          Change the working directory to DIRECTORY
.changes on|off        Show number of rows changed by SQL
.check GLOB            Fail if output since .testcase does not match
.clone NEWDB           Clone data into NEWDB from the existing database
.databases             List names and files of attached databases
.dbinfo ?DB?           Show status information about the database
.dump ?TABLE? ...      Dump the database in an SQL text format
                         If TABLE specified, only dump tables matching
                         LIKE pattern TABLE.
.echo on|off           Turn command echo on or off
.eqp on|off|full       Enable or disable automatic EXPLAIN QUERY PLAN
.excel                 Display the output of next command in a spreadsheet
.exit                  Exit this program
.expert                EXPERIMENTAL. Suggest indexes for specified queries
.fullschema ?--indent? Show schema and the content of sqlite_stat tables
.headers on|off        Turn display of headers on or off
.help                  Show this message
.import FILE TABLE     Import data from FILE into TABLE
.imposter INDEX TABLE  Create imposter table TABLE on index INDEX
.indexes ?TABLE?       Show names of all indexes
                         If TABLE specified, only show indexes for tables
                         matching LIKE pattern TABLE.
.limit ?LIMIT? ?VAL?   Display or change the value of an SQLITE_LIMIT
.lint OPTIONS          Report potential schema issues. Options:
                         fkey-indexes     Find missing foreign key indexes
.load FILE ?ENTRY?     Load an extension library
.log FILE|off          Turn logging on or off.  FILE can be stderr/stdout
.mode MODE ?TABLE?     Set output mode where MODE is one of:
                         ascii    Columns/rows delimited by 0x1F and 0x1E
                         csv      Comma-separated values
                         column   Left-aligned columns.  (See .width)
                         html     HTML <table> code
                         insert   SQL insert statements for TABLE
                         line     One value per line
                         list     Values delimited by "|"
                         quote    Escape answers as for SQL
                         tabs     Tab-separated values
                         tcl      TCL list elements
.nullvalue STRING      Use STRING in place of NULL values
.once (-e|-x|FILE)     Output for the next SQL command only to FILE
                         or invoke system text editor (-e) or spreadsheet (-x)
                         on the output.
.open ?OPTIONS? ?FILE? Close existing database and reopen FILE
                         The --new option starts with an empty file
.output ?FILE?         Send output to FILE or stdout
.print STRING...       Print literal STRING
.prompt MAIN CONTINUE  Replace the standard prompts
.quit                  Exit this program
.read FILENAME         Execute SQL in FILENAME
.restore ?DB? FILE     Restore content of DB (default "main") from FILE
.save FILE             Write in-memory database into FILE
.scanstats on|off      Turn sqlite3_stmt_scanstatus() metrics on or off
.schema ?PATTERN?      Show the CREATE statements matching PATTERN
                          Add --indent for pretty-printing
.selftest ?--init?     Run tests defined in the SELFTEST table
.separator COL ?ROW?   Change the column separator and optionally the row
                         separator for both the output mode and .import
.session CMD ...       Create or control sessions
.sha3sum ?OPTIONS...?  Compute a SHA3 hash of database content
.shell CMD ARGS...     Run CMD ARGS... in a system shell
.show                  Show the current values for various settings
.stats ?on|off?        Show stats or turn stats on or off
.system CMD ARGS...    Run CMD ARGS... in a system shell
.tables ?TABLE?        List names of tables
                         If TABLE specified, only list tables matching
                         LIKE pattern TABLE.
.testcase NAME         Begin redirecting output to 'testcase-out.txt'
.timeout MS            Try opening locked tables for MS milliseconds
.timer on|off          Turn SQL timer on or off
.trace FILE|off        Output each SQL statement as it is run
.vfsinfo ?AUX?         Information about the top-level VFS
.vfslist               List all available VFSes
.vfsname ?AUX?         Print the name of the VFS stack
.width NUM1 NUM2 ...   Set column widths for "column" mode
                         Negative values right-justify
 
#查看btopp.db数据库所有表
sqlite> .table;
android_metadata  btopp

#
sqlite> select * from btopp;
104|content://media/external/images/media/164@2474f4e|THUMB_IRI_20230209_112411.jpg||image/jpeg|0|DC:55:83:F1:78:AA|0|2|403|24526|0|1677289072126|0
105|content://media/external/images/media/70@42c897c|THUMB_IRI_20230209_110212.jpg||image/jpeg|0|DC:55:83:F1:78:AA|0|2|403|17183||1677289072126|0
106|content://media/external/images/media/166@d4d125a|vis-temp.jpg||image/jpeg|0|DC:55:83:F1:78:AA|0|2|403|217672||1677289072126|0
107|content://media/external/images/media/71@676c168|THUMB_VIS_20230209_110212.jpg||image/jpeg|0|DC:55:83:F1:78:AA|0|2|403|20951||1677289072126|0

持续更新中...

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

上一篇: XYSSL 下一篇: 过河卒--算法题
  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  zLxnEsMLk4BL   2023年11月19日   34   0   0 变量名字符串bclinux
R3jekIqJDwNw