1.idc是什么鳞仙?
idc 是Input Device Configuration的縮寫(xiě)霹娄,輸入設(shè)備配置文件(.idc 文件)包含特定設(shè)備的配置屬性,這些屬性會(huì)影響輸入設(shè)備的行為驰吓。
輸入設(shè)備配置文件通常并非標(biāo)準(zhǔn)外圍設(shè)備(例如 HID 鍵盤(pán)和鼠標(biāo))所必需的杈绸,因?yàn)槟J(rèn)的系統(tǒng)行為通常可確保它們即插即用企软。另一方面,內(nèi)置的嵌入式設(shè)備(尤其是觸摸屏)幾乎總是需要輸入設(shè)備配置文件來(lái)指定其行為饭望。
2.idc位置按順序查閱以下路徑仗哨。
/odm/usr/idc/Vendor_XXXX_Product_XXXX_Version_XXXX.idc
/vendor/usr/idc/Vendor_XXXX_Product_XXXX_Version_XXXX.idc
/system/usr/idc/Vendor_XXXX_Product_XXXX_Version_XXXX.idc
/data/system/devices/idc/Vendor_XXXX_Product_XXXX_Version_XXXX.idc
/odm/usr/idc/Vendor_XXXX_Product_XXXX.idc
/vendor/usr/idc/Vendor_XXXX_Product_XXXX.idc
/system/usr/idc/Vendor_XXXX_Product_XXXX.idc
/data/system/devices/idc/Vendor_XXXX_Product_XXXX.idc
/odm/usr/idc/device-name.idc
/vendor/usr/idc/device-name.idc
/system/usr/idc/device-name.idc
/data/system/devices/idc/device-name.idc
當(dāng)構(gòu)建包含設(shè)備名稱(chēng)的文件路徑時(shí),設(shè)備名稱(chēng)中除“0-9”铅辞、“a-z”厌漂、“A-Z”、“-”或“_”之外的所有字符將替換為“_”斟珊。
3.idc文件常用配置屬性
#=0 外部設(shè)備 =1內(nèi)部設(shè)備
device.internal = 0
#定義:keyboard.layout = <name>
#指定與輸入設(shè)備關(guān)聯(lián)的鍵布局文件的名稱(chēng)苇倡,不包括.kl擴(kuò)展名。 如果找不到此文件囤踩,輸入系統(tǒng)將使用默認(rèn)鍵布局旨椒。
keyboard.layout = qwerty
#定義:keyboard.characterMap = <name>
#指定與輸入設(shè)備關(guān)聯(lián)的鍵字符映射文件的名稱(chēng),不包括.kcm擴(kuò)展名堵漱。 如果找不到此文件综慎,輸入系統(tǒng)將使用默認(rèn)的鍵字符映射。
#在查找期間示惊,名稱(chēng)中的空格將轉(zhuǎn)換為下劃線。
keyboard.characterMap = qwerty
#定義:keyboard.orientationAware = 0 |1
#指定鍵盤(pán)是否應(yīng)對(duì)顯示方向更改做出反應(yīng)愉镰。
#如果值為1米罚,則在關(guān)聯(lián)的顯示方向改變時(shí)旋轉(zhuǎn)方向鍵盤(pán)鍵。
#如果值為0丈探,則鍵盤(pán)不受顯示方向更改的影響录择。
#默認(rèn)值為0。
#方向感知用于支持方向鍵盤(pán)鍵的旋轉(zhuǎn),例如Motorola Droid上的旋轉(zhuǎn)糊肠。 例如辨宠,當(dāng)設(shè)備從其自然方向順時(shí)針旋轉(zhuǎn)90度時(shí),
#KEYCODE_DPAD_UP被重新映射以產(chǎn)生KEYCODE_DPAD_RIGHT货裹,因?yàn)楫?dāng)設(shè)備保持在該方向時(shí)嗤形,“向上”鍵最終指向“右”。
keyboard.orientationAware = 1
#定義:keyboard.builtIn = 0 |1
#指定鍵盤(pán)是否為內(nèi)置(物理連接)鍵盤(pán)弧圆。
#如果設(shè)備名稱(chēng)以-keypad結(jié)尾赋兵,則默認(rèn)值為1,否則為0搔预。
#內(nèi)置鍵盤(pán)的設(shè)備ID始終為0.其他非內(nèi)置鍵盤(pán)將分配唯一的非零設(shè)備ID霹期。
#對(duì)于內(nèi)置鍵盤(pán)使用id為0對(duì)于保持與KeyCharacterMap.BUILT_IN_KEYBOARD字段的兼容性非常重要,該字段指定內(nèi)置鍵盤(pán)的id并且值為0.
#此字段已在API中棄用但較舊 應(yīng)用程序可能仍在使用它拯田。
#無(wú)論此屬性的設(shè)置如何历造,特殊功能鍵盤(pán)(其鍵字符映射指定SPECIAL_FUNCTION的類(lèi)型)將永遠(yuǎn)不會(huì)注冊(cè)為內(nèi)置鍵盤(pán)。
#這是因?yàn)楦鶕?jù)定義船庇,特殊功能鍵盤(pán)不打算用于通用鍵入吭产。
keyboard.builtIn = 1
4.idc代碼流程
Eventhub在打開(kāi)設(shè)備時(shí)會(huì)讀取設(shè)備的idc文件
->Eventhub.openDeviceLocked->loadConfigurationLocked
void EventHub::loadConfigurationLocked(Device* device) {
??? device->configurationFile = getInputDeviceConfigurationFilePathByDeviceIdentifier(
??????????? device->identifier, INPUT_DEVICE_CONFIGURATION_FILE_TYPE_CONFIGURATION);
??? if (device->configurationFile.isEmpty()) {
??????? ALOGD("No input device configuration file found for device '%s'.",
??????????????? device->identifier.name.string());
??? } else {
??????? status_t status = PropertyMap::load(device->configurationFile,
??????????????? &device->configuration);
??????? if (status) {
??????????? ALOGE("Error loading input device configuration file for device '%s'.? "
??????????????????? "Using default configuration.",
??????????????????? device->identifier.name.string());
??????? }
??? }
}
idc文件的加載順序如下,如果找到了idc文件則直接返回不會(huì)再加載后面的idc文件
Vendor_XXXX_Product_XXXX_Version_XXXX.idc
Vendor_XXXX_Product_XXXX.idc
device-name.idc
String8 getInputDeviceConfigurationFilePathByDeviceIdentifier(
??????? const InputDeviceIdentifier& deviceIdentifier,
??????? InputDeviceConfigurationFileType type) {
??? if (deviceIdentifier.vendor !=0 && deviceIdentifier.product != 0) {
??????? if (deviceIdentifier.version != 0) {
??????????? // Try vendor product version.
??????????? String8 versionPath(getInputDeviceConfigurationFilePathByName(
??????????????????? String8::format("Vendor_%04x_Product_%04x_Version_%04x",
??????????????????????????? deviceIdentifier.vendor, deviceIdentifier.product,
??????????????????????????? deviceIdentifier.version),
??????????????????? type));
??????????? if (!versionPath.isEmpty()) {
??????????????? return versionPath;
??????????? }
??????? }
??????? // Try vendor product.
??????? String8 productPath(getInputDeviceConfigurationFilePathByName(
??????????????? String8::format("Vendor_%04x_Product_%04x",
??????????????????????? deviceIdentifier.vendor, deviceIdentifier.product),
??????????????? type));
??????? if (!productPath.isEmpty()) {
??????????? return productPath;
??????? }
??? }
??? // Try device name.
??? return getInputDeviceConfigurationFilePathByName(deviceIdentifier.name, type);
}
String8 getInputDeviceConfigurationFilePathByName(
??????? const String8& name, InputDeviceConfigurationFileType type) {
??? // Search system repository.
??? String8 path;
??? path.setTo(getenv("ANDROID_ROOT"));
??? path.append("/usr/");
??? appendInputDeviceConfigurationFileRelativePath(path, name, type);
#if DEBUG_PROBE
??? ALOGD("Probing for system provided input device configuration file: path='%s'", path.string());
#endif
??? if (!access(path.string(), R_OK)) {
#if DEBUG_PROBE
??????? ALOGD("Found");
#endif
??????? return path;
??? }
??? // Search user repository.
??? // TODO Should only look here if not in safe mode.
??? path.setTo(getenv("ANDROID_DATA"));
??? path.append("/system/devices/");
??? appendInputDeviceConfigurationFileRelativePath(path, name, type);
#if DEBUG_PROBE
??? ALOGD("Probing for system user input device configuration file: path='%s'", path.string());
#endif
??? if (!access(path.string(), R_OK)) {
#if DEBUG_PROBE
??????? ALOGD("Found");
#endif
??????? return path;
??? }
??? // Not found.
#if DEBUG_PROBE
??? ALOGD("Probe failed to find input device configuration file: name='%s', type=%d",
??????????? name.string(), type);
#endif
??? return String8();
}
參考博客:
https://source.android.com/devices/input/validate-keymaps.html
https://www.cnblogs.com/guolinjie/p/10791991.html
Android idc文件配置
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門(mén)刻剥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)遮咖,“玉大人,你說(shuō)我怎么就攤上這事造虏∮蹋” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵漓藕,是天一觀的道長(zhǎng)陶珠。 經(jīng)常有香客問(wèn)我,道長(zhǎng)享钞,這世上最難降的妖魔是什么揍诽? 我笑而不...
- 正文 為了忘掉前任诀蓉,我火速辦了婚禮,結(jié)果婚禮上暑脆,老公的妹妹穿的比我還像新娘渠啤。我一直安慰自己,他們只是感情好添吗,可當(dāng)我...
- 文/花漫 我一把揭開(kāi)白布沥曹。 她就那樣靜靜地躺著,像睡著了一般碟联。 火紅的嫁衣襯著肌膚如雪妓美。 梳的紋絲不亂的頭發(fā)上,一...
- 那天鲤孵,我揣著相機(jī)與錄音壶栋,去河邊找鬼。 笑死普监,一個(gè)胖子當(dāng)著我的面吹牛贵试,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鹰椒,決...
- 文/蒼蘭香墨 我猛地睜開(kāi)眼锡移,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了漆际?” 一聲冷哼從身側(cè)響起,我...
- 序言:老撾萬(wàn)榮一對(duì)情侶失蹤夺饲,失蹤者是張志新(化名)和其女友劉穎奸汇,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體往声,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡擂找,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了浩销。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贯涎。...
- 正文 年R本政府宣布败明,位于F島的核電站,受9級(jí)特大地震影響太防,放射性物質(zhì)發(fā)生泄漏妻顶。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望讳嘱。 院中可真熱鬧幔嗦,春花似錦、人聲如沸沥潭。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)叛氨。三九已至呼渣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間寞埠,已是汗流浹背屁置。 一陣腳步聲響...
- 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像饭冬,于是被迫代替她去往敵國(guó)和親使鹅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- Android在外接物理鍵盤(pán)時(shí),如何強(qiáng)制調(diào)用系統(tǒng)軟鍵盤(pán)炊苫? 第一次寫(xiě)裁厅,寫(xiě)的不好請(qǐng)見(jiàn)諒 參考: http://blog...
- 1.contexts contexts(self): Returns the contexts within th...
- 前言: Appium Python API全集,不知道哪個(gè)大神整理的侨艾,這里貼出來(lái)分享給大家执虹。 1.contex...