Android系統添加config.xml 新配置

在平常系統開發中,常常須要在adroid的framework修改或添加本身的配置。例如在config.xml 添加一個新的變量。我這邊測試發現若是隻是簡單的添加配置項,在代碼裏面怎麼也訪問不到。爲了解決這個問題仔細看了一下代碼,最終發現須要在public.xml 定義才能夠。html

下面用一個例子來講明一下。java

1.在framework/base/core/res/res/valus/config.xml 添加默認輸入配置:android

<!-- 
	set default inputmethod. 
	-->
	<string translatable="false" name="config_def_input_method">com.taypo.android.trskb/.TRSoftKeyboard</string>

這是默認輸入法爲土耳其語。api

修改後,須要在framework/base/core/res/res z執行mm 編譯一下修改。函數

完成後,croot到根目錄,執行make update-api 更新一下api。
測試

2.若是使用這個配置項code

我這邊在framework/base/service/java/com/android/interanl/InputMethodManangerService.java 中的resetDefaultIMeLocked函數使用這個變量server

private void resetDefaultImeLocked(Context context) {
        // Do not reset the default (current) IME when it is a 3rd-party IME
        if (mCurMethodId != null
                && !InputMethodUtils.isSystemIme(mMethodMap.get(mCurMethodId))) {
            return;
        }


        InputMethodInfo defIm = null;
		String id=context.getResources().getString(com.android.internal.R.string.config_def_input_method);
		Slog.i(TAG, "internal.id: " + id);
        for (InputMethodInfo imi : mMethodList) {

				if(imi.getId().equals(id)) defIm=imi;
			
					
        	}
			
          /*  if (defIm == null) {
                if (InputMethodUtils.isValidSystemDefaultIme(
                        mSystemReady, imi, context)) {
                    defIm = imi;
                    Slog.i(TAG, "Selected default: " + imi.getId());
                }
            }
        }
        if (defIm == null && mMethodList.size() > 0) {
            defIm = InputMethodUtils.getMostApplicableDefaultIME(
                    mSettings.getEnabledInputMethodListLocked());
            Slog.i(TAG, "No default found, using " + defIm.getId());
        }
        */
        if (defIm != null) {
            setSelectedInputMethodAndSubtypeLocked(defIm, NOT_A_SUBTYPE_ID, false);
        }
    }

這樣使用很簡單吧,一開始我覺得就是這樣,查了不少資料你們都是這樣使用的。最後編譯吧報了以下錯誤xml

frameworks/base/services/java/com/android/server/InputMethodManagerService.java:726: 找不到符號
符號: 變量 config_def_input_method
位置: 類 com.android.internal.R.string
        String id=context.getResources().getString(com.android.internal.R.string.config_def_input_method);htm

可是我明明定義了,爲何仍是找不到呢。

解決方案:

1.在framework/base/core/res/res/values/public.xml文件裏增長對這些string的聲明。

2.framework/base/core/res/res/ 下mm編譯

3.到根目錄下執行make update-api 更新api。

<public type="string" name="config_def_input_method" id="0x01040018" />

注意在 裏面的id時一個遞增的值,在系統中是惟一的,千萬不要重複。

到此,在變異inputmethodmanagerService.java 就能夠pass啦。

相關文章
相關標籤/搜索