​在**/device/qcom/****/**.mk中增加PRODUCT_CHARACTERISTICS =default 不会影响其他功能.一个重要原因是该属性最终默认值即为default.

1.影响范围


首先在**/device/qcom/**/**.mk中加入PRODUCT_CHARACTERISTICS =default 后影响的范围是:

MIUI_TARGET_DEVICE_DIR := **/device/qcom/**

同时也会覆盖:
include **/device/common/common.mk
$(call inherit-product, device/qcom/**/**.mk​)

其中device/qcom/**/**.mk​的影响范围是:

DEVICE_PACKAGE_OVERLAYS := device/qcom/**/overlay (该路径下没有与PRODUCT_CHARACTERISTICS相关的逻辑).
$(call inherit-product, device/qcom/common/common.mk)
common.mk中对该属性会进行赋值,但结果没变.

​2.分析PRODUCT_CHARACTERISTICS的作用机制

(1)在/v6-kk-**-dev/**/device/common/common.mk中会对PRODUCT_CHARACTERISTICS进行赋值.只有在机型为can**, canc**_ct, vir**,virg**_ct,ke**o​时该属性才会被赋值为nosdcard.

      ifneq (,$(filter $(TARGET_PRODUCT),can**, canc**_ct, vir**,virg**_ct,ke**o​))PRODUCT_CHARACTERISTICS := nosdcard
(2)之后在/v6-kk-**-dev/build/core/product_config.mk文件中根据PRODUCT_CHARACTERISTICS​的属性对TARGET_AAPT_CHARACTERISTICS​赋值,
可以看到如果PRODUCT_CHARACTERISTICS​为空,则TARGET_AAPT_CHARACTERISTICS为default.
     
       ifeq ($(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_CHARACTERISTICS),)      TARGET_AAPT_CHARACTERISTICS := default      else      TARGET_AAPT_CHARACTERISTICS := $(strip $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_CHARACTERISTICS))     ​ endif
(3)/v6-kk-**-dev/build/core/Makefile会执行脚本/v6-kk-**-dev/build/tools/buildinfo.sh​,
将TARGET_AAPT_CHARACTERISTICS的值赋予ro.build.characteristics,而这个属性在Android编译完成后最终写入到/system目录下的build.prop文件
,运行时可通过property_get()[c/c++域] / SystemProperties_get*()[Java域]来读取:

echo "ro.build.characteristics=$TARGET_AAPT_CHARACTERISTICS"

ro.build.characteristics这个属性用途有:字符串中的product属性,判断是手机还是平板电脑的函数getDeviceType().

PRODUCT_CHARACTERISTICS 详解相关推荐

  1. 从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)

    首先,Git已经并不只是GitHub,而是所有基于Git的平台,只要在你的电脑上面下载了Git,你就可以通过Git去管理"基于Git的平台"上的代码,常用的平台有GitHub.Gi ...

  2. JVM年轻代,老年代,永久代详解​​​​​​​

    秉承不重复造轮子的原则,查看印象笔记分享连接↓↓↓↓ 传送门:JVM年轻代,老年代,永久代详解 速读摘要 最近被问到了这个问题,解释的不是很清晰,有一些概念略微模糊,在此进行整理和记录,分享给大家.在 ...

  3. docker常用命令详解

    docker常用命令详解 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备忘记录下来. 根据自己的理解,总的来说分为以下几种: Doc ...

  4. 通俗易懂word2vec详解词嵌入-深度学习

    https://blog.csdn.net/just_so_so_fnc/article/details/103304995 skip-gram 原理没看完 https://blog.csdn.net ...

  5. 深度学习优化函数详解(5)-- Nesterov accelerated gradient (NAG) 优化算法

    深度学习优化函数详解系列目录 深度学习优化函数详解(0)– 线性回归问题 深度学习优化函数详解(1)– Gradient Descent 梯度下降法 深度学习优化函数详解(2)– SGD 随机梯度下降 ...

  6. CUDA之nvidia-smi命令详解---gpu

    nvidia-smi是用来查看GPU使用情况的.我常用这个命令判断哪几块GPU空闲,但是最近的GPU使用状态让我很困惑,于是把nvidia-smi命令显示的GPU使用表中各个内容的具体含义解释一下. ...

  7. Bert代码详解(一)重点详细

    这是bert的pytorch版本(与tensorflow一样的,这个更简单些,这个看懂了,tf也能看懂),地址:https://github.com/huggingface/pytorch-pretr ...

  8. CRF(条件随机场)与Viterbi(维特比)算法原理详解

    摘自:https://mp.weixin.qq.com/s/GXbFxlExDtjtQe-OPwfokA https://www.cnblogs.com/zhibei/p/9391014.html C ...

  9. pytorch nn.LSTM()参数详解

    输入数据格式: input(seq_len, batch, input_size) h0(num_layers * num_directions, batch, hidden_size) c0(num ...

最新文章

  1. 从程序员到架构师的最佳技术成长之路
  2. 通过微软的cors类库,让ASP.NET Web API 支持 CORS
  3. 使用scp、ssh等不用输入密码
  4. 【答案放在最后,看题看不到答案】2019年上半年软件设计师 上午选择题
  5. 运营商主动关闭WLAN热点背后:关键是找准产业位置
  6. 专题导读:大数据整理
  7. 如何下载python3.6版本-python最新版本免费下载-python 3.6.3正式版下载__飞翔下载
  8. 大数据之-Hadoop3.x_MapReduce_序列化案例FlowReducer---大数据之hadoop3.x工作笔记0099
  9. 颠覆智能手机的下一代设备已出现?
  10. php是根据html中的值查询数据条件_FleaPHP框架数据库查询条件($conditions)写法总结...
  11. 连接黑屏_解决地下城与勇士PK服登录游戏卡在“正在连接服务器”的黑屏界面...
  12. bbs论坛 Android客户端简单设计
  13. sierpinski三角形的维数_分形维数算法
  14. 【自学与引导】 大数据技术 技能课程总结篇
  15. uni-app实战之社区交友APP(16)模块封装、文章和话题功能实现
  16. Android画正N边形战力图
  17. Docker——数据卷的概述和使用
  18. API接口怎么使用(教你使用api接口获取数据)
  19. 英特尔推出物联网零售平台 RRP,并将在零售业投资 1 亿美元
  20. spring-day04_JdbcTemplate声明式事务

热门文章

  1. 剑指Offer II --- 2021/9/2
  2. 人们愿意购买亲手摸过的商品
  3. hp打印机无法与计算机,HP打印机无法连接到计算机
  4. innodb buffer pool管理--free list
  5. SWAN测试用例botan/net2net-ed25519
  6. android的适配器作用,适配器模式安卓中的应用
  7. TINA导入SPICE模型
  8. LTspice基础教程-022.从MOS管提取参数生成spice模型
  9. 【好奇心驱动力】ESP8266从零开始折腾记录
  10. 移动硬盘出现乱码文件夹的解决方法