Linux命令:

  • touch 创建文件

touch framework/base/Android.mk // 创建文件夹

  • mkdir 创建文件夹
  • cat 显示文件所有内容(合并文件)

cat aa文件 bb文件(可以多个) > 合并到的aabb文件

cat framework/base/Android.mk // 查看文件

  • echo // 输出

echo hello world > framework/base/Android.mk //写入文件

export PATH=$PATH:/opt/android-sdk/tools //.bashrc配置环境变量 man echo // 查看echo命令

  • grep [-选项] '搜索内容串' 文件名
-a :将 binary 档案以 text 档案的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-n    显示匹配行及行号
-i    忽略大小写
-v    显示不包含匹配文本的所有行(相当于求反)
grep    搜索内容串支持正则表达式
  • find 路径 -name 文件名

find ./ -name framework.jar

find -name ".mk" | xargs grep -r "PicoTts" //将find找到的每一个文件的名字用 grep -r来执行一下

  • cp from_path to_path //拷贝文件

cp -r jdk1.7.0_79 /home/pansen/ // 复制

  • mv from_path to_path // 重名名文件(当前目录下)
  • mv from_path to_path // 移动文件
  • tar -cvf test.tar 1.txt 2.txt 3.txt //打包
-c    生成档案文件,创建
-v    显示进度
-f    指定档案文件名称
  • gzip test.tar //压缩
  • gzip -d //解压缩
  • tar -zcvf test.tar.gz 需要压缩的文件.. //打包压缩(常用)
  • tar -zxvf text.tar.gz //解压缩 -C指定路径 //解压缩的路径
  • zip -r packages.zip packages //压缩
  • less /etc/passwd //查看长文件
  • chmod u+x helloworld //添加可执行权限
  • chmod 755 sub.tar //修改权限
  • pwd // 返回当前目录路径
  • source .bashrc //配置全局变量
  • nautilus . // 打开图形化页面
  • ln -s 源文件 链接文件 软链接
  • ln 源文件 链接文件 硬链接
  • tree
  • ctrl + z //可以将一个正在前台执行的命令放到后台,并且暂停
  • jobs // 查看当前有多少在后台运行的命令
  • fg // 将后台中的命令调至前台继续运行
如果后台有多个命令,可以用fg %jobnumber将选中的命令调出
    %jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
  • bg // 将一个在后台暂停的命令,变成继续执行
如果后台有多个命令,可以用bg %jobnumber将选中的命令调出
    %jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
  • > // 重定向
  • >> // 追加
  • ^ // 占位符,搜索xx开头的
  • $ // 占位符,搜索xx结尾的
  • * // 表示一个和多个
  • ? // 表示一个
  • [123] // 可有可无
  • \ // 转义
  • | // 管道:一个命令的输出可以通过管道做为另一个命令的输入
  • & // 这个用在一个命令的最后,可以把这个命令放到后台执行
  • cd - // 可进入上一次所在的目录
  • cd ~ // 快速回到home目录
  • -r // 递归
  • -f // 强制
  • gnome-system-monitor //打开系统监视器
  • ps 查看进程

-aux //查看所有进程

  • sudo -s //sudo指临时获取root权限,切换超级管理员
  • su [user_name] //su后面不加用户是默认切到root
  • su – username //是改变为切换到用户的变量

su只能获得root的执行权限,不能获得环境变量 而su -是切换到root并获得root的环境变量及执行权限

  • kill [pid] 杀进程
  • kill -9 [pid] //强制结束
  • shutdown -r now //重启
  • shutdown -h 20:25 //20:25关机
  • shutdown -h +10 //十分钟后关机
  • init 0 //关机
  • init 6 //重启
  • top //查看进程使用情况
  • df //检测磁盘空间
df -a //显示所有文件系统的磁盘使用情况
df -m//以2014字节为单位显示
df -t 显示指定文件系统的磁盘空间使用情况
df -T显示文件系统
  • du检测当前目录占用情况

du -alh 当前文件占用情况

  • who
  • export //查看环境变量
  • Ctrl+Alt+f1-7 远程登录: ssh 用户名@192.168.21.67
  • bg
  • jobs
  • tail -f 8976.log
  • sudo /etc/init.d/networking restart //更新网络配置
  • top -m 10 -d 1 //打印CPU使用情况
编译命令
  • make -j32 > ~/8976.log 2>&1
  • make installclean // 清除out目录下对应修改过的文件
  • make snod //快速打包system.img
  • make update-api //更新API,Api记录在目录frameworks/base/api
  • make otapackage //生成OTA包
  • m //在源码根目录执行编译(编译整个android系统)
  • mm //编译当前路径下所有模块,但不包含依赖
  • mmm [module_path]//编译指定路径下所有模块,但不包含依赖
  • mma //编译当前路径下所有模块,且包含依赖
  • mmma [module_path]//编译指定路径下所有模块,且包含依赖
  • cgrep //cgrep所有C/C++文件执行搜索操作
  • jgrep //所有Java文件执行搜索操作
  • ggrep //所有Gradle文件执行搜索操作
  • mangrep [keyword] //所有AndroidManifest.xml文件执行搜索操作
  • sepgrep [keyword] //所有sepolicy文件执行搜索操作
  • resgrep [keyword] //所有本地res/*.xml文件执行搜索操作
  • sgrep [keyword] //所有资源文件执行搜索操作
  • croot //切换至Android根目录
  • cproj //切换至工程的根目录
  • godir [filename] //跳转到包含某个文件的目录
