AndroidL 系统属性的修改

以下内容基于Android5.1.1源码http://androidxref.com/5.1.1_r6/xref/,在新建一个项目后会有一些比较重要的项目相关的属性需要修改。


一:一些重要属性值的设置地方
# 属性变量定义的地方 ./build/core/Makefile

........
$(hide) TARGET_BUILD_TYPE="$(TARGET_BUILD_VARIANT)" \
TARGET_BUILD_FLAVOR="$(TARGET_PRODUCT)-$(TARGET_BUILD_VARIANT)" \
TARGET_DEVICE="$(TARGET_DEVICE)" \
PRODUCT_NAME="$(TARGET_PRODUCT)" \

PRODUCT_BRAND="$(PRODUCT_BRAND)" \

# 根据PRODUCT_LOCALES来获取地区语言 ./build/target/product/full_base.mk PRODUCT_LOCALES := en_US

PRODUCT_DEFAULT_LANGUAGE="$(call default-locale-language,$(PRODUCT_LOCALES))" \  

PRODUCT_DEFAULT_REGION="$(call default-locale-region,$(PRODUCT_LOCALES))" \ 

# 根据PRODUCT_LOCALES来获取地区语言 ./build/target/product/full_base.mk  PRODUCT_LOCALES := en_US

PRODUCT_DEFAULT_WIFI_CHANNELS="$(PRODUCT_DEFAULT_WIFI_CHANNELS)" \
PRODUCT_MODEL="$(PRODUCT_MODEL)" \
PRODUCT_MANUFACTURER="$(PRODUCT_MANUFACTURER)" \
PRIVATE_BUILD_DESC="$(PRIVATE_BUILD_DESC)" \
BUILD_ID="$(BUILD_ID)" \
BUILD_DISPLAY_ID="$(BUILD_DISPLAY_ID)" \
BUILD_NUMBER="$(BUILD_NUMBER)" \
PLATFORM_VERSION="$(PLATFORM_VERSION)" \   
PLATFORM_SDK_VERSION="$(PLATFORM_SDK_VERSION)" \
PLATFORM_VERSION_CODENAME="$(PLATFORM_VERSION_CODENAME)" \
PLATFORM_VERSION_ALL_CODENAMES="$(PLATFORM_VERSION_ALL_CODENAMES)" \
BUILD_VERSION_TAGS="$(BUILD_VERSION_TAGS)" \
TARGET_BOOTLOADER_BOARD_NAME="$(TARGET_BOOTLOADER_BOARD_NAME)" \
BUILD_FINGERPRINT="$(BUILD_FINGERPRINT)" \
$(if $(OEM_THUMBPRINT_PROPERTIES),BUILD_THUMBPRINT="$(BUILD_THUMBPRINT)") \
TARGET_BOARD_PLATFORM="$(TARGET_BOARD_PLATFORM)" \
TARGET_CPU_ABI_LIST="$(TARGET_CPU_ABI_LIST)" \
TARGET_CPU_ABI_LIST_32_BIT="$(TARGET_CPU_ABI_LIST_32_BIT)" \
TARGET_CPU_ABI_LIST_64_BIT="$(TARGET_CPU_ABI_LIST_64_BIT)" \
TARGET_CPU_ABI="$(TARGET_CPU_ABI)" \
TARGET_CPU_ABI2="$(TARGET_CPU_ABI2)" \
TARGET_AAPT_CHARACTERISTICS="$(TARGET_AAPT_CHARACTERISTICS)" \
........

# ./build/target/product/full_base.mk
........
PRODUCT_PROPERTY_OVERRIDES := \
    ro.com.android.dateformat=MM-dd-yyyy \     # 默认日期格式
    ro.config.ringtone=Ring_Synth_04.ogg \       # 默认铃声
    ro.config.notification_sound=pixiedust.ogg  # 默认通知提示音
........

# 属性值的设置地方 ./build/tools/buildinfo.sh
........
echo "ro.build.id=$BUILD_ID"   # 系统(固件)版本号 ./build/core/build_id.mk   export BUILD_ID=LMY48G 
echo "ro.build.display.id=$BUILD_DISPLAY_ID"   # 设置>关于手机>版本号 
echo "ro.build.version.incremental=$BUILD_NUMBER"   # 版本增量
echo "ro.build.version.sdk=$PLATFORM_SDK_VERSION"   # sdk版本
echo "ro.build.version.codename=$PLATFORM_VERSION_CODENAME"   # 版本代号
echo "ro.build.version.all_codenames=$PLATFORM_VERSION_ALL_CODENAMES"

# 设置>关于手机>Android版本 ./build/core/version_defaults.mk   PLATFORM_VERSION := 5.1.1

echo "ro.build.version.release=$PLATFORM_VERSION"   

