修改 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/ 目錄,命令如下:
編譯后的文件路徑如下圖所示:(圖片僅供參考,實際情況實際考慮)
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 shell stop && start //查看設備log的命令:logcat //退出命令:exit2 令人不爽的坑
- 推送,拉取時不成功
在推送或拉取時,可能報 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.xmlwifi無網浮層提示:
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 代码的经验和踩过的坑的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android5.1修改以太网MAC地址
- 下一篇: 论初次修改 Android framew