Android源码浅析(四)——我在Android开发中经常使用到的adb命令,Linux命令,源码编译命令

我本身平时开发的时候积累的一些命令,但愿对你有所帮助java

adb是什么?:

adb的全称为Android Debug Bridge,就是起到调试桥的做用。经过adb咱们能够在IDE中调试Android程序,说白了就是debug工具。adb的工做方式比较特殊,采用监听Socket TCP 5554等端口的方式让IDE和Qemu通信,默认状况下adb会daemon相关的网络端口,因此当咱们运行Android Studio时adb进程就会自动运行。linux

adb环境

在咱们的sdk目录androidSdk\platform-tools下能够直接使用咱们的adbandroid

Android adb 源码修改 adb源码解析_Android adb 源码修改

可是若是你想像JDK同样能够全局使用,那就得配置一下adb的环境了,否则会爆adb找不到的错误,配置环境很简单,把咱们的路径加入到咱们的PATH路径下就行了,不会的能够搜索web

Log

若是只是纯应用开发的话,用到的log应该是比较多的,你输入shell

logcat

就会和你的IDE同样在刷log了,若是你想过滤,其实也好办服务器

logcat -s TAG

有时候程序忽然挂了,而个人IDE也没什么东西,可能抽风了,那怎么办?输入网络

logcat -s "AndroidRuntime"

若是你的log太多,想保存下来分析的话,你也能够这样app

logcat > c:\XX.txt

adb shell

shell下能作不少的事情,经常使用的是咱们Linux命令,咱们先来看几个简单的命令吧svg

su

su是获取权限的意思,这样就有权限查看系统文件了工具

cat

若是你想查看文本或者其余文本类,好比.java等文件就能够直接cat xxx.txt了,嗯,这些都比较简单,咱们想看一下链接的设备能够

adb devices

Android adb 源码修改 adb源码解析_adb android源码分析_02

有设备了,我想安装一个apk,那就很简单咯

adb install c:\\xxx.apk

若是卸载呢?卸载有不少种方式哈,你删掉也是其中一种,先说下正常卸载,那也是你安装的应用才能卸载,系统的应用是不让卸载的,卸载能够用

adb uninstall 包名

若是你想删掉一个系统文件,你会怎么作?首先进入system/app目录下对吧,而后输入

rm -rf xxx.apk

可是,你会看到这样的一个提示

Android adb 源码修改 adb源码解析_Android adb 源码修改_03

什么?只读文件?我明明已是#的root管理权限了啊,那我应该怎么作呢?

adb root

首选咱们获取一下root,而后

adb remount

切换一下remount模式,这样咱们就能够删掉了,那好,问题来了,咱们如何用命令启动一个Activity或者一个Servie呢?

首先看下启动Activity,假设我如今有一个程序的包名是com.lgl.test,而我想启动这个MainActivity,服务就是MainService那应该怎么写?首先你得进入shell模式,而后

am start -n com.lgl.test/.MainActivity

启动服务的话

am startservice -n com.lgl.test/.MainService

到这里,一些简单的应该是没什么问题的了

Linux

在shell模式下,你能够看一些权限

ls -l

你能够看到一行有两个root,他们是什么意思呢》左边的是用户组,右边的是用户群组,这个但是在源码编译中有些注意的哟

Android adb 源码修改 adb源码解析_android_04

可是你若是在linux中

Android adb 源码修改 adb源码解析_adb android源码分析_05

你能够看到不论是用户组仍是用户群组都是我是用户名,再实际开发中,确定是咱们的文件拥有的权限要大一些,那这些怎么改呢?

左边的能够这么改

sudo chown -R 用户名 文件名

右边

sudo chown -R root:用户名 文件名

这里恰好说到权限的问题,若是你想要一个权限是可读可写的话,你能够这样设置

sudo chmod 777 文件

还有一些简单的,我就直接贴出来

//移动
mv
//复制
cp
//重启
reboot
//咱们想重启也能够adb reboot
//建立文件
mkdir
//压缩
tar

这些都是比较常见的了,咱们怎么这么快就扯到了Linux?咱们的adb还有不少命令没说呢,再来看下咱们的的push和pull

想取的系统的文件的文件的话,就须要pull了

adb pull /system/app/phone.apk c:\\

这里我就把这个apk放在了c盘,若是你想把一些文件给塞进去系统,你能够

adb push c:\\phone.apk /system/app/

对了,ls是咱们的清单,显示当前目录的文件夹,在Dos下是dir,若是我想在一个目录项回退到上一个目录,能够

cd ..

Android adb 源码修改 adb源码解析_android_06

若是想回退到上上个目录,能够

cd ../..

Android adb 源码修改 adb源码解析_adb android源码分析_07

若是你蛋疼的想回到上上上个目录,那就以此类推了

cd ../../..

好的,咱们再来看下剩下的adb命令

adb命令

这部分我也不是很经常使用

显示系统中所有Android平台:

android list targets

2.显示系统中所有AVD(模拟器)

android list avd

3.建立AVD(模拟器)

android create avd --name 名称 --target 平台编号

4.启动模拟器

emulator -avd 名称 -sdcard ~/名称.img (-skin 1280x800)

5.删除AVD(模拟器)

android delete avd --name 名称

6.启动DDMS

ddms

7.模拟按键

input keyevent 5

这些就差很少了,有些不行的话,能够尝试在shell模式下进行

编译命令

编译源码的命令你们按照流程走下去应该就能够了,首先熟悉一下linux命令,先从下载源码开始吧

repo init xxx

初始化一下你的空间,这个通常就是闭门服务器的地址,而后同步

repo sync

同步完以后通常有u-boot会先编译u-boot

cd u-boot/

make 产品代码

make

这里三个命令,而后编译完成以后,就有一个uboot.img的镜像了,而后编译内核(Kernel)

cd kernel/

make 产品名

这里每家的芯片都不同哈,详见编译文档,编译以后咱们回到主页面

make -j8

若是想保存日志文件

repo sync > 123.txt

make是编译,后面带的参数是什么呢?是启动的核数,这个你能够根据本身的电脑配置来,编译完成以后

source build/envsetup.sh

lunch

你能够输入lunch选择你要编译的类型

Android adb 源码修改 adb源码解析_Android adb 源码修改_08

最后执行一下

./mkimage.sh

就能够生成固件了

m mm mmm

关于这三个的差异,其实就是

m : 编译所有

mm : 编译当前模块

mmm : 编译指定路径

上述有些可能不对称,平台之间仍是有些差别性的

monkey

咱们调试的时候须要用到monkey 的话能够执行

//对应用作压力测试1W次
monkey -p 包名 --pct-syskeys 0 -v 100000
//对整个系统进行压力测试1000W次
monkey --pct-syskeys 0 -v 10000000

大致的应该是这些经常使用的吧,若是有后续的话会继续补充,欢迎各位评论