echo "ro.build.date=`date`"   # 制作者制作的时间,可修改"2011年X月X日 某某某制作"
........
echo "ro.product.model=$PRODUCT_MODEL"   # 内部手机代号也就是手机名
echo "ro.product.brand=$PRODUCT_BRAND"    # 手机品牌
echo "ro.product.name=$PRODUCT_NAME"       # 手机正式名称
echo "ro.product.device=$TARGET_DEVICE"     # 设备名称
echo "ro.product.board=$TARGET_BOOTLOADER_BOARD_NAME"   # 采用的处理器
........
echo "ro.product.cpu.abi=$TARGET_CPU_ABI"   # cpu的版本
if [ -n "$TARGET_CPU_ABI2" ] ; then
  echo "ro.product.cpu.abi2=$TARGET_CPU_ABI2"   # cpu的品牌
fi
........
echo "ro.product.manufacturer=$PRODUCT_MANUFACTURER"   # 手机制造商
if [ -n "$PRODUCT_DEFAULT_LANGUAGE" ] ; then
  echo "ro.product.locale.language=$PRODUCT_DEFAULT_LANGUAGE"   # 手机默认语言
fi
if [ -n "$PRODUCT_DEFAULT_REGION" ] ; then
  echo "ro.product.locale.region=$PRODUCT_DEFAULT_REGION"   # 地区语言
fi
echo "ro.wifi.channels=$PRODUCT_DEFAULT_WIFI_CHANNELS"   # WIFI连接的渠道
echo "ro.board.platform=$TARGET_BOARD_PLATFORM"   # 主板平台

echo "# ro.build.product is obsolete; use ro.product.device"
echo "ro.build.product=$TARGET_DEVICE"   # 产品名称

echo "# Do not try to parse description, fingerprint, or thumbprint"
echo "ro.build.description=$PRIVATE_BUILD_DESC"   # 用户的KEY
echo "ro.build.fingerprint=$BUILD_FINGERPRINT"   # 手机指纹
........
# ADD for GSM 谷歌客户身份
echo "ro.com.google.clientidbase.am=android-google"
echo "ro.com.google.clientidbase.gmm=android-google"
echo "ro.com.google.clientidbase.ms=android-google"
echo "ro.com.google.clientidbase.yt=android-google"
echo "ro.com.google.clientidbase=android-google"
# 设置时区

echo "persist.sys.timezone=Europe/Moscow"  

蓝牙名称
/system/bt/btif/src/btif_dm.c   btif_get_Default_local_name 

WIFI直连名称
/frameworks/opt/net/wifi/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java    getPersistedDeviceName()
WIFI SSID名称
/frameworks/base/core/res/res/values/string.xml   wifi_tether_configure_ssid_default


二:开机动画bootanimation.zip
将开机动画放置到指定目录,然后在编译脚本中指定拷贝到system/media/下面,具体方法可以仿照google源码已有的项目
PRODUCT_COPY_FILES += \
    device/xxx/xxx/bootanimation.zip:system/media/bootanimation.zip


三:壁纸相关设置
默认壁纸default_wallpaper.jpg

根据分不同辨率分别替换以下文件
/frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.jpg
/frameworks/base/core/res/res/drawable-sw600dp-nodpi/default_wallpaper.jpg
/frameworks/base/core/res/res/drawable-sw720dp-nodpi/default_wallpaper.jpg
也可以用项目中采用overlay方式来覆盖
/device/xxx/xxxx/overlay/frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.jpg

默认动态壁纸,动态壁纸源码位于/packages/wallpapers/下面
/frameworks/base/core/res/res/values/config.xml 
<string name="default_wallpaper_component" translatable="false">com.android.wallpaper/com.android.wallpaper.grass.GrassWallpaper</string>
或者设置系统变量echo "ro.config.wallpaper_component=com.android.wallpaper/com.android.wallpaper.grass.GrassWallpaper"

添加壁纸
在./packages/apps/Launcher3/WallpaperPicker/res/values-nodpi/wallpapers.xml的wallpapers数组中添加
<resources>
    <string-array name="wallpapers" translatable="false">
        <item>wallpaper1</item>
        <item>wallpaper2</item>
        <item>wallpaper3</item>
    </string-array>
</resources>

根据手机支持的不同分辨率,将图片放置到WallpaperPicker对应的drawable中,
注意的是需要一大一小两张图片,如wallpaper1.png与wallpaper1_small.png, 此处wallpaper1_small.png为wallpaper1.png的缩略图

