在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沒有重新生成的問題。