Chromium 的開發環境中修改了java

在 Chromium 的開發環境中,autoninja(底層調用 ninja 或 siso)是一個非常智慧的增量編譯系統。

當你修改了 Java 檔案後,為什麼有時候會出現 “nothing to do”?這通常是因為編譯系統認為你的修改沒有觸發後續的重建鏈條。

以下是常見的原因與解決方案:

  1. 為什麼會出現 “nothing to do”?

Java 檔案未被正確納入構建腳本 (BUILD.gn):
如果你新增了一個 .java 檔案,但沒有在對應的 BUILD.gn 檔案中將它加入到 sources 清單中,編譯系統會完全忽略這個檔案。即便你修改了內容,它也不會觸發編譯。

資源與代碼隔離:
有些 Android 資源(如 res/ 資料夾下的 XML)修改後,如果沒有正確觸發對應的 R.java 生成,編譯系統可能認為 Java 代碼沒有變動。

中間產物緩存 (Cache) 導致的誤判:
如果你使用了 siso,它有時會高度依賴檔案系統的狀態。如果檔案時間戳異常,或者 siso 認為編譯的目標檔案(如 .class 或 .dex)已經是最新的,它就不會重新執行。

編譯目標不精確:
如果你只改了 Java,但運行的是編譯 content_shell_apk 的指令,Ninja 應該會自動檢測依賴。如果它判定該 Java 類別所在的 Jar 包沒有更新,就會報 “nothing to do”。

  1. 如何正確重新編譯 Java?

為了確保你的修改生效,建議採取以下步驟:

A. 確保目標檔案包含在內

打開你的 content_shell 對應的 BUILD.gn,確保你修改的檔案確實列在 sources 列表中:

code
Gn
download
content_copy
expand_less
android_library(“my_library”) {
sources = [
“java/src/org/chromium/content_shell/MyNewFile.java”, # 必須要在這裡!
]

}
B. 強制清理並重構(最直接的方法)

如果你確信修改了代碼但 Ninja 沒反應,可以強制清理相關的 stamp 檔案(編譯系統用來標記最後編譯時間的小檔案):

code
Bash
download
content_copy
expand_less

針對特定模組重新編譯(更推薦)

autoninja -C out/webtv_shell content_shell_apk -t clean

然後重新編譯

autoninja -C out/webtv_shell content_shell_apk
C. 使用 -v (Verbose) 查看細節

透過增加 -v 參數,你可以看到編譯系統到底在檢查什麼,以及為什麼它跳過了你的目標:

code
Bash
download
content_copy
expand_less
autoninja -C out/webtv_shell -v content_shell_apk

這能幫你確認它是否真的有掃描到你修改的 Java 檔案。

  1. 給你的開發建議(加快除錯)

編譯整個 content_shell_apk 非常耗時,如果你只是修改 Java 代碼,可以嘗試:

只編譯 Java 部分:
不要每次都重編整個 APK。你可以嘗試只編譯相關的目標,例如:
autoninja -C out/webtv_shell :content_shell_java
(這取決於你的 BUILD.gn 定義的目標名稱)

清理目標資料夾:
如果 ninja 徹底失效,這招最管用:

code
Bash
download
content_copy
expand_less

找到編譯產物並刪除 class 相關文件

find out/webtv_shell -name “*.class” -delete

然後再執行編譯

autoninja -C out/webtv_shell content_shell_apk

注意 R.java:
如果你修改的是 Android XML 資源,記得編譯系統需要重新運行 aapt2 來生成 R.java。如果這步沒過,你的 Java 代碼中對資源的引用可能會指向舊的 ID,導致行為不如預期。

總結

如果你修改了 Java 後出現 “nothing to do”,最可能的兇手是 BUILD.gn 沒有把你的 Java 檔案加進去,或者你修改的檔案路徑與編譯系統定義的 sources 路徑不匹配。請檢查 BUILD.gn,然後嘗試 autoninja -C out/webtv_shell -v content_shell_apk 查看詳情。

No Comments

Send Comment Edit Comment


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
Previous
Next