修改 framework 代码的经验和踩过的坑
来源:互联网 发布:办公楼pert网络布线图 编辑:程序博客网 时间:2024/05/17 06:49
点击打开链接
修改 framework 代码的经验和踩过的坑
1 经验
- 源码主要目录结构
Note:具体 Java 文件和布局文件位置在后文说明。以下所有的命令都是在 Android 目录中执行。
- 配置环境变量
初次进入 Ubuntu 系统,或者切换用户后,需要重新配置编译环境,命令如下:
source build/envsetup.shlunch 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.jaradb 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 shellstop && 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.jarframework2.jarframework-res.apkandroid.policy.jarservices.jarSystemUI.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 代码的经验和踩过的坑
- 修改 framework 代码的经验和踩过的坑
- 今天修改代码的经验
- 快速编译修改过的PUBLIC代码
- 快速编译修改过的PUBLIC代码
- 快速编译修改过的PUBLIC代码
- 快速编译修改过的PUBLIC代码
- 快速编译修改过的PUBLIC代码
- 日历经代码过修改的
- 快速编译修改过的PUBLIC代码
- 初次使用Entity Framework踩过的坑
- Android framework的一些经验
- framework.js的修改
- 四极管:wince快速编译修改过的PUBLIC代码
- flask踩过的坑,静态资源修改没有生效
- 代码重构的实战经验和那些坑
- verilog代码的一些经验和小结
- webpack使用和踩过的坑
- 3
- Shell/Bash/git/github
- 如何查看电脑CPU的核心数
- error C2248: ***: 无法访问 private 成员 可能出现的错误方向
- 解析图片流
- 修改 framework 代码的经验和踩过的坑
- 继穿越火线后的又一传奇:Final Approach
- 5
- 策略模式
- jsp ----- 数据交互 继续
- PHPStorm永久激活方法及汉化方法
- ora-00205:系统找不到控制文件
- vmware kali虚拟机无法用NAT模式上网
- Codeblocks配置SDCC实现51单片机定时器功能(proteus仿真)