Feature
未读
0. 问题背景我司一个android项目中,只有一个devicename的情况下,需要集成两套power_profile.xml。原因是两者的电池参数存在差异。而我们当前的设计逻辑是使用了missi的rro overlay机制来实现的。但是这种机制是依赖于devicename的,也就是说一个devicename只能适配一个power_profile.xml。而且由于一些限制,我们并不能轻易的修改missi侧的java源码!
1. 方案设计missi的代码我们不能轻易修改,所以我决定将这部分的代码放在vnd侧!
切换overlay apk的触发条件设置为一个property属性!
1.1 编译两套overlay apk两种overlay需要分别定义独立的apk文件,例如:
xxx_1_overlay.apk
xxx_2_overlay.apk
Overlay 文件的核心是 res/xml/power_profile.xml,每个 APK 的内容是不同的功耗参数。
123456789101112project/├── overlays/│ ├── xxx_1/ ...
Android
未读
一、什么是RRO?运行时资源叠加层 (RRO) 是一个软件包,可在运行时更改目标软件包的资源值。例如,安装在系统映像上的应用可能会根据资源值更改其行为。安装在不同分区中的 RRO 可能会在运行时更改应用的资源值,而不是在构建时硬编码资源值。
您可以启用或停用 RRO。您可以通过编程方式设置启用/停用状态,以切换 RRO 更改资源值的功能。RRO 默认处于停用状态(但静态 RRO 默认处于启用状态)。
1.1 叠加资源叠加层的工作原理是将叠加层软件包中定义的资源映射到目标软件包中定义的资源。当应用尝试解析目标软件包中资源的值时,系统转而会返回目标资源映射到的叠加层资源的值。
1.1.1 设置清单如果某个软件包包含 <overlay> 标记作为 <manifest> 标记的子项,该软件包将被视为 RRO 软件包。
必要 android:targetPackage 属性的值用于指明 RRO 想要叠加的软件包的名称。
可选 android:targetName 属性的值用于指明 RRO 想要叠加的目标软件包的可叠加资源子集的名称。如果目标未定义可叠加资源集 ...
Linux内存管理
未读
518b96cda5a6d226d46fb36e3b7f635415d34243feb932e2ab9b6cdb34a622b461f1d272850fb0d9d5f3fd38b3e67b3b21212f99197de9cb1aac12b50b3fb050d433abcfd17bd27df00b51632a5db968b0b6a46f9469c49dedbdb9a81aad23adb2d4e361d19abd0c07154d6075a39d259827613c5736b3dc66203a84ee76ff8cf38f3d6e7c3083a4c2df238c505d32bfb040d947e32be67bd720a2fd0ea544a63c923a67ca8ff2fcf3618d5724cf7629d71522354dbbf888effdca3fd993aa48cd79ee0f2bbf424bc109c8057f098b85fddb5beaad87c70eea32c834a81825416b8f6bd86a68e4c21bff3e62de19823ce180915fc0a516474 ...
6478e0d79d540721c2f229a8c0ffaf8050b1de735c533a5030e437d6ceda08a7261e126e4beb7b6af3d7a443fab6e8568960dc006df73ac30b41ad308397cb5c807c46080087b8e0a5f77e98428b7f0d1849eb1e84e5ccf67a104ade43cd4d5b225a92ab83d6e3e4ad653db44f5cd22e06ca69f5701b579075c636c47f328008b6f68405238edf2b899fe5aae1e33958ed3b92031a931d4920c902c4194504849839e474792d547fe6ebee4bb28bc03b7fb87e2054ff97849c883d7c8a057005ab35d3f9328786ae36dbd8ee34c2add555aeb2a14eefedd87b3457a98b1655e35dba1bd2006e186ae8a42959aaf1620b437098122a053104b ...
Android Issue
未读
一、问题背景我司某项目无法使用adb push push文件到/vendor/firmware_mnt目录。使用的指令以及报错结果如下:
1234567adb rootadb disable-verityadb rebootadb rootadb remountadb shell mount -o rw,remount /vendor/firmware_mntadb push test.txt /vendor/firmware_mnt
输出结果:
1234567891011121314151617181920d:\liuqi\Desktop>adb rootd:\liuqi\Desktop>adb disable-verityVerity is already disabledd:\liuqi\Desktop>adb remountVerity is already disabledRemounted /system as RWRemounted /system_ext as RWRemounted /product as RWRemounted /vendor a ...
Linux Kernel
未读
0. 前言其实本章想要描述的函数的功能和内存的关系并不大,但是在启动流程中,paging_init后,该函数unflatten_device_tree就会被执行。为了启动流程的完整性,也鉴于此函数也确实有必要花时间去介绍。作为Linux BSP驱动工程师我们在适配驱动的流程里,可能就是配置DTS,适配驱动代码,然后两者根据dts里的compatible属性进行匹配,就okay了。那其实是有问题的,从Linux设备驱动模型中我们可以知道,驱动代码中会将驱动注册成struct device_driver。设备树的产生就是为了替代driver中过多的platform_device部分的静态定义,将硬件资源抽象出来,由系统统一解析,这样就可以避免各驱动中对硬件资源大量的重复定义。这样一来,几乎可以肯定的是,设备树中的节点最终目标是转换成struct device,在驱动开发时就只需要添加相应的platform driver部分进行匹配即可。
那DTS的节点如何被创建成struct device的设备的呢?
注意:开机过程中设备树的解析是从setup_arch中开始的,此函数中setup_ ...
Linux内存管理
未读
c77bddbd393245f6fc84666dc3bc9a301dd5654a500fd27b4a22475a6fd3cdd39a3783b63157ab1a5a994bd8ee88067b9d1bd524c38b35de3d37f00d6d87558a17e958e90d93dad28ca784311601801f550f104cc10641902a620c65c2058d1bcb6c2815a4b88bc7bdd63ca2ca1f5726caf83eb13e0310d2b1d54b6e70e88ffcc1bc6343969bd666a58bdf75a92317724dcbeaa2a9fe1a0bc676bbb277f917501a2e096dd8246689ec85a636c9a52941b1dc711c0a3b92c3cace217e9cd3d6c4ed1e04f6a19f8dd2f171efed09ea3b114c3c7a335ad405ad6bcb87e0c0fd4c4436fc740ea01387225305f652a03c89ce0e975e7ea97be54c2 ...
a5f9e468cd850a7207bd1534b43b72bdc3d101f34f917b2fe9ceffd480f676aab998314e1cd4a655faf4762a95d3c6dbd85b0bd85f1836b1ba8b1c5a63c2513cca65f984d8f77c46ba8d6b3f374f86bd6b8d3e45529aea3570bae7094804a6543d0f05b2fb9397650f3bd8fc343b51220fe21e5f4ec16997aad9901ea20fbbc3c8c10b5f0ad05e0ae8b4875c228af30195ac91bd431bc98183f3e1c661649a722e14fa09714eaa9b4a4f71a4431fe14e1dc0d37439ee303aa58f63e249270f8b5e9b8d77c9475c6aea22bcd42989ef6e02e843c748f8ad5233272a295db79905e668c90c33015b39caf34678f6f0155a9bc8f13dbae2e0519 ...
Linux内存管理
未读
800d7394123ceeae05b84cdf14fb2ce395800f461deda553d9e5dff8c6344c6813d0840f8e048f5d925fcca48135b84ad0dd7436ecd3bd13f2bbeff769f32799146ce3ba434b31ae8f6a3e29995bb99b4acdb5ddf4c861a02fe5b3b78c28a2cc3e0356eb51045e60a0b1f0309842ce0c8efebd7938d36a278965a89a21a4201c0b708d530c3b03cce2b7b9b6f913268f053af5a3965bb0a6d89eeec38cbdb4823dbf0fef5afa6464a7ab93b384917cdcc6acaa4cfc89942a7ae50402d82d54688f276560ccb05dee1e350903b83dcc411484ad13cf76272839d54c9998deda6e99e0bb6a9f3cc62768dd36799760bba90da190fe3df65e1d2 ...
Linux内存管理
未读
1e24fe88ee5ff04b44b80e45bfd8f2c5cb28b72fb79f9df30d9b63ac4f373996844bb08b9e27b9d87eab227d5012fc46bb9b395f4cf493d865fd9b53a6ecf5c30eeecd847db255ef569002b85731d26f1e24a2fa9aa675fb9f46bfc8670f78efcd12a82cf96e3fd53ad554a640eeb165eef01b136871a141c2fe69d3110af894a9f633a0363ef470ceaf5b55a1897f36a295d8a80ae8d484cdc34f80986b6eba3f3ab9057899702593e717964dfa79a5911acb77d2bdc3e081a6c8c5dcb212e0a50ed9918bd394580643d6217a531c77d328c9d7f7cd333edce6de84e0f140cf15939bef629e9d7faa813282f9cfd06da5df91ad1228372ae ...