入職小白隨筆之高通項目編譯流程

来源:https://www.cnblogs.com/AleiCui/archive/2019/08/23/11398254.html
-Advertisement-
Play Games

聲明:本文來自我的導師wangjie. 本文主要包含以下內容 一、查看項目所在分支二、切換到目標分支三、查看當前所在分支四、編譯Android源碼五、source Android 編譯環境六、lunch 所需的編譯項目七、單編 模塊八、push 模塊 驗證修改是否生效 一、查看項目所在分支 git ...


聲明:本文來自我的導師wangjie.

 

 

本文主要包含以下內容

一、查看項目所在分支
二、切換到目標分支
三、查看當前所在分支
四、編譯Android源碼
五、source Android 編譯環境
六、lunch 所需的編譯項目
七、單編 模塊
八、push 模塊 驗證修改是否生效

一、查看項目所在分支

git branch -a
表示:查看併列出當前項目所有分支

高通項目舉例如下:

wangjie@wangjie:/wangjie/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$ git branch -a
* linux_android_development
  master
  remotes/origin/A/B_update_linux_android_development
  remotes/origin/HEAD -> origin/master
  ... ...
  remotes/origin/secure_linux_android_development
  remotes/origin/streamlined_code_engineering
wangjie@wangjie:/wangjie/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$ 

二、切換到目標分支

git checkout 分支名
表示: 切換到某個分支。

高通項目舉例如下:
git checkout linux_android_development

wangjie@wangjie:/wangjie/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$ git branch -a
* linux_android_development
  master
  remotes/origin/A/B_update_linux_android_development
  remotes/origin/HEAD -> origin/master
  remotes/origin/cts_development_branch
  ... ...
wangjie@wangjie:/wangjie/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$ git checkout linux_android_development 

三、查看當前所在分支

git branch
表示:查看當前所在分支

高通項目舉例如下:

wangjie@wangjie:/wangjie/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$ git branch 
* linux_android_development
  master
wangjie@wangjie:/wangjie/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$ 

四、編譯Android源碼

Android 源碼編譯,每個項目由於腳本各不相同,編譯的命令 有時候也會有說差異。

google 官方編譯命令如下

1.source ./build/envsetup.sh
2.lunch 項目
3.make -j8

高通項目編譯命令 如下:

./buildall_userdebug.sh E5527M all

五、source Android 編譯環境

首先進入Android 源碼根目錄,執行source ./build/envsetup.sh,
如不source,後續則無法單編模塊。

高通項目舉例如下:

wangjie@wangjie:/wangjie/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$ source ./build/envsetup.sh 
including device/generic/car/vendorsetup.sh
including device/generic/mini-emulator-arm64/vendorsetup.sh
including device/generic/mini-emulator-armv7-a-neon/vendorsetup.sh
including device/generic/mini-emulator-x86_64/vendorsetup.sh
including device/generic/mini-emulator-x86/vendorsetup.sh
including device/generic/uml/vendorsetup.sh
including device/google/muskie/vendorsetup.sh
including device/google/taimen/vendorsetup.sh
including device/qcom/common/vendorsetup.sh
including device/qcom/qssi/vendorsetup.sh
including vendor/partner_gms/products/vendorsetup.sh
including vendor/qcom/opensource/core-utils/vendorsetup.sh
including vendor/qcom/proprietary/common/vendorsetup.sh
including vendor/qcom/proprietary/prebuilt_HY11/vendorsetup.sh
Created 9 symlinks out of 9 mapped links..
including sdk/bash_completion/adb.bash
wangjie@wangjie:/wangjie/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$ 

六、lunch 所需的編譯項目

執行 lunch 命令,查看所有 編譯項目列表,然後選擇 編譯項目。
高通項目 舉例如下:

1. lunch ,然後選擇所需編譯分支
wangjie@wangjie:/wangjie/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$ lunch
You're building on Linux
Lunch menu... pick a combo:
     1. aosp_arm-eng
     2. aosp_arm64-eng
     3. aosp_mips-eng
     ... ...
     40. msm8937_64-userdebug
     41. msm8937_64-user
     ... ...
     65. taimenb2-userdebug
// 選擇要編譯的分支名
Which would you like? [aosp_arm-eng] msm8937_64-userdebug
device/qcom/msm8937_64/msm8937_64.mk:42: warning: "Build with 4.9 kernel"
 ... ...
OUT_DIR=out
============================================
wangjie@wangjie:/wangjie/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$ 
2. 直接lunch 分支

比如我們需要編譯msm8937_64-userdebug項目,其實我們可以執行最簡單的方法,直接lunch這個項目所排列的位置,比如lunch 40

wangjie@wangjie:/wangjie/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$ lunch 40
device/qcom/msm8937_64/msm8937_64.mk:42: warning: "Build with 4.9 kernel"
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=9
TARGET_PRODUCT=msm8937_64
... ...
HOST_CROSS_2ND_ARCH=x86_64
HOST_BUILD_TYPE=release
BUILD_ID=PKQ1.190601.001
OUT_DIR=out
============================================
wangjie@wangjie:/wangjie/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$ 

七、單編 模塊

我們常用 mmm 以及mm 來及對單模塊進行編譯。
mmm 與mm 主要區別在於你當前所在的目錄位置。
如果當前正在所要編譯模塊的地方(需要有android.mk文件,才可以進行),請使用 mm,否則使用mmm

高通項目舉例如下:

1. mmm使用舉例(此時不在FM 目錄)

比如單編FM,不在FM目錄下,需要執行mmm vendor/qcom/opensource/commonsys/fm/fmapp2/

