安卓开发常用命令
一、工程编译命令
1) 全编译
$ source build/envsetup.sh
$ lunch
$ select one project
$ make -j8
a) 单独编译system.img/boot.img/userdata.img/lk
$ make systemimage / make bootimage / make userdataimage/ make aboot
b) 单独打包system
$ makesnod
c) 编译sdk
$make sdk
d) 编译cts
$make cts
e) 清空编译
$ make installclean
$ make clean
2) 编译模块1
$ source build/envsetup.sh
$ lunch
$ select one project [如图1]
$ make [module name] -j8
[module name]: 请参考Android.mk中的Module Name
3) 编译模块2
$ source build/envsetup.sh
$ lunch
$ select one project [如图1]
$ mmm [module patch]
或
$ cd [module path] ; mm
[module patch]: 要编译模块Android.mk所在目录
二、Linux常用命令
命令 |
描述 |
举例 |
dmesg |
输出内核的调试信息,作用和cat /proc/kmsg一样 |
|
grep |
在*路径下查找字段"to find something" |
grep -rn “to find something” * |
|
在当前目录下查找"to find something" |
grep -rn “to find something” ./ |
|
在当前目录下查找PeopleActivity 并显示 |
grep PeopleActivity . -rn --color |
find |
在当前目录下查找aaa.java文件 |
find ./ -name "aaa.java" |
|
在./frameworks 目录下的java文件中查找 hello字符串 |
find ./frameworks/ -name "*.java" | xargs grep -rn "hello" |
cd |
进入目录test |
cd test |
|
后退一步 |
cd .. |
|
回上一次所在的目录 |
cd - |
|
回当前用户的宿主目录 |
cd ~ 或 cd |
ls |
显示当前目录下的文件 |
ls |
|
列出包含隐藏文件 |
ls -a |
|
列出当前目录下文件的详细信息 |
ls -l |
gedit |
打开文件a.txt查看内容 |
gedit a.txt |
cat |
查看文件内容--例如查看ubuntu 版本 |
cat /etc/issue |
|
查看文件内容--例如查看 cpu 信息 |
cat /proc/cpuinfo |
ps |
查看当前有哪些进程 |
ps -A |
top |
查看CPU占用率最高的应用 |
top -m 10 |
kill |
强制杀死一个进程 |
kill -9 进程号 |
chown |
把 /home 的属主改成 root 用户 |
chown chown root /home |
|
杀死一个进程 |
kill 进程号 或 killall 进程名 |
chgrp |
把 /home 的属组改成 root 组 |
chgrp chgrp root /home |
chmod |
改权限--例如赋予超级权限 |
chmod 777 文件名 |
mkdir |
创建文件夹test |
mkdir test |
cp |
复制文件a.apk到当前目录下的apps文件夹里 |
cp a.apk ./apps/ |
|
复制文件夹a到root目录下 |
cp -r /tmp/a /root/a |
rm |
强制删除a.log文件 |
rm -f a.log |
|
强制删除文件夹A |
rm -rf A |
mv |
在当前目录下改名 |
mv 文件名 新名称 |
|
移动相对路经下的文件到绝对路经下 |
mv 文件名 /路径/文件名 |
tar |
解压a.tar.gz |
tar -zxvf a.tar.gz |
|
将A打包到a.tar.gz |
tar -zcvf a.tar.gz A |
zip |
zip -mr [zipfile] srcfile |
|
unzip |
unzip [zipfile] |
|
shutdown |
电脑在100分钟后关机 |
sudo shutdown +100 |
apt-get install |
安装软件samba |
sudo apt-get install samba |
nautilus |
命令行中图形打开home目录 |
nautilus home |
su |
切换到root |
|
passwd |
为用户创建密码 |
passwd 用户名 |
|
删除用户密码也能登陆 |
passwd -d 用户名 |
uname |
查看内核版本 |
uname -a |
lsusb |
查看 usb 设备 |
|
printenv |
显示环境变量--例如查看HOSTNAME |
printenv HOSTNAME |
touch |
已存在文件的时间标签更新为系统当前的时间 |
touch a |
|
创建新的空文件 |
touch a |
locate |
查找文件name_file的路径 |
locate name_file |
ssh |
ssh连接到远程主机 |
ssh [email protected] -p 22 |
scp |
用于Linux之间复制文件和目录,基于ssh的cp。需要根据权限输入密码 |
把本地文件复制到远程: |
|
|
scp local_file remote_username@remote_ip:remote_folder |
|
|
从远程复制文件到本地: |
|
|
scp remote_username@remote_ip:remote_file local_file |
sed |
处理文本文件工具 |
将文件转换为Unix格式: |
|
|
$ sed 's/.$//' filename |
export |
设置或显示环境变量 |
列出当前环境变量 |
|
|
export -p |
|
|
定义环境变量 |
|
|
export MYENV |
pwd |
输出当前工作目录 |
|
ftp |
ftp客户端 |
连接ftp服务器 |
|
|
ftp ftp.picovr.com |
crontab |
计划任务 |
指定某用户的计划任务: |
|
|
crontab -u pico file |
free |
显示系统当前内存的使用情况,包括已用内存、可用内存和交换内存的情况 |
按照GB显示 |
|
|
free -g |
top |
显示系统中占用资源最多的一些进程,默认以cpu占用率排序 |
显式某个特定用户的进程 |
|
|
top -u mysql |
df |
显示文件系统的磁盘的使用情况 |
人类可读方式显示本地磁盘使用情况: |
|
|
df -hl |
|
|
显示文件系统类型 |
|
|
df -T |
killall |
终止相关进程 |
killall httpd |
mount |
挂在一个文件系统 |
mkdir /u01 |
|
|
mount /dev/sdb1 /u01 |
ifconfig |
显示网口配置 |
ifconfig -a |
whereis |
显示某个命令的位置 |
whereis ls |
whatis |
显示某个命令的描述 |
whatis ls |
man |
查看某命令的帮助 |
man crontab |
tail |
显示文件的最后若干行 |
显示文件的最后100行: |
|
|
tail -n 100 a.conf |
|
|
监视文件变化: |
|
|
tail -f a.conf |
less |
不加载整个文件的前提下显示文件内容,一般用于查看大型日志文件 |
less system.log |
yum |
依赖软件源的包管理工具,自动解决依赖 |
安装httpd包 |
|
|
yum install httpd |
|
|
更新httpd包 |
|
|
yum update httpd |
|
|
卸载httpd包 |
|
|
yum remove httpd |
rpm |
rpm包管理工具 |
使用rpm安装apache |
|
|
rpm -ivh httpd-2.2.3-22.0.0.e15.i386.rpm |
|
|
使用rpm更新apache |
|
|
rpm -uvh httpd-2.2.3-22.0.0.e15.i386.rpm |
|
|
卸载apache |
|
|
rpm -ev httpd |
date |
查看和设置系统时间 |
查看系统时间 |
|
|
date |
|
|
设置系统时间 |
|
|
date -s "04/06/2018 12:12:12" |
wget |
下载工具 |
wget http://picovr.com/index.html |
curl |
一种根据url的传输文件的工具,支持上传和下载 |
打开某资源: |
|
|
curl http://www.picovr.com |
|
|
保存资源到文件 |
|
|
curl -o index.html http://www.picovr.com |
三、Adb/调试常用命令
1) Eng或userdebug版本更改系统具备可写属性
$ adb root
$ adb disable-verity -- 非必需
$ adb remount
2) 重启设备
$ adb reboot --重启设备
$ adb reboot bootloader –进入fastboot下载模式
3) 和PC端互传文件
$ adb push [本地路径] [设备里的路径/文件名]
$ adb pull [设备里的路径/文件名] [本地路径]
4) 安装或卸载应用
$ adb install -r [apk路径]
$ adb uninstall [包名] 或 adb shell rm -rf [设备里路径]
5) 登录设备shell
$ adb shell
6) 抓取kernel log信息
$ adb shell dmesg
$ adb shell cat /proc/kmsg
7) 抓取logcat log信息
$ adb logcat -v time --打印到控制端
$ adb logcat -v time > logcat.log --将log输出到文件中
$ adb logcat | grep "^..zhansan" --打印TAG为zhangsan的信息
$ adb logcat -v time -s zhansan --打印TAG为zhangsan的信息
$ adb logcat *:W --打印所有优先级高于W的log
$ adb logcat -c --清空已存在日志
8) Monkey测试命令
$ adb shell monkey -p com.android.dialer -p com.android.contacts -v50000
--Monkey测试Dialer模块
9) Am命令启动/关闭应用/服务或发广播
$ adb shell am start -n packname/activityname --启动某个activity
$ adb shell am start -ncom.android.music/om.android.music.MusicBrowserActivity
--打开音乐播放器
$ adb shell am start -a android.intent.action.VIEW -d http://www.baidu.com
--打开某个网页; 这里-a表示动作,-d表述传入的数据,还有-t表示传入的类型
$ adb shell am force-stop
$ adb shell am startservice <服务名称> --启动某个服务
$ adb shell am startservice -ncom.android.music/com.android.music.MediaPlaybackService (这里-n表示组件)
$ adb shell am startservice -a com.smz.myservice (这里-a表示动作,就是你在Androidmanifest里定义的)
$ adb shell am broadcast -a <广播动作> --发送一个广播
$ adb shell am broadcast -a com.smz.mybroadcast
$ adb shell am kill package --杀死进程
10) 网络抓包命令
$ adb shell tcpdump -i usb0 -s0 -w /data/local/tmp/`date"+%Y%m%d%H%M%S"`.pcap
$ adb shell tcpdump -i usb0 -s0 -vv tcp port 80 and host hostname
11)svc命令 -- 控制电源、数据流量、wifi、usb的开关状态
$ adb shell svc wifi enable --打开wifi
12)发送HOME/BACK按键事件(其他事件雷同)
$ adb shell input keyevent HOME
$ adb shell input keyevent BACK 或$ adb shell input keyevent 4
13) 设置/获取系统属性
$ adb shell setprop [prop name] [prop name]
$ adb shell getprop [prop name]
14) 监听系统属性的改变当系统属性发生改变时输出改变的系统属性
$ adb shell watchprops
15) start启动服务 或 stop停止服务
$ adb shell setprop ctl.start
$ adb shell setprop ctl.stop
16) 内存阈值与应用内存使用状况
$ adb shell cat /sys/module/lowmemorykiller/parameters/minfree
$ adb shell procmem
$ adb shell dumpsys meminfo
$ adb shell cat /proc/
$ adb shell dumpsys procstats
$ adb shell procrank
17) dumpsys命令
$ adb shell dumpsys -l --当前运行的服务列表
$ adb shell dumpsys
$ adb shell dumpsyspackage -m [packagename] --查看包信息
$ adb shell dumpsys activity activities --查看activity的堆栈信息
$ adb shell dumpsys SurfaceFlinger
--查看SurfaceFlinger状态,获取显示屏信息,当前显示的应用等
$ adb shell dumpsys cpuinfo
$ adb shell dumpsys meminfo --查看内存状态
18) screencap 截屏 / screenrecord 录屏
$ adb shell screencap -p /mnt/sdcard/screen.png
$ adb shell screenrecord --time-limit 10 --bit-rate 6000000/sdcard/demo.mp4
19) strace 用于跟踪系统调用
$ adb shell strace -f -p
20) debuggerd 用于输出进程的native堆栈
$ adb shell debuggerd -b
21) 查看连接的终端列表
$ adb devices
$ adb -s [指定设备] [cmd]
22) adb连接终端(远程/ Wifi调试真机)
$ adb tcpip 5555
$ adb connect 192.168.16.222
$ adb connect 192.168.16.222:5555
23) 命令方式开关屏
$ adb shell echo mem>/sys/power/state
$ adb shellecho on>/sys/power/state
24) 串口方式重新挂在/system目录获取读写权限
$ mount -oremount,rw /system
25) 获取设备Mac地址
$ adb shell cat /sys/class/net/wlan0/address
26) wm命令
$ adb shell wm size --获取设备屏幕分辨率
$ adb shell wm size 720x1080 --设置分辨率为720x1080
$ adb shell wm size reset--恢复屏幕尺寸
$ adb shell wm density --获取设备密度
$ adb shell wm density 200 --设置设备密度为200
$ adb shell wm density reset --恢复设备密度
$ adb shell wm overscan 200,300,400,500
--让界面在靠左200, 靠上300,靠右400 , 靠下500的显示区域显示
27) pm包管理
$ adb shell pm list packages --列出所有app的包名
$ adb shell pm path
$ adb shell pm clear
$ adb shell pm disable [packagename] --禁用应用
$ adb shell pm enable [packagename] --启用应用
28) ADB Forward
$ adb forward tcp:6100 tcp:7100
--设备和PC端之间直接使用Socket进行通信
29) settings命令 --查看、更改SettingsProvider数据库的值
$ adb shell settings get global airplane_mode_on --获取飞行模式状态
$ adb shell settings put global captive_portal_server neo.picovr.com
--设置captive..值
30) content命令 --对contentprovider数据集进行增删改查操作
$ adb shell content query --uri content://media/external/images/media
--查看系统media数据库里存放的图片记录
31) aapt命令 (SDK下的build-tools目录里)
查看一个apk包含的资源类信息,比如版本号,权限等
32) 高通平台“开关bcl”
$ adb shell echo -n disable > /sys/devices/soc/soc:qcom,bcl/mode
$ adb shell echo -n enable > /sys/devices/soc/soc:qcom,bcl/mode
33) Pico自有“更新user版本system分区内容(例如高通配置文件)”
$ adb shell setprop picovr.factorytest.cmd "remount /system"
$ adb shell setprop picovr.factorytest.cmd "cp/sdcard/svrapi_config.txt /system/vendor/etc/qvr/svrapi_config.txt"
34) 查看高通QVRService的信息(6Dof 版本等)
$ adb shell "qvrservicetest -u P
35) 高通平台CPU/GPU信息查看
adb shell "cat/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies" 查看CPU0可运行的频率值
adb shell "cat/sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq" 查看CPU0运行频率的最小值
adb shell "cat/sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq" 查看CPU0运行频率的最大值
adb shell "cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor" 查看CPU0当前使用的调节器
adb shell "echo 300000 >/sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq" 设置CPU0运行频率的最小值
adb shell "echo 1593600 >/sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq" 设置CPU0运行频率的最大值
adb shell "echo 'performance'>/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor" 修改CPU0的调节器,默认为interactive,performance就是运行在允许频率范围的最大
adb shell "cat/sys/class/kgsl/kgsl-3d0/devfreq/available_frequencies" 查看GPU的可运行频率值
adb shell "cat /sys/class/kgsl/kgsl-3d0/devfreq/max_freq" 查看GPU运行频率的最大值
adb shell "cat/sys/class/kgsl/kgsl-3d0/devfreq/min_freq" 查看GPU运行频率的最小值
adb shell "cat/sys/class/kgsl/kgsl-3d0/devfreq/governor" 查看GPU当前使用的调节器
adb shell "echo 624000000 > /sys/class/kgsl/kgsl-3d0/devfreq/max_freq"设置GPU运行频率的最大值
adb shell "echo 180000000 >/sys/class/kgsl/kgsl-3d0/devfreq/min_freq" 设置GPU运行频率的最小值
adb shell "echo 'performance'>/sys/class/kgsl/kgsl-3d0/devfreq/governor" 设置GPU当前使用的调节器
以下为8998平台不停打印cpu0~cpu7的频率和温度的脚本,不同平台需要修改后才能用,主要是温度节点有区别
adb shell "while true;do echo cpu0;cat/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq;cat/sys/class/thermal/thermal_zone8/temp;echo cpu1;cat/sys/devices/system/cpu/cpu1/cpufreq/scaling_cur_freq;cat/sys/class/thermal/thermal_zone9/temp;echo cpu2;cat/sys/devices/system/cpu/cpu2/cpufreq/scaling_cur_freq;cat/sys/class/thermal/thermal_zone10/temp;echo cpu3;cat/sys/devices/system/cpu/cpu3/cpufreq/scaling_cur_freq;cat/sys/class/thermal/thermal_zone11/temp;echo cpu4;cat /sys/devices/system/cpu/cpu4/cpufreq/scaling_cur_freq;cat/sys/class/thermal/thermal_zone12/temp;echo cpu5;cat/sys/devices/system/cpu/cpu5/cpufreq/scaling_cur_freq;cat/sys/class/thermal/thermal_zone13/temp;echo cpu6;cat/sys/devices/system/cpu/cpu6/cpufreq/scaling_cur_freq;cat /sys/class/thermal/thermal_zone14/temp;echocpu7;cat /sys/devices/system/cpu/cpu7/cpufreq/scaling_cur_freq;cat/sys/class/thermal/thermal_zone15/temp;echo gpu;cat/sys/class/kgsl/kgsl-3d0/devfreq/cur_freq;cat/sys/class/thermal/thermal_zone18/temp;echo HW Status 0;cat/sys/class/thermal/cooling_device0/cur_state;echo HW Status 1;cat/sys/class/thermal/cooling_device1/cur_state;echo PowerCore;cat/d/clk/pwrcl_clk/measure;echo PerformaceCore;cat /d/clk/perfcl_clk/measure;echomem;cat /sys/kernel/debug/clk/bimc_clk/measure;sleep 1;echo =====;done"
四、Git操作命令
克隆服务器项目
git clone ….
查看某項目的當前分支
git branch
查看某項目的所有分支
git branch -a
切換某個到分支
git checkout ca03(分支名)
提交代码到服务器
git push origin master:master(主分支名:分支名)}
//提交代码到服务器
{
gitk 比较修改前,后的代码
git add . 把代码到本地
git commit -a 提交到本地的git库
进入编辑界面之后按i进入编辑模式
编辑完成之后按ESC退出编辑模式
i 进入编辑模式,编写此次提交的内容
:wq 保存并退出编辑模式
git fetch origin 下载服务器最新代码
git rebase -i origin/ca03(分支名) 更新服务器代码到本地合并
:wq 保存退出
假设合并出错,修改android工程后
git add .
git rebase –continue
:wq
提交合并后的代码到服务器
git push origin ca03:ca03(主分支名:分支名)
}
将android工程与git关联
cd到项目根目录
git init
git status
git add .
git commit -m “初始化仓库”
git commit --amend --如果需要重新修改提交信息时才用
gitk
五、SVN操作命令
SVN一般安装“TortoiseSVN”图形工具使用比较方便
1) 下载主线上的代码:
svn co svn://192.168.1.122/mtk6572_18 mtkbaseline_6572
svn co svn://192.168.1.122/mt6582_trunk_v16 mtkbaseline_6582
2) 添加新文件 ,后面还是需要commit命令把文件上传
svn add test_add.java
svn commit -m "add file test_add.java" test_add.java
3) 提交文件
svn commit -m “提交当前目录下的全部在版本控制下的文件“ *
svn commit -m “提交我的测试用test.php“ test.php
4) 更新文件
svn update
svn update -r 修正版本 文件名
svn update 文件名
svn update <- 后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本
svn update -r 200 test.cpp <- 将版本库中的文件 test.cpp 还原到修正版本(revision)200
svn update test.php <- 更新与版本库同步。 提交的时候提示过期冲突,需要先 update 修改文件, 然后清 除svn resolved,最后再提交commit
5) 删除文件
svn delete test.php
svn ci -m “删除测试文件test.php”
6) 如何自动添加目录下的所有文件,并上传添加和修改后的所有文件:
svn add * --force
svn commit -m "xxxxxxxxxxxxx"
六、VI常用命令
1) 进入vi的命令
vi filename //打开或新建文件,并将光标置于第一行首
vi +n filename //打开文件,并将光标置于第n行首
2) 屏幕翻滚类命令
Ctrl+u:向文件首翻半屏
Ctrl+d:向文件尾翻半屏
Ctrl+f:向文件尾翻一屏
Ctrl+b;向文件首翻一屏
3) 最后行方式命令
:w : 保存当前文件
:e filename: 打开文件filename进行编辑
:x: 保存当前文件并退出
:q: 退出vi
:q!: 不保存文件并退出vi
:wq 保存退出