關於framework-res中字符串添加

    在framework-res中添加字符串test_string,修改以下文件:

    frameworks/base/core/res/res/values/public.xml

    frameworks/base/core/res/res/values/strings.xml


    編譯(mmm framework/base/core/res -B),之後檢驗是否將test_string添加到了R.java,查看:

    out/target/common/R/com/android/internal/R.java

    out/target/common/R/android/R.java

    test_string已經被生成爲R.string類中的成員變量,說明添加成功。


    然後在PhoneWindowManager中引用com.android.internal.R.string.test_string,編譯(mmm framework/base/policy),報找不到符號的錯誤。

    嘗試更新api聲明(make update-api),./frameworks/base/api/current.txt 被重新生成。再編譯policy,通過。

    查看./frameworks/base/api/current.txt, public static final class R.string中自動生成了:

    

  public static final class R.string {
    ctor public R.string();
	//....
    field public static final int test_string = 17039392; // 0x1040020
	//...
  }


        make update-api更新的是公共api,如果僅添加framework內部使用的api、資源,應該沒有必要每次都update-api,說明資源的添加方法還是有問題。

        經查證,大部分字符串沒有在public.xml中聲明,而是在./frameworks/base/core/res/res/values/symbols.xml中被聲明。而symbols中聲明的字符串ID沒有在current.txt中找到,應該是framework內部使用的非公共資源。因此,在framework中添加一個內部使用的字符串,僅需修改:

    frameworks/base/core/res/res/values/symbols.xml

    frameworks/base/core/res/res/values/strings.xml

    而添加一個所有應用程序都可以調用到的字符串資源,則需要修改:

    frameworks/base/core/res/res/values/public.xml

    frameworks/base/core/res/res/values/strings.xml

    另外需要注意的是,修改xml後最好強制重新編譯framework-res(mmm framework/base/core/res -B),以免出現R.java沒有重新生成的問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章