wangjie@wangjie:/wangjie/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$ mmm vendor/qcom/opensource/commonsys/fm/fmapp2/
/wangjie/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android/vendor/qcom/opensource/commonsys/fm/fmapp2/
Restriction Checker not present, skipping..
device/qcom/msm8937_64/msm8937_64.mk:42: warning: "Build with 4.9 kernel"
============================================
... ...
OUT_DIR=out
============================================
QSSI: not enabled for msm8937_64 target as vendor/qcom/proprietary/release/QSSI/QSSI_enforced_targets_list.txt was not found.
... ...
#### build completed successfully (7 seconds) ####
wangjie@wangjie:/wangjie/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$ 
2. mm使用舉例(在FM 目錄下)

比如單編FM,在FM目錄下,需要執行mm

wangjie@wangjie:/wangjie/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$ cd  vendor/qcom/opensource/commonsys/fm/fmapp2/
wangjie@wangjie:/wangjie/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android/vendor/qcom/opensource/commonsys/fm/fmapp2$ mm
Restriction Checker not present, skipping..
device/qcom/msm8937_64/msm8937_64.mk:42: warning: "Build with 4.9 kernel"
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=9
... ...
OUT_DIR=out
============================================
QSSI: not enabled for msm8937_64 target as vendor/qcom/proprietary/release/QSSI/QSSI_enforced_targets_list.txt was not found.
ninja: no work to do.
... ...
build/make/core/base_rules.mk:412: warning: ignoring old commands for target `out/target/product/msm8937_64/vendor/lib64/hw/fingerprint.default.so'
ninja: no work to do.
#### build completed successfully (41 seconds) ####
wangjie@wangjie:/wangjie/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android/vendor/qcom/opensource/commonsys/fm/fmapp2$ 

八、 push 模塊 驗證修改是否生效

1. 使用debug版本,掛載手機

adb shell getprop ro.build.type 主要用來查看當前使用的版本,調試只能使用debug 版本,user版本無法調試。

高通項目舉例如下:

C:\Users\Administrator>adb shell getprop ro.build.type
userdebug
C:\Users\Administrator>adb root
C:\Users\Administrator>adb remount
remount succeeded
C:\Users\Administrator>
2.將生成的單模塊編譯的apk 拷貝到桌面並push到手機中

adb push 本地文件 手機目錄
adb push主要用來 替換手機中的apk,調試驗證單編是否生效。

高通 FM 舉例如下:

C:\Users\Administrator>adb push C:\Users\Administrator\Desktop\FM2.apk /system/app/FM2
C:\Users\Administrator\Desktop\FM2.apk: 1 file pushed. 9.7 MB/s (861880 bytes in 0.085s)
C:\Users\Administrator>
3. 清除 push apk 的存儲數據

adb shell pm clear 包名
用來清除當前包名的數據。
比如:adb shell pm clear com.caf.fmradio

高通 FM apk舉例如下:


C:\Users\Administrator>adb shell dumpsys activity | findstr Run
    Running activities (most recent first):
        Run #0: ActivityRecord{3bc8d7d u0 com.caf.fmradio/.FMRadio t52}
    Running activities (most recent first):
        Run #0: ActivityRecord{89df584 u0 com.android.launcher3/com.android.searchlauncher.SearchLauncher t51}
C:\Users\Administrator>adb shell pm clear com.caf.fmradio
Success
C:\Users\Administrator>
 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在mysql查詢中,我們會通過排序,分組等在一張表中讀取數據,這是比較簡單的,但是在真正的應用中經常需要從多個數據表中讀取數據。下麵就為大家介紹這種方式,鏈接查詢join。 INNER JOIN(內連接,或等值連接):獲取兩個表中欄位匹配關係的記錄。 LEFT JOIN(左連接):獲取左表所有記錄, ...
  • 修改表格中的列名稱 alter table \ change [column] \ \ \ 查詢數據表時獲取特定幾行的方式 若需要實現獲取數據表中前幾行或者後幾行的特定內容,需要藉助於limit。 limit子句可以被用於強制select語句返回指定的記錄數。limit 接受一個或兩個數字參數。參數 ...
  • 版權聲明:本文為xing_star原創文章,轉載請註明出處! 本文同步自http://javaexception.com/archives/188 Glide.3x的版本是3.7.0,Glide4.x的版本是4.2.0 Glide3.x中最基礎的用法 那麼在Glide4.x中,其實還是一樣的,最基本 ...
  • 入門學習Flutter有一段時間了,Demo用過的Widget也有不少,想著整體的梳理一下,所以今天結合Flutter中文網和書籍梳理一下Widget的使用,首先梳理一下擁有單個子元素的佈局Widget。 Container:一個擁有繪製、定位、調整大小的Widget Pad... ...
  • ### 前言 前面我們講了 [Okhttp的基本用法](https://www.jianshu.com/p/8e404d9c160f) [Okhttp3源碼解析(1)-OkHttpClient分析](https://www.jianshu.com/p/bf1d01b79ce7) 今天主要分析下Req ...
  • ### 前言 前面我們講了 [Okhttp的基本用法](https://www.jianshu.com/p/8e404d9c160f) [Okhttp3源碼解析(1)-OkHttpClient分析](https://www.jianshu.com/p/bf1d01b79ce7) [Okhttp3源碼 ...
  • 日誌就像是構建工具的 UI,如果輸出太混亂,真正的警告和錯誤很容易就被忽略了。Gradle 定義了 6 種日誌級別,以便於我們識別有用的信息。 ...
  • ### 前言 上篇文章我們講了[Okhttp的基本用法](https://www.jianshu.com/p/8e404d9c160f),今天根據上節講到請求流程來分析源碼,那麼第一步就是實例化OkHttpClient對象,所以我們今天主要分析下OkHttpClient源碼! #### 初始化-構造 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...