日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

修改 framework 代码的经验和踩过的坑

發布時間:2025/4/16 编程问答 63 豆豆
生活随笔 收集整理的這篇文章主要介紹了 修改 framework 代码的经验和踩过的坑 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

點擊打開鏈接

修改 framework 代碼的經驗和踩過的坑

1 經驗

  • 源碼主要目錄結構
目錄子目錄子目錄描述
android/frameworks/basecorejava/com/android/ 和 java/android/view/音量調節的代碼位置;涉及部分關機邏輯代碼;android 的核心源代碼
-packagesSystemUISystemUI 目錄是亮度調節、WiFi狀態改變的代碼;android 系統界面代碼
-policysrc/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 代码的经验和踩过的坑的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。