adb shell
fastboot devices
//切换到boot.img所在的目录
fastboot flash boot boot.img
fastboot flash system system.img
fastboot reboot
Android编译系统Make文件分为三大类:
  • 系统核心的Make文件:定义了Build系统的框架,文件位于路径/build/core,其他Make文件都是基于该框架编写的
  • 针对产品的Make文件:定义了具体某个型号手机的Make文件,文件路径位于/device,该目录下往往又以公司名和产品名划分两个子级目录,比如/device/qcom/msm8976
  • 针对模块的Make文件:系统针对各个独立的模块配置的Make文件,名称统一为”Android.mk”,该文件定义了当前模块的编译方式.Build系统会扫描整个源码树中名为”Android.mk”的文件,并执行相应模块的编译工作
编译产物:
  • /out/host:Android开发工具的产物,包含SDK各种工具,比如adb、dex2oat、aapt等
  • /out/target/common:通用的一些编译产物,包含Java应用代码和Java库
  • /out/target/product/[product_name]:针对特定设备的编译产物以及平台相关C/C++代码和二进制文件
product目录中:	system.img:挂载为根分区,主要包含AndroidOS的系统文件
ramdisk.img:主要包含init.rc文件和配置文件等
userdata.img:被挂载在/data,主要包含用户以及应用程序相关的数据
刷机:
cd build 
./CopyImg.sh qucii3903
acopy OUT Qucii_8939_50_qucii3903
Flat Build  ->>  prog_emmc_firehose_8936.mbn  ->>  rawprogram_unsparse.xml  ->>  patch0.xml
adb reboot edl

编辑 art/build/Android.common_build.mk 文件
找到第75行
将 ifneq ($(WITHOUT_HOST_CLANG),true)
修改为 ifeq ($(WITHOUT_HOST_CLANG),false)
acopy OUT +文件名    //拷贝到windows
acopy IN /home/pansen/ +文件名    //拷贝到Ubuntu
ubuntu和windows之间复制粘贴:
autocutsel -f 
VNC: 172.0.0.216:27    147258

echo 6 > /sys/class/ktd20xx/ktd2026/led    //向对应节点写值6
 cat /sys/class/ktd20xx/ktd2026/led        //查看对应节点的值
/home/pansen/.config/xfce4/xfconf/xfce-perchannel-xml/
xfce4-keyboard-shortcuts.xml    //修改快捷键
VIM命令:
  • q! // 强制退出编辑器
  • :set number // 显示行号
  • :5 // 跳到第五行
  • vim text.py +5 // 打开test文件并跳到第五行
  • v // 进入预览模式
  • d // 剪切
  • dd // 剪切一行
  • 3dd // 剪切三行
  • y // 复制
  • yy // 复制一行
  • 3yy // 复制三行
  • p // 粘贴
  • u // 撤销上一个编辑操作
  • Ctrl+r // 恢复,即回退前一个命令
  • / // 向下查找
  • ? // 向上查找

n // 跳转下一个匹配

N // 跳转上一个匹配

导入源码到AS:
1. mmm development/tools/idegen/
全局编译,然后编译idegen这个模块项目,然后生成idegen.jar文件
1.2 如果源码没有编译,需要把idegen.jar copy到out/host/linux-x86/framework/目录下
2. 运行development/tools/idegen/idegen.sh
在根目录生成对应的android.ipr、android.iml IEDA工程配置文件
(修改android.iml文件去掉不要的代码再导入)
可以仿照上面这段代码的<excludeFolder url="file://$MODULE_DIR$/.repo"/>写法一样过滤掉不需要的内容,这样在导入时就会快很多
3. 打开Android Studio,打开源码根目录下的android.ipr文件,等待...
按住CTRL+鼠标左键跳转到Intent类你会发现跳转过去的是一个Intent.class文件,所以我们需要配置让其能跳转到Intent.java文件
>>打开Module,删掉android依赖中的所有依赖,只保留<Module source>和Android API 23 Platform
->>点击加号的JARs or directories将你源码的frameworks(base)及external和你用到的其他跳转目录添加到依赖中,然后apply即可(<Module source>移到最下)


编译lunch选择一个Target(定义在/device/qcom/目录下),eng版target下编译只能生成apk,不会对该apk文件优化(将apk文件中的classes.dex单独提取,并将classes.dex生成经过优化的odex文件),user版target有定义WITH_DEXPREOPT := true,不过生成的apk和odex是不能push到/system/app目录,Android系统无法识别带有odex文件的apk,因为apk和odex都需要对Android系统其他library进行校验,由于library与通过Android源码生成的library不同,所以apk和odex不能通过验证;只有使用Android源代码生成的system.img文件刷机,或者替换相应的library才可以使用带有odex的apk程序.
JACK编译器三种模式:
LOCAL_JACK_ENABLED=$(DEFAULT_JACK_ENABLED) 
disabled: 是指关闭JACK编译,使用android old toolchain
full: 是指全部编译,即每次编译,都会将所有的code全部编译。
incremental: 是指增量编译,即只会编译修改的代码。incremental模式默认是关闭的,需要设置(Incremental compilation is deactivated when shrinking, obfuscation, repackaging or multi-dex legacy is enabled.)
在单独模块的Android.mk中设置LOCAL_JACK_ENABLED为disabled, full, incremental可配置JACK编译的模式

配置默认JACK编译
在/build/core/combo/javac.mk中
ifndef ANDROID_COMPILE_WITH_JACK
# Defines if compilation with jack is enabled by default.
ANDROID_COMPILE_WITH_JACK := true
把ANDROID_COMPILE_WITH_JACK改为false取消默认JACK编译

./jack-admin install-server jack-launcher.jar jack-server-4.8.ALPHA.jar
./jack-admin start-server
./jack-admin list-server
修改$HOME/.jack-settings和 $HOME/.jack-server/config.properties 端口号