Linux常用基本命令&Android系統編譯命令

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 端口號
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章