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