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 端口号