赞
踩
和你一起终身学习,这里是程序员Android
经典好文推荐,通过阅读本文,您将收获以下知识点:
一、查看项目所在分支
二、切换到目标分支
三、查看当前所在分支
四、编译Android源码
五、source Android 编译环境
六、lunch 所需的编译项目
七、单编 模块
八、push 模块 验证修改是否生效
九、参考文献
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$
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
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$
Android
源码编译,每个项目由于脚本各不相同,编译的命令 有时候也会有说差异。
1.source ./build/envsetup.sh
2.lunch 项目
3.make -j8
./buildall_userdebug.sh E5527M all
首先进入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$

执行 lunch
命令,查看所有 编译项目列表,然后选择 编译项目。
高通项目 举例如下:
- 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$

比如我们需要编译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$
我们常用 mmm
以及mm
来及对单模块进行编译。mmm
与mm
主要区别在于你当前所在的目录位置。
如果当前正在所要编译模块的地方(需要有android.mk文件,才可以进行)
,请使用 mm
,否则使用mmm
。
高通项目举例如下:
比如单编FM
,不在FM
目录下,需要执行mmm 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$
比如单编FM
,在FM
目录下,需要执行mm
- 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$

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>
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>
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>
参考文献:
【腾讯文档】Android Framework 知识库
https://docs.qq.com/doc/DSXBmSG9VbEROUXF5
友情推荐:
至此,本篇已结束。转载网络的文章,小编觉得很优秀,欢迎点击阅读原文,支持原创作者,如有侵权,恳请联系小编删除,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!
点击阅读原文,为大佬点赞!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。