1. 程式人生 > >android系統資源新增

android系統資源新增

android新增系統資源
原始檔路徑: /frameworks/base/core/res/res
編譯後路徑: /out/target/product/專案名稱/system/framework/framework-res.apk
R.Java檔案: /out/target/common/R/com/android/internal/R.Java

資源的新增:
如在framework-res中新增一個共有字串,需修改以下檔案:
    frameworks/base/core/res/res/values/public.xml
    frameworks/base/core/res/res/values/strings.xml

如在framework-res中新增一個私有字串,需修改以下檔案:
    frameworks/base/core/res/res/values/symbols.xml
    frameworks/base/core/res/res/values/strings.xml 

新增完成後進行 mmm framework/base/core/res 編譯,然後檢查是否新增到R.java檔案中.
新增成功後 在程式碼中使用 com.android.internal.R.string.xxx 來引用.

在對系統新增了一些資源進行原始碼編譯時會遇到 com.android.internal.R.XX can not find 的問題,可使用(make update-api)來更新api,
./frameworks/base/api/current.txt 會被重新生成.

public.xml 與 symbols.xml

public.xml中宣告的是公共資源,所有應用程式都可以呼叫,symbols.xml中宣告的是非公共資源,僅供系統內部使用,不對app開放.
public.xml 中欄位格式為 <public type="attr" name="networkSecurityConfig" id="0x01010527" />
symbols.xml中欄位格式為<java-symbol type="string" name="use_times"/>
symbols.xml是在4.2後,將系統私有的資源分離成了單獨的檔案.
若將私有的宣告新增在了public.xml檔案中,則編譯時會報錯,可採用 make framework 2>&1 | sed -n -f MakeJavaSymbols.sed | sort -u ,
此命令將會列出所有新增的私有資源,並將它們拷貝到symbols.xml中.

另外:若果新增其他資源,如layout,drawable 需要在對應的路徑下的檔案新增欄位即可.

資源編譯:
首先到res目錄下面執行mm,得到framework-res.apk
然後在framwork中使用了新新增資源的目錄下執行mm, 生成 *.jar
最後到/framework/base 下執行mm 重新生成最新的 framework.jar