<think>嗯,用户的问题是关于Android系统编译后设备型号显示不一致的情况。首先,我需要理解用户提供的配置信息。他们在代码里设置了PRODUCT_DEVICE为ly1024p_ly102c_rk3568_r,但同时用PRODUCT_PROPERTY_OVERRIDES覆盖了ro.product.device为LY_FG123。用户编译后,通过adb获取到的ro.product.device确实是LY_FG123,但系统设置里显示的还是原来的ly1024p_ly102c_rk3568_r。这说明可能有多个地方在设置设备型号属性,或者系统设置读取的属性不同。 接下来,我需要回忆Android构建系统中关于产品属性的配置方式。通常,PRODUCT_NAME、PRODUCT_DEVICE等变量会在build/target/product/core.mk或者其他产品配置文件中定义,这些变量会被用来生成系统属性,比如ro.product.name和ro.product.device。不过,用户可能通过PRODUCT_PROPERTY_OVERRIDES来覆盖这些属性。但是系统设置中的设备型号可能读取的是另一个属性,比如ro.build.product或者ro.product.model,而用户这里PRODUCT_MODEL设置为原来的值,可能没有被覆盖。 另外,Android系统中有多个属性文件,比如system.prop、default.prop等,可能在不同的地方被加载。用户可能只在某个地方覆盖了ro.product.device,而其他地方还存在旧的配置。或者,系统设置应用可能使用了其他属性,比如ro.product.model,而这个属性用户并没有修改,仍然保持原来的ly1024p_ly102c_rk3568_r。 可能还需要检查是否有其他模块或配置文件再次覆盖了这些属性。例如,有些设备会在设备特定的mk文件中设置这些属性,或者在BoardConfig.mk中进行配置。如果用户在后期通过PRODUCT_PROPERTY_OVERRIDES添加属性,是否会被其他部分的代码覆盖? 另外,编译系统处理变量的顺序也可能影响最终结果。PRODUCT_PROPERTY_OVERRIDES可能被后续的赋值覆盖,或者没有被正确应用到所有分区中。例如,有些属性可能只在system分区生效,而系统设置可能从其他分区读取信息。 还需要考虑系统缓存的可能,但用户已经重新编译并刷机,所以缓存的可能性较低。不过,系统设置可能需要重启或者清除数据才能更新显示,但用户应该已经尝试过这些步骤。 总结可能的解决步骤:首先确认PRODUCT_MODEL是否被正确覆盖,因为系统设置可能显示的是ro.product.model。用户当前的PRODUCT_MODEL仍然是原来的值,所以需要同时覆盖ro.product.model。其次,检查所有可能设置设备属性的地方,确保没有遗漏的配置。最后,验证构建后的build.prop文件,确认所有属性是否正确设置。</think>根据您的描述,您在Android 11代码中配置了产品属性但出现显示不一致的问题,以下是逐步分析及解决方案: **一、现象分析** 1. **代码配置**: ```makefile PRODUCT_NAME := ly1024p_ly102c_rk3568_r PRODUCT_DEVICE := ly1024p_ly102c_rk3568_r PRODUCT_MODEL := ly1024p_ly102c_rk3568_r PRODUCT_PROPERTY_OVERRIDES += ro.product.name=POWER ro.product.device=LY_FG123 ``` 2. **实际表现**: - `adb getprop ro.product.device` 返回 `LY_FG123` ✅ - 系统设置显示 `ly1024p_ly102c_rk3568_r` ❌ **二、根本原因** 1. **属性优先级冲突**: - `PRODUCT_MODEL` 变量会直接映射到 `ro.product.model` 属性 - 系统设置界面 (Settings.apk) 优先读取的是 `ro.product.model` 而非 `ro.product.device` 2. **未覆盖关键属性**: 您虽然覆盖了 `ro.product.name` 和 `ro.product.device`,但未覆盖 `ro.product.model` **三、解决方案** 1. **同步修改 PRODUCT_MODEL**: ```makefile PRODUCT_MODEL := LY_FG123 # 原始值为 ly1024p_ly102c_rk3568_r ``` 2. **显式覆盖所有相关属性**: ```makefile PRODUCT_PROPERTY_OVERRIDES += \ ro.product.name=POWER \ ro.product.device=LY_FG123 \ ro.product.model=LY_FG123 ``` **四、验证步骤** 1. 编译后检查 `out/target/product/<device>/system/build.prop`: ```properties ro.product.name=POWER ro.product.device=LY_FG123 ro.product.model=LY_FG123 ``` 2. 烧录后执行: ```bash adb shell "getprop | grep ro.product" ``` **五、补充说明** - **属性继承关系**: $$ro.product.model = PRODUCT\_MODEL$$ $$ro.product.device = PRODUCT\_DEVICE$$ $$ro.product.name = PRODUCT\_NAME$$ - **系统设置显示逻辑**:多数Android实现会优先使用 `ro.product.model` 作为用户可见的设备型号 **六、扩展建议** 若仍不生效,检查以下位置: 1. **vendor层覆盖**:`device/rockchip/ly1024p_ly102c_rk3568_r/` 是否存在硬编码配置 2. **系统应用行为**:确认Settings.apk是否自定义了型号获取逻辑(查看源码中读取的属性名) 通过上述修改系统设置显示的设备型号应与ADB查询结果保持一致。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值