Androidのソースコードコンパイル方法

8bc3cdb013e83efa66931a23abde655d.gif

一生あなたと一緒に学びましょうXi、こちらはプログラマー Android です

おすすめの定番記事. この記事を読むことで以下の知識が得られます。

1. プロジェクトが存在するブランチを表示します
2. ターゲット ブランチに切り替えます
3. 現在のブランチを表示します
4. Android ソース コードをコンパイル
します 5. ソース Android コンパイル環境
6. 必要なコンパイル プロジェクトをランチします
7. 単一のコンパイル モジュール
8. モジュールをプッシュします変更が有効になっているかどうかを確認します
。 9.

1. プロジェクトが存在するブランチを確認します。

git branch -a
表現: 現在のプロジェクトのすべてのブランチを表示およびリストします。

クアルコムのプロジェクトの例は次のとおりです。

Test@Test:/Test/Qualcomm_p/E27M_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
Test@Test:/Test/Qualcomm_p/E7M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$

2. ターゲットブランチに切り替えます

git checkout 分支名
意味: ブランチに切り替えます。

クアルコムのプロジェクトの例は次のとおりです。
git checkout linux_android_development

Test@Test:/Test/Qualcomm_p/E27M_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
  ... ...
Test@Test:/Test/Qualcomm_p/E27M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$ git checkout linux_android_development

3. 現在のブランチを表示する

git branch
示す: 現在のブランチを表示する

クアルコムのプロジェクトの例は次のとおりです。

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

4. Android ソースコードをコンパイルする

Android ソースコードのコンパイルでは、各プロジェクトに異なるスクリプトがあるため、コンパイルコマンドが異なる場合があります。

Google公式のコンパイルコマンドは以下の通り

1.source ./build/envsetup.sh
2.ランチプロジェクト
3.make -j8

Qualcomm プロジェクトのコンパイル コマンドは次のとおりです。

./buildall_userdebug.sh E5527M all

5. ソース Android コンパイル環境

まずAndroid ソースコードのルートディレクトリに移動して実行してくださいsource ./build/envsetup.sh
そうしないとsource、後からモジュールを個別にコンパイルすることができなくなります。

クアルコムのプロジェクトの例は次のとおりです。

Test@Test:/Test/Qualcomm_p/E27M_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
Test@Test:/Test/Qualcomm_p/E27M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$

6. 昼食に必要な編集プロジェクト

コマンドを実行して、 lunch コンパイルされたすべてのプロジェクトのリストを表示し、コンパイルされたプロジェクトを選択します。
クアルコムのプロジェクトの例は次のとおりです。

1. 昼食をとり、必要なコンパイル ブランチを選択します
Test@Test:/Test/Qualcomm_p/E7M_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
============================================
Test@Test:/Test/Qualcomm_p/E27M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$
2. 直ランチ支店

たとえば、msm8937_64-userdebugプロジェクトをコンパイルする必要がある場合、実際には最も単純な方法を実行して、lunchプロジェクトの位置を直接配置できます。lunch 40

Test@Test:/Test/Qualcomm_p/E7M_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
============================================
Test@Test:/Test/Qualcomm_p/27M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$

7. 単一モジュール

私たちは 単一のモジュールを使用しmmm てmm コンパイルすることがよくあります。
mmm 主mm な違いは、現在いるディレクトリの場所です。
現在モジュールをコンパイルしたい場所にいる場合は(需要有android.mk文件,才可以进行)を使用し mm、それ以外の場合は を使用しますmmm

クアルコムのプロジェクトの例は次のとおりです。

1. mmm の使用例 (現時点では FM ディレクトリにありません)

たとえば、単一の編集はディレクトリにFMないため、実行する必要があります。FMmmm vendor/qcom/opensource/commonsys/fm/fmapp2/

Test@Test:/Test/Qualcomm_p/E27M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$ mmm vendor/qcom/opensource/commonsys/fm/fmapp2/

/Test/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) ####

Test@Test:/Test/Qualcomm_p/E27M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$
2. mm の使用例 (FM ディレクトリ内)

たとえば、ディレクトリFM内の単一のファイルを編集する場合は、次のコマンドを実行する必要があります。FMmm

Test@Test:/Test/Qualcomm_p/E27M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$ cd  vendor/qcom/opensource/commonsys/fm/fmapp2/
Test@Test:/Test/Qualcomm_p/E27M_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) ####

Test@Test:/Test/Qualcomm_p/E7M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android/vendor/qcom/opensource/commonsys/fm/fmapp2$

8. プッシュモジュールは変更が有効かどうかを検証します

1. デバッグバージョンを使用して携帯電話をマウントします

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 をデスクトップにコピーし、携帯電話にプッシュします

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.プッシュ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>

参考文献:

[Tencent ドキュメント] Android フレームワーク ナレッジベース
https://docs.qq.com/doc/DSXBmSG9VbEROUXF5

フレンドリーなおすすめ:

Android開発に役立つ情報を集めました。

この時点で、この記事は終了です。編集者は、インターネットから転載された記事が優れていると考えています。クリックして元の記事を読み、元の著者をサポートしてください。権利侵害がある場合は、編集者に連絡して削除してください。ご提案や修正を歓迎します。ご注目をお待ちしております。読んでいただきありがとうございます。ありがとうございます!

5aef24a2f64d1465cd321ac1c8a2451d.jpeg

クリックして元記事を読んで、ボスにいいね!

おすすめ

転載: blog.csdn.net/wjky2014/article/details/131671913