Android源码编译指南

和你一起终身学习,这里是程序员Android

本文主要包含以下内容

一、查看项目所在分支

gitbranch-a

表示:查看并列出当前项目所有分支

高通项目举例如下:

wangjie@wangjie:/wangjie/Qualcomm_p/E5527M_MSM8917_QM215_r26//LINUX/android$gitbranch-a*linux_android_developmentmasterremotes/origin/A/B_update_linux_android_developmentremotes/origin/HEAD-origin/masterremotes/origin/secure_linux_android_developmentremotes/origin/streamlined_code_engineeringwangjie@wangjie:/wangjie/Qualcomm_p/E5527M_MSM8917_QM215_r26//LINUX/android$
二、切换到目标分支

gitcheckout分支名

表示:切换到某个分支。

高通项目举例如下:

gitcheckoutlinux_android_development

wangjie@wangjie:/wangjie/Qualcomm_p/E5527M_MSM8917_QM215_r26//LINUX/android$gitbranch-a*linux_android_developmentmasterremotes/origin/A/B_update_linux_android_developmentremotes/origin/HEAD-origin/masterremotes/origin/cts_development_branchwangjie@wangjie:/wangjie/Qualcomm_p/E5527M_MSM8917_QM215_r26//LINUX/android$gitcheckoutlinux_android_development
三、查看当前所在分支

gitbranch

表示:查看当前所在分支

高通项目举例如下:

wangjie@wangjie:/wangjie/Qualcomm_p/E5527M_MSM8917_QM215_r26//LINUX/android$gitbranch*linux_android_developmentmasterwangjie@wangjie:/wangjie/Qualcomm_p/E5527M_MSM8917_QM215_r26//LINUX/android$
四、编译Android源码

Android源码编译,每个项目由于脚本各不相同,编译的命令有时候也会有说差异。

google官方编译命令如下

1.source./build/

2.lunch项目

3.make-j8

高通项目编译命令如下:

./buildall_

五、sourceAndroid编译环境

首先进入Android源码根目录,执行source./build/,

如不source,后续则无法单编模块。

高通项目举例如下:

wangjie@wangjie:/wangjie/Qualcomm_p/E5527M_MSM8917_QM215_r26//LINUX/android$source./build//generic/car//generic/mini-emulator-arm64//generic/mini-emulator-armv7-a-neon//generic/mini-emulator-x86_64//generic/mini-emulator-x86//generic/uml//google/muskie//google/taimen//qcom/common//qcom/qssi//partner_gms/products//qcom/opensource/core-utils//qcom/proprietary/common//qcom/proprietary/prebuilt_HY11/.includingsdk/bash_completion/@wangjie:/wangjie/Qualcomm_p/E5527M_MSM8917_QM215_r26//LINUX/android$
六、lunch所需的编译项目

执行lunch命令,查看所有编译项目列表,然后选择编译项目。

高通项目举例如下:

1.lunch,然后选择所需编译分支

wangjie@wangjie:/wangjie/Qualcomm_p/E5527M_MSM8917_QM215_r26//LINUX/android$lunch

You'rebuildingonLinux

Lunchmenupickacombo:

1.aosp_arm-eng

2.aosp_arm64-eng

3.aosp_mips-eng

40.msm8937_64-userdebug

41.msm8937_64-user

65.taimenb2-userdebug

//选择要编译的分支名

Whichwouldyoulike?[aosp_arm-eng]msm8937_64-userdebug

device/qcom/msm8937_64/msm8937_64.mk:42:warning:""

OUT_DIR=out

============================================

wangjie@wangjie:/wangjie/Qualcomm_p/E5527M_MSM8917_QM215_r26//LINUX/android$

2.直接lunch分支

比如我们需要编译msm8937_64-userdebug项目,其实我们可以执行最简单的方法,直接lunch这个项目所排列的位置,比如lunch40

