如何定制android源码的编译选项 amp;后期安装

如何定制android源码的编译选项 amp;后期安装,第1张

文件build/core/version_defaults.mk用来检查一些跟版本相关的变量是否定义;如果未定义,则使用默认值。

这些变量包括

PLATFORM_VERSION # 如 2.2.5

PLATFORM_SDK_VERSION # 8, 对应2.2.5

PLATFORM_VERSION_CODENAME # REL,即发行版

DEFAULT_APP_TARGET_SDK # 同SDK_VERSION或VERSION_CODENAME

BUILD_ID# 默认为UNKNOWN

BUILD_NUMBER # 默认eng.$(USER).$(shell date +%Y%m%d.%H%M%S)的形式。

version_defaults.mk首先包含进build_id.mk。用户应当配置build_id.mk,而不应该改动version_defaults.mk文件。然后检查上述变量,如未定义则赋值默认值。

---------------------------------------------------------------------------

关于调试功能(adb)的开启

编译android源码之前总是要先运行build/envsetup.sh,以初始化一些常用命令(实际上是bash的函数,如add_lunch_combo)。

其中也从以下文件中引入了一些编译设置:

device/${CHIPSET_VENDOR}/vendorsetup.sh

我们这里使用的CHIPSET_VENDOR为amlogic。

比如我们有文件device/amlogic/vendorsetup.sh,内容为"产品名-编译类型(flavor)"列表(称为combo),如下:

add_lunch_combo m1ref-eng

add_lunch_combo m1ref-user

add_lunch_combo m2ref-eng

add_lunch_combo m2ref-user

add_lunch_combo stvm3-eng

add_lunch_combo stvm3-user

其中,m1ref和stvm3是产品名(作前缀),后面为编译类型。

除此前缀外可选的combo值有: eng, user, userdebug, tests。

(参考文件build/core/main.mk中对于变量TARGET_BUILD_VARIANT的筛查条件)

我们可以修改vendorsetup.sh文件,来改变为特定设备编译的结果。

以下是各个编译类型的特点:

eng: 工程模式,用于平台级的调试,是默认的编译类型。

待安装的模块tag有: eng, debug, user, development.

安装不带tag的非APK模块;

所安装应用由产品定义文件给出;

默认属性: ro.secure=0, ro.deuggable=1, ro.kernel.android.checkjni=1

adbd默认开启,adb以root身份运行。

user: 即最终用户版

待安装的应用tag有: user

安装不带tag的非APK模块;

所安装应用由产品定义文件给出;

默认属性有ro.secure=1, ro.debuggable=0;

默认关闭adbd服务(但可通过应用settings来打开,且adb以shell身份运行);

userdebug: 与user类似,除了:

支持有限的调试功能;

待安装的应用tag有:debug;

默认属性有ro.secure=1, ro.debuggable=1;

默认打开adbd服务,adb以shell身份运行;

例如,由文件build/core/main.mk可以看出,当使用含有userdebug的combo值时,此文件中的临时变量enable_target_debugging会保持为true,相应地,编译过程会执行:

ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=1 persist.service.adb.enable=1

这意味着目标系统中根目录下的文件/default.prop文件(对应变量 INSTALLED_DEFAULT_PROP_TARGET )会含有以下行(参考文件build/core/Makefile):

persist.service.adb.enable=1

由此,目标系统会默认开启adbd服务,你就可以通过其它PC来连接目标系统了。

所以,如要默认开启adbd服务,可在设备(如stvm3)定制文件device/amlogic/vendorsetup.sh中增加以下行:

add_lunch_combo stvm3-userdebug

这样在执行bash的lunch函数时,选择此combo就可以默认打开adbd服务(adb以shell身份运行)。

但是,即使adbd已经开启,你仍可能无法通过网络连接到Android进行调试,这涉及到Android的二个属性:

service.adb.tcp.port (优先级高)

persist.adb.tcp.port (优先级低)

注:可查看源码文件system/core/adb/adb.c。

默认地,这两个属性值是5555。有两种方法来设置此变量:

1)(永久性改变)在Android配置文件/init.rc或/init.$MANUFACTUROR.rc中添加一行:

setprop service.adb.tcp.port5555

2)(临时性改变)在命令行上(你可能需要先通过串口开一个终端)执行如下命令:

setprop service.adb.tcp.port5555

检查adbd是否支持通过网络链接Android:执行命令

netstat -l -n | grep ":5555"

如果有LISTEN状态的输出,则表示adbd支持网络模式 :) 。

现仅就工作遇到的问题做个总结。所用硬件平台为amlogic stvm3。---------------------------------------------------------------------------关于版本号:文件build/core/version_defaults.mk用来检查一些跟版本相关的变量是否定义;如果未定义,则使用默认值。这些变量包括 PLATFORM_VERSION # 如 2.2.5 PLATFORM_SDK_VERSION # 8, 对应2.2.5 PLATFORM_VERSION_CODENAME # REL,即发行版 DEFAULT_APP_TARGET_SDK # 同SDK_VERSION或VERSION_CODENAME BUILD_ID # 默认为UNKNOWN BUILD_NUMBER # 默认eng.$(USER).$(shell date +%Y%m%d.%H%M%S)的形式。 version_defaults.mk首先包含进build_id.mk。用户应当配置build_id.mk,而不应该改动version_defaults.mk文件。然后检查上述变量,如未定义则赋值默认值。---------------------------------------------------------------------------关于调试功能(adb)的开启编译android源码之前总是要先运行build/envsetup.sh,以初始化一些常用命令(实际上是bash的函数,如add_lunch_combo)。其中也从以下文件中引入了一些编译设置: device/${CHIPSET_VENDOR}/vendorsetup.sh我们这里使用的CHIPSET_VENDOR为amlogic。比如我们有文件device/amlogic/vendorsetup.sh,内容为"产品名-编译类型(flavor)"列表(称为combo),如下: add_lunch_combo m1ref-eng add_lunch_combo m1ref-user add_lunch_combo m2ref-eng add_lunch_combo m2ref-user add_lunch_combo stvm3-eng add_lunch_combo stvm3-user其中,m1ref和stvm3是产品名(作前缀),后面为编译类型。除此前缀外可选的combo值有: eng, user, userdebug, tests。(参考文件build/core/main.mk中对于变量TARGET_BUILD_VARIANT的筛查条件)我们可以修改vendorsetup.sh文件,来改变为特定设备编译的结果。以下是各个编译类型的特点: eng: 工程模式,用于平台级的调试,是默认的编译类型。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11634830.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存