# C API用户指导 ## 基础知识 了解C API基础知识,请å‚考《[Native API入门](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/native-api-intro.md)》。 ## 接å£å¼€æ”¾ç–ç•¥ ### ä¸å¼€æ”¾åŽŸåˆ™ 1. åº”ç”¨ç”Ÿæ€æä¾›çš„æ ¸å¿ƒç‰¹æ€§åªå¼€æ”¾ArkTS API,ä¸å¼€å‘C API。 2. ä¸å¼€å‘ArkUIçš„C API。 3. ä¸å¼€å‘硬件底层接å£ï¼ˆHDI)C API。 4. ä¸å¼€æ”¾å‘½ä»¤è¡ŒæŽ¥å£C API。 ### 开放原则 5. 高性能ã€å¯†é›†è®¡ç®—业务场景主动开放C API,例如:需è¦é«˜æ€§èƒ½çš„IOã€CPU密集计算ç‰åœºæ™¯ï¼›éŸ³è§†é¢‘ç¼–è§£ç ã€å›¾å½¢è®¡ç®—ç‰åœºæ™¯ã€‚ 6. 应用生æ€ä¸šåŠ¡ä¾èµ–的场景,主动开放高阶C APIã€‚ä¾‹å¦‚ï¼šå¯¹æ ‡ç«žå“,媒体高阶C API。 7. åº”ç”¨ç”Ÿæ€æ¡†æž¶ä»¥æ¥çš„场景,按需开放C API。例如:按需开放Unity/electron/CFE框架ä¸ä¾èµ–çš„C API。 8. è¡Œä¸šçº¦å®šæˆ–è€…æ ‡å‡†è¦æ±‚的场景按需开放C API。æ¤ç±»C API独立å‘å¸ƒï¼Œä¸æ”¾å…¥OpenHarmony C APIä¸ã€‚ä¾‹å¦‚ï¼šé‡‘èžæˆ–è€…å®‰å…¨è¡Œä¸šé«˜å¯†åŠ å¯†ç®—æ³•ç‰ï¼ŒæŒ‰éœ€ç‹¬ç«‹å‘布。 ### å‰å‘兼容性原则 9. C APIçš„å‰å‘兼容性原则与ArkTS APIç–ç•¥ä¿æŒä¸€è‡´ã€‚CIæµç¨‹ä¸ä¼šä½¿ç”¨è‡ªåŠ¨åŒ–å·¥å…·è¿›è¡Œçœ‹æŠ¤ã€‚ ## C API接å£è®¾è®¡è§„范 本规范是在《[OpenHarmony APIæ²»ç†ç« 程](https://gitee.com/openharmony/docs/blob/master/zh-cn/design/OpenHarmony-API-governance.md)》《[OpenHarmony API社区规范](https://gitee.com/openharmony/docs/blob/master/zh-cn/design/OpenHarmony-API-quality.md)》的基础上,对C API设计进行的一些补充。在C API接å£è®¾è®¡ä¸ŠåŒæ—¶æ»¡è¶³æ¤ä¸‰ä»½è§„范。 ### 设计规则 * ã€è§„则】C APIç›¸å…³çš„æŽ¥å£æ–‡ä»¶ï¼ŒåŒ…嫿ޥå£åˆ—表文件ndk.json,头文件,编译构建脚本三部分;这些内容必须放置在interface_sdk_c仓ä¸ï¼Œä¸èƒ½å¯¹å¤–产生ä¾èµ–ã€‚ä¸‰æ–¹åº“æŽ¥å£æš´éœ²è§„则åŒè‡ªç ”ä»“ï¼ŒæŽ¥å£æ˜¯å¤„ç†è¿‡çš„æŽ¥å£æ–‡ä»¶ï¼Œä¸æ˜¯ä¸‰æ–¹åº“原生文件。 * ã€è§„则】接å£å‘½å必须符åˆã€Š[C API接å£ç¼–ç 规范](./capi_naming.md)》。 * ã€è§„则】需è¦å‘布的接å£éœ€è¦æ˜Žç¡®åœ¨ndk.json文件ä¸å£°æ˜Žåˆ—出,ä¸å…许直接å‘布镜åƒä¸çš„动æ€åº“,都采用stub动æ€åº“的方å¼å‘布。 * jsonæ–‡ä»¶æ˜¯ä¸€ä¸ªç¬¦å·æè¿°æ•°ç»„ï¼Œä¸¾ä¾‹å¦‚ä¸‹ï¼š ``` [ { "name": "__progname", "type": "variable" }, { "name": "pthread_cond_clockwait" } ] ``` name表示符å·çš„åå—,type表示符å·ç±»åž‹ï¼Œä¸å†™type,默认认为是函数;varibleè¡¨ç¤ºè¿™ä¸ªç¬¦å·æ˜¯å˜é‡ã€‚ * ã€è§„则】C APIä¸å¤´æ–‡ä»¶ä¸ä¸å…许包å«ä¸å‘布的接å£å£°æ˜Žï¼Œç±»åž‹å®šä¹‰ï¼›ä¸‰æ–¹åº“çš„æŽ¥å£æ–‡ä»¶ï¼Œå¯ 以备案ä¿ç•™ã€‚ * ã€è§„则】接å£å¿…须是Cè¯è¨€æŽ¥å£ï¼Œä¸å…许出现C++å…ƒç´ ï¼Œä¿è¯å¼•用方是C代ç 也能使用;æä¾›å¤´æ–‡ä»¶ä¸çš„æŽ¥å£éœ€è¦ç”¨C declare声明。 * C declare声明 ``` #ifdef __cplusplus extern "C" { #endif ... #ifdef __cplusplus } #endif ``` * __å例__ struct/enum声明的类型,如果没有声明typedefç±»åž‹ï¼Œåœ¨ä½¿ç”¨æ—¶å¿…é¡»åŠ ä¸Šstructã€enum关键å—。 * __例外__ 直接æä¾›å®žçŽ°åº“ï¼ŒåµŒå…¥åˆ°åº”ç”¨åŒ…ä¸çš„æŽ¥å£å¯ä»¥ä½¿ç”¨C++å…ƒç´ ã€‚ * ã€è§„则】包å«C API的实现动æ€åº“放到/system/{lib}/ndk目录下。 * ã€è§„则】æ¯ä¸ªæŽ¥å£éƒ½éœ€è¦ä¸Žsyscap相关è”;一个头文件ä¸çš„æŽ¥å£åªèƒ½å±žäºŽä¸€ä¸ªsyscap,ä¸èƒ½åŒ…å«å¤šä¸ªsyscap能力;多个文件å¯ä»¥å…³è”相åŒçš„syscap。 * ã€è§„åˆ™ã€‘è‡ªç ”æŽ¥å£æŒ‰ç…§å¦‚ä¸‹æ–‡æ¡£æ³¨é‡Šå†™ä½œè§„èŒƒè¿›è¡Œæ³¨é‡Šï¼Œä¸‰æ–¹åº“æŽ¥å£æœ‰ä¿®æ”¹çš„,注释规则按照注释规范进行注释。 * ã€è§„则】对外æä¾›çš„æŽ¥å£ï¼Œé‡‡ç”¨å¯¹å¤–å°é—,ä¾èµ–倒置原则;结构体的具体实现ä¸å¯¹å¤–暴露,方便åŽç»æ‰©å±•修改 > æ¤æ¡æ˜¯ã€Š[OpenHarmony API社区规范](https://gitee.com/openharmony/docs/blob/master/zh-cn/design/OpenHarmony-API-quality.md)》规则16:注æ„å°è£…ï¼šä¸æš´éœ²å®žçŽ°ç»†èŠ‚çš„C API补充解释。 ### 兼容性规则 * ã€è§„则】ä¸å…许进行接å£åŽŸåž‹å˜æ›´ï¼Œå¯ä»¥é€šè¿‡æ–°å¢žæŽ¥å£ï¼ŒåºŸå¼ƒè€æŽ¥å£çš„æ–¹å¼è¿›è¡Œã€‚ * ã€è§„则】接å£è¯ä¹‰ä¸å…è®¸å˜æ›´ï¼Œè¯ä¹‰é€šè¿‡xtsç”¨ä¾‹ä¿æŒå…¼å®¹æ€§ã€‚æŽ¥å£æ¶‰åŠçš„ç»“æž„ä½“ï¼Œæžšä¸¾å€¼å˜æ›´ä¹Ÿä¼šå½±å“è¯ä¹‰ï¼Œå»ºè®®åœ¨è®¾è®¡çš„æ—¶å€™ä¿ç•™ä¸€äº›å—段供扩展使用。 * ã€è§„则】结构体æˆå‘˜ï¼Œæžšä¸¾å€¼å¯ä»¥æ ‡æ˜ŽåºŸå¼ƒï¼Œä¸å»ºè®®åˆ 除。 ## 文档注释写作规范 æœ¬ç« åœ¨OpenHarmony API社区规范[API设计概述](https://gitee.com/openharmony/docs/blob/master/zh-cn/design/OpenHarmony-API-quality.md#api设计概述)基础上,对C API的注释æµç¨‹åšäº†è¡¥å……。 è‡ªç ”æŽ¥å£æ³¨é‡Šä¹¦å†™è§„范æ¥éª¤ï¼š 1. æ¯ä¸ªå¤´æ–‡ä»¶éƒ½éœ€è¦ä¹¦å†™æ³¨é‡Šã€‚ 2. 注释书写å‚考 [NativeæŽ¥å£æ³¨é‡Šè§„范](https://gitee.com/openharmony/docs/blob/master/zh-cn/contribute/template/native-template.md),注释命令必须按照@开头。 3. æäº¤æ³¨é‡Šå¤´æ–‡ä»¶åˆ° https://gitee.com/openharmony-sig/interface_native_header/tree/master/zh-cn/native_sdk 这个仓。 4. ç‰å¾…èµ„æ–™å®¡æ ¸ï¼Œåˆå…¥ï¼›åŒæ—¶ç¿»è¯‘一份英文注释头文件到en目录。 5. 下载这个头文件,覆盖到对应头文件。