wangjie@wangjie:/wangjie/Qualcomm_p/E5527M_MSM8917_QM215_r26//LINUX/android$lunch40device/qcom/msm8937_64/msm8937_64.mk:42:warning:""============================================PLATFORM_VERSION_CODENAME=RELPLATFORM_VERSION=9TARGET_PRODUCT=msm8937_64HOST_CROSS_2ND_ARCH=x86_64HOST_BUILD_TYPE=releaseBUILD_ID=_DIR=out============================================wangjie@wangjie:/wangjie/Qualcomm_p/E5527M_MSM8917_QM215_r26//LINUX/android$
七、单编模块

我们常用mmm以及mm来及对单模块进行编译。

mmm与mm主要区别在于你当前所在的目录位置。

如果当前正在所要编译模块的地方(需要有文件,才可以进行),请使用mm,否则使用mmm。

高通项目举例如下:

1.mmm使用举例(此时不在FM目录)

比如单编FM,不在FM目录下,需要执行mmmvor/qcom/opensource/commonsys/fm/fmapp2/

wangjie@wangjie:/wangjie/Qualcomm_p/E5527M_MSM8917_QM215_r26//LINUX/android$mmmvor/qcom/opensource/commonsys/fm/fmapp2//wangjie/Qualcomm_p/E5527M_MSM8917_QM215_r26//LINUX/android/vor/qcom/opensource/commonsys/fm/fmapp2/RestrictionCheckernotpresent,skipping..device/qcom/msm8937_64/msm8937_64.mk:42:warning:""============================================OUT_DIR=out============================================QSSI:notenabledformsm8937_64targetasvor/qcom/proprietary/release/QSSI/QSSI_enforced_targets_(7seconds)wangjie@wangjie:/wangjie/Qualcomm_p/E5527M_MSM8917_QM215_r26//LINUX/android$

2.mm使用举例(在FM目录下)

比如单编FM,在FM目录下,需要执行mm

wangjie@wangjie:/wangjie/Qualcomm_p/E5527M_MSM8917_QM215_r26//LINUX/android$cdvor/qcom/opensource/commonsys/fm/fmapp2/wangjie@wangjie:/wangjie/Qualcomm_p/E5527M_MSM8917_QM215_r26//LINUX/android/vor/qcom/opensource/commonsys/fm/fmapp2$mmRestrictionCheckernotpresent,skipping..device/qcom/msm8937_64/msm8937_64.mk:42:warning:""============================================PLATFORM_VERSION_CODENAME=RELPLATFORM_VERSION=9OUT_DIR=out============================================QSSI:notenabledformsm8937_64targetasvor/qcom/proprietary/release/QSSI/QSSI_enforced_targets_:/make/core/base_:412:warning:ignoringoldcommandsfortarget`out/target/product/msm8937_64/vor/lib64/hw/'ninja:(41seconds)wangjie@wangjie:/wangjie/Qualcomm_p/E5527M_MSM8917_QM215_r26//LINUX/android/vor/qcom/opensource/commonsys/fm/fmapp2$
八、push模块验证修改是否生效

1.使用debug版本,挂载手机

主要用来查看当前使用的版本,调试只能使用debug版本,user版本无法调试。

高通项目举例如下:

C:\Users\:\Users\AdministratoradbrootC:\Users\AdministratoradbremountremountsucceededC:\Users\Administrator

2.将生成的单模块编译的apk拷贝到桌面并push到手机中

adbpush本地文件手机目录

adbpush主要用来替换手机中的apk,调试验证单编是否生效。

高通FM举例如下:

C:\Users\AdministratoradbpushC:\Users\Administrator\Desktop\/system/app/FM2C:\Users\Administrator\Desktop\:1/s(861880)C:\Users\Administrator

3.清除pushapk的存储数据

adbshellpmclear包名

用来清除当前包名的数据。

比如:

高通FMapk举例如下:

C:\Users\Administratoradbshelldumpsysactivity|findstrRunRunningactivities(mostrecentfirst):Run0:ActivityRecord{89/}C:\Users\:\Users\Administrator

版权声明:本站所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请举报,一经查实,本站将立刻删除。

相关推荐