修改 framework 代码的经验和踩过的坑
点击打开链接
修改 framework 代码的经验和踩过的坑
1 经验
- 源码主要目录结构
目录 | 子目录 | 子目录 | 描述 |
---|---|---|---|
android/frameworks/base | core | java/com/android/ 和 java/android/view/ | 音量调节的代码位置;涉及部分关机逻辑代码;android 的核心源代码 |
- | packages | SystemUI | SystemUI 目录是亮度调节、WiFi状态改变的代码;android 系统界面代码 |
- | policy | src/com/android/internal/policy/impl | 系统关机界面的部分代码 |
Note:具体 Java 文件和布局文件位置在后文说明。以下所有的命令都是在 Android 目录中执行。
- 配置环境变量
初次进入 Ubuntu 系统,或者切换用户后,需要重新配置编译环境,命令如下:
source build/envsetup.sh
lunch mgm-eng
- mmm 编译
mmm 命令只能编译有 Android.mk 文件的目录,并且它有个特点,我称之为最小单位编译,什么意思呢,就是最小单位编译咯。。。
啊,,,啊,壮士,请放下你手中愤怒的西瓜刀!!!听我解释…
所谓最小单位编译,就是如果你改了一个目录的代码,比如修改了 android/frameworks/base/core/res/res/layout/ 目录下的布局文件,而该路径中,base/ 目录和第一个 res/ 目录都包含 Android.mk 文件,这个时候,你必须编译 res/ 目录,命令如下:
mmm frameworks/base/core/res/
编译后的文件路径如下图所示:(图片仅供参考,实际情况实际考虑)
Note:上图编译的路径是:frameworks/base/packages/SystemUI/
- 文件推送
代码编译后,会形成一个 jar 文件或 apk 文件,这个时候就可以推送到设备中进行测试,但是,但是来了哦,在推送之前一定要先进行拉取,先把设备中的对应文件进行备份保存,命令如下:
//拉取 framework.jar 和 framework2.jar 进行备份保存
adb pull /system/framework/framework.jar
adb pull /system/framework/framework2.jar//拉取 SystemUI.apk 进行备份保存
adb pull /system/priv-app/SystemUI.apk
拉取的文件路径问题,请参考上一步图片中的路径,都是对应的: /system/…
拉取保存后,就可以放心的推送了,哈哈:
adb push out/target/product/.../system/priv-app/SystemUI.apk /system/priv-app/
推送完成后,就可以重启设备,查看修改效果了,命令如下:
adb shell
stop && start
//查看设备log的命令:logcat
//退出命令:exit
2 令人不爽的坑
- 推送,拉取时不成功
在推送或拉取时,可能报 read-only 的错误,这个表示设备没有挂载成功,执行命令挂载即可:
adb remount
- 测试时莫名奇妙崩溃
这是个大坑,测试的时候,程序崩溃,查看日志有错误日志,但是跟我修改的代码没有半毛钱的关系,开始不太在意,后来折腾了一个下午,抱着最后的希望,将所有能推的 jar 包和 apk 文件都推送了一遍,卧槽槽槽,居然成了~~我一脸懵逼的状态…
后来琢磨出来,可能是从新编译的包,其他地方的一些资源引用不成功导致。还是上面的例子,如果你修改了 android/frameworks/base/core/res/res/layout/ 目录下的布局文件,编译完 res/ 目录后,还需要编译 base/ 目录,然后两次编译生成的 jar 包和 apk 文件,都要推送,才能确保万无一失。
- 第一次拿设备推送
这是上一个问题的升级版,如果你只推送你需要测试的 jar 包或 apk 文件,你也会一脸懵逼的,设备会有莫名的错误日志,正在你怀疑系统出问题的时候,就差说出 wtf 的时候,你把所有修改过的 jar 包和 apk 文件都进行推送后,bug 好了。。。好吧,我错了,系统赢了。
由于公司测试设备很紧俏,你测试的时候,不一定就是上次测试的设备,这个时候,如果你只 push 你需要测试的 jar 包,系统 jar 包之间互相引用的时候,会出现找不到资源的错误,so,你要将所有修改过的 jar 包和 apk 文件都进行 push,目前文件列表如下:
framework.jar
framework2.jar
framework-res.apk
android.policy.jar
services.jar
SystemUI.apk
- 设备启动,界面不显示
电源的电压不够,设备带不起来
- 设备连接不成功,不识别
usb 连接线太长,电阻较大,电流不够
- 相关代码路径
音量调节定位java文件,740行左右:
android/frameworks/base/core/java/android/view/VolumePanel.java(280行)
布局文件:
core/res/res/layout/volume_adjust_item.xml core/res/res/layout/volume_adjust.xml
亮度调节:
android/frameworks/base/packages/SystemUI/src/com/android/systemui/settings/ToggleSlider.javapackages/SystemUI/res/layout/status_bar_toggle_slider.xmlpackages/SystemUI/res/layout/quick_settings_brightness_dialog.xml
关机界面:
android/frameworks/base/policy/src/com/android/internal/policy/impl/GlobalActions.javaandroid/frameworks/base/core/java/com/android/internal/app/AlertController.javabase/services/java/com/android/server/power/ShutdownThread.javabase/core/res/res/values/symbols.xml
wifi无网浮层提示:
frameworks/base/services/java/com/android/server/wifi/WifiNotificationController.javapackages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.javapackages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java
修改 framework 代码的经验和踩过的坑相关推荐
- 第一次安装win10+ubuntu双系统的经验及踩过的坑
第一次安装win10+ubuntu双系统的经验及踩过的坑 Windows + Ubuntu 16.04 ---> 双系统安装及删除 工具 分区 制作启动u盘 安装ubuntu 双系统引导 ubu ...
- java telephony jar,android – 修改framework.jar中的java代码
我手机上的手机存在与MVNO(移动虚拟网络操作符)的问题.基本上这意味着我的数据连接仅在漫游时有效.这是一个已经在几个roms上修复的已知问题(但不是我的). 为了解决这个问题,我想修改framewo ...
- 论初次修改 Android framework 代码
点击打开链接 论初次修改 Android framework 代码 背景 公司产品需求,需要修改系统 framework 层的部分界面显示,包括声音调节.亮度调节.长按电源关机等. 准备 我并不是白手 ...
- android APP隐藏NavigationBar,通过修改framework隐藏/显示 navigation bar
android APP隐藏NavigationBar 1. 简介 在Android4.4.2(KITKAT<Build.VERSION_CODES.KITKAT>)之前,只能设置: 1)V ...
- ABP Framework 研习社经验总结(6.28-7.2)
ABP Framework 研习社经验总结(6.28-7.2) 研习社初衷 在翻译 <实现领域驱动设计>-- 基于 ABP Framework 实现领域驱动设计实用指南 时,因为DDD理论 ...
- Spring boot升级到2.3.2.Release和Spring framework升级到5.28.Release踩过的坑
目录 1. 利用下面方法启动spring boot 项目是系统参数不生效 2. org.drools.template.parser.DecisionTableParseException: Fail ...
- gradle 修改java代码_自定义一个gradle插件动态修改jar包Class文件
动态修改jar包中的class文件,预埋占位符字符串,在编译代码时动态植入要修改的值.记录一下整个过程及踩过的坑. 创建一个Android项目,再创建一个Android library,删掉里面所有代 ...
- ShardingSphere笔记(一): 经验和踩坑总结
ShardingSphere笔记(一): 使用经验总结 文章目录 ShardingSphere笔记(一): 使用经验总结 一.背景 框架选择 二.ShardingSphere-jdbc 只是一个帮助你 ...
- 我的代码重构经验(转载)
链接:https://www.cnblogs.com/clover-toeic/p/3842758.html 说明 本文在<MDU某产品OMCI模块代码质量现状分析>一文的基础上,分享作者 ...
最新文章
- 前端开发模式--MV*
- android原理揭秘系列之VacantCell缓存
- BeautifulSoup 根据文本内容反查标签
- 【原创】TLV5618芯片驱动程序
- Logistic regression--转
- 三种CDN调度系统实现原理详解
- 【Leetcode | 顺序刷题 】二分查找目录
- 谁优谁劣?——AMD与Intel产品对比分析
- Jmeter----5.1 设置中文
- CSharp设计模式读书笔记(3):抽象工厂模式(学习难度:★★★★☆,使用频率:★★★★★)...
- MVC 3 基本操作增加修改
- 阿里云搭建CDH集群配置邮箱告警
- 【故障诊断分析】基于matlab概率神经网络柴油机故障诊断【含Matlab源码 1754期】
- 如何用Matlab求不定积分
- 【荐课】10分钟速成课:经济学
- 2022-2028全球独立水疗浴缸行业调研及趋势分析报告
- Mongodb Mysql 小测试 (To Be Continued)
- 【0513】数字签名
- Python编程之文本颜色设置
- Flutter网络请求
热门文章
- jdk jre jvm三者之间的关系
- 052_Drawer抽屉
- 006_Redis的List数据类型
- 086_html5Input类型
- python requests text content_python request text 和 content的区别
- swapCursor vs changeCursor, what’s the difference?
- 自定义控件:下拉刷新
- Android序列化与反序列化
- 开关电源反馈环路设计matlab,开关电源控制环路设计(初级篇).pdf
- python导入自己的模块_python导入自定义模块