diff --git a/README_ZH.md b/README_ZH.md index 6b336e36d1c9e18cea738220a3599fde64f5d6fd..3a7e5c3e022c699c1eb7dab8ee58cc3c6a56707d 100644 --- a/README_ZH.md +++ b/README_ZH.md @@ -1,12 +1,11 @@ # 系统能力编解码工具 - 系统能力(SystemCapability, 本文中使用SysCap缩写)编解码工具应用场景如下: 应用开发时,IDE会根据应用配置的SysCap和API版本生成描述RPCID(Required Product Compatibility ID)的json文件,并调用编解码工具syscap_tool将该json文件编码成RPCID。另一方面,IDE拿到开发者导入PCID(Product Compatibility ID),使用该工具解码出设备的SysCap集合。该工具仅供IDE使用,对用户不可见。 提供的主要功能: -1. PCID编码:对描述SysCap集合的文件编码生成PCID。 +1. PCID编码:对描述SysCap集合的文件编码生成PCID。 2. PCID解码:对编码后的PCID文件解码获取SysCap集合。 @@ -14,71 +13,106 @@ 4. RPCID解码:对编码后的RPCID文件解码获取应用所需的SysCap集合。 -## 目录 +5. 编码字符串:将sc后缀形式的PCID/RPCID编码为字符串形式。 + +6. PCID与RPCID比较:查询PCID是否满足RPCID的要求,并输出不满足的地方。 +## 代码目录 ``` /developtools ├── syscap_codec # syscap codec代码目录 -│ ├── include -│ │ └── syscap_tool.h # syscap_tool_shared对外接口定义 +│ ├── include # syscap_tool_shared对外接口定义 +│ │ ├── syscap_define.h +│ │ └── syscap_tool.h +│ ├── interfaces/inner_api # 提供部件之间的接口 +│ │ ├── syscap_interface.c +│ │ └── syscap_interface.h +│ ├── napi # napi 接口实现 +│ │ ├── BUILD.gn +│ │ ├── napi_query_syscap.cpp +│ │ └── syscap_interface.h │ ├── src │ │ ├── endian_internel.h # 内部实现的大小端转换接口定义(便于win、mac、linux平台通用) │ │ ├── endian_internel.c # 大小端转换实现 │ │ ├── main.c # syscap_tool命令行工具代码实现 │ │ └── syscap_tool.c # syscap_tool编解码接口的实现 │ └── test -│ └── syscap_tool_test.c # syscap_tool功能测试代码实现 +│ │ ├── unittest/common # inner 接口测试代码实现 +│ │ │ ├── BUILD.gn +│ │ │ ├── include +│ │ │ │ └── syscap_codec_test.h +│ │ │ └── syscap_codec_test.cpp +│ │ └── syscap_tool_test.c # syscap_tool功能测试代码实现 ``` -### API - +## API PC端工具,不对外提供API。 -### PC端编译说明 - +## PC端编译说明 syscap_tool PC端可执行文件编译步骤: +1. 编译命令:参考[编译构建](https://gitee.com/openharmony/build/blob/master/README_zh.md)文档,执行其指定的sdk编译命令来编译整个sdk,syscap_tool会被编译打包到里面。 +2. 编译:在目标开发机上运行上面调整好的sdk编译命令,正常编译syscap_tool会输出到sdk平台相关目录下。 -1. 编译命令:参考https://gitee.com/openharmony/build/blob/master/README_zh.md ,执行其指定的sdk编译命令来编译整个sdk, syscap_tool会被编译打包到里面。 - -2. 编译:在目标开发机上运行上面调整好的sdk编译命令, 正常编译syscap_tool会输出到sdk平台相关目录下。 - -注意: ubuntu环境下只能编译windows/linux版本工具,mac版需要在macos开发机上编译。 +注意:ubuntu环境下只能编译windows/linux版本工具,mac版需要在macos开发机上编译。 -### PC端获取说明 - -1. 下载sdk获取(建议) - -通过访问本社区网站http://ci.openharmony.cn/dailybuilds ,下载sdk压缩包,从中根据自己平台到相应的目录toolchain下解压提取。 - -2. 支持运行环境 - -Windows x86_64/Linux x86_64/Darwin x86_64 - -### 命令帮助 +## PC端获取说明 +1. 下载sdk获取(建议) + 通过访问本社区门禁[每日构建](http://ci.openharmony.cn/dailys/dailybuilds)网站,下载最新的ohos-sdk压缩包,并从相应平台的toolchains压缩包中提取syscap_tool。 +2. 支持运行环境 + Windows x86_64/Linux x86_64/Darwin x86_64 +## 命令帮助 本工具一般被IDE、应用市场和包管理器集成,手工调试时可参考以下说明。 使用./syscap_tool -h或者./syscap_tool --help查看: +```shell +syscap_tool -R/P -e/d -i filepath [-o outpath] +-h, --help : how to use +-R, --RPCID : encode or decode RPCID +-P, --PCID : encode or decode PCID +-C, --compare : compare pcid with rpcid string format. + -s, --string : input string. +-e, --encode : encode to sc format. + -s, --string : encode to string format. +-d, --decode : decode to json format. + -s, --string : decode string format. +-i filepath, --input filepath : input file +-o outpath, --input outpath : output path +-v, --version : print syscap_tool version information. + +syscap_tool v1.1.1 ``` -./syscap_tool --help +### 使用示例 +```shell +# 将 RPCID.json 编码为SC格式,文件名RPCID.sc +syscap_tool -Rei RPCID.json -o path/ -./syscap_tool -R/P -e/d -i filepath [-o outpath] +# 将 RPCID.sc 编码为JSON格式,文件名RPCID.json +syscap_tool -Rdi RPCID.sc -o path/ --h, --help : how to use +# 将 PCID.json 编码为SC格式,文件名PCID.sc +syscap_tool -Pei PCID.json -o path/ --R, --RPCID : encode or decode RPCID +# 将 PCID.sc 编码为JSON格式,文件名PCID.json +syscap_tool -Pdi PCID.sc -o path/ --P, --PCID : encode or decode PCID +# 将 RPCID.sc 编码为字符串格式,文件名RPCID.txt +syscap_tool -Resi RPCID.sc -o path/ --e, --encode : to encode +# 将 PCID.sc 编码为字符串格式,文件名PCID.txt +syscap_tool -Pesi PCID.sc -o path/ --d, --encode : to decode +# 比较字符串格式的PCID和RPCID,pcid 符合条件返回成功提示,不符合则提示原因。 +syscap_tool -C pcid.txt rpcid.txt --i filepath, --input filepath : input file +# 功能类似 -C 选项,区别为 -SC 选项为直接输入字符串。 +syscap_tool -sC "pcidstring" "rpcidstring" --o outpath, --input outpath : output path +# 将字符串格式的 pcid 转为 json 格式,文件名 PCID.json。 +syscap_tool -Pdsi pcid.txt -o path/ ``` +**说明:** -o 选项指定输出目录,缺省为当前目录。 -### Release Note - +## Release Note +v1.1.0 2022-6-17 添加转字符串格式以及比较功能。 v1.0.0 2022-3-8 首版本,提供Windows/Linux/Mac平台的系统能力编解码。 \ No newline at end of file diff --git a/RELEASE-NOTE.txt b/RELEASE-NOTE.txt index d24a011dbdadc99e987be6aa8ce479b3ea5a4c17..08c9e97ba10beb3a6f7102b9912b071c1e06a527 100644 --- a/RELEASE-NOTE.txt +++ b/RELEASE-NOTE.txt @@ -1 +1,4 @@ +v1.1.2 add syscap "SystemCapability.ArkUI.UiAppearance". +v1.1.1 add compare string pcid with rpcid function. +v1.1.0 add encode/decode string format PCID/RPCID. v1.0.0 first release. \ No newline at end of file diff --git a/include/syscap_define.h b/include/syscap_define.h index 9e1c899d29c7507ecf1e8b0e3df0ecc5b872a72d..d70718a63f70b4e7cb416c62cd2c358f2076f5e0 100644 --- a/include/syscap_define.h +++ b/include/syscap_define.h @@ -25,7 +25,7 @@ typedef struct SystemCapabilityWithNum { uint16_t num; } SyscapWithNum; -/* add last */ +/* New syscap index must be added last */ typedef enum SystemCapabilityNum { ACCOUNT_APPACCOUNT, ACCOUNT_OSACCOUNT, @@ -177,6 +177,8 @@ typedef enum SystemCapabilityNum { USERIAM_USERAUTH_FINGERPRINTAUTH, USERIAM_USERAUTH_PINAUTH, USERIAM_USERIDM, + ARKUI_UIAPPEARANCE, + // Add here SYSCAP_NUM_MAX = 960 } SyscapNum; @@ -185,6 +187,7 @@ const static SyscapWithNum g_arraySyscap[] = { {"SystemCapability.Account.AppAccount", ACCOUNT_APPACCOUNT}, {"SystemCapability.Account.OsAccount", ACCOUNT_OSACCOUNT}, {"SystemCapability.Ace.UiAppearance", ACE_UIAPPEARANCE}, + {"SystemCapability.ArkUI.UiAppearance", ARKUI_UIAPPEARANCE}, {"SystemCapability.Ace.AceEngineLite", ACE_ACEENGINELITE}, {"SystemCapability.Ai.AiEngine", AI_AIENGINE}, {"SystemCapability.Applications.ContactsData", APPLICATIONS_CONTACTSDATA}, diff --git a/include/syscap_tool.h b/include/syscap_tool.h index 2d129877a8ee2528cdc66af4a9bdca51bd8b712b..8ec1899ac0d42cb2acda526296f77a29f3e0d683 100644 --- a/include/syscap_tool.h +++ b/include/syscap_tool.h @@ -18,6 +18,9 @@ #include "stdint.h" +#define TYPE_FILE (0U) +#define TYPE_STRING (1U) + #ifdef __cplusplus #if __cplusplus extern "C" { @@ -35,7 +38,7 @@ int32_t RPCIDDecode(char *inputFile, char *outputPath); /* in: inputFile, out: outputPath/rpcid.json */ int32_t EncodeRpcidscToString(char *inputFile, char *outDirPath); /* in: pcidFile, rpcidFile */ -int32_t ComparePcidWithRpcidString(char *pcidFile, char *rpcidFile); +int32_t ComparePcidWithRpcidString(char *pcidFile, char *rpcidFile, uint32_t type); int32_t SeparateSyscapFromString(const char *inputString, uint32_t *osArray, uint32_t osArraySize, char **priSyscap, uint32_t *priSyscapLen); diff --git a/napi/napi_query_syscap.cpp b/napi/napi_query_syscap.cpp index 8228f6e5e5293f4dbc34f51306e08082592148c0..09dc080241a6d1370efa7c3bac5ef3eba36d2ed4 100644 --- a/napi/napi_query_syscap.cpp +++ b/napi/napi_query_syscap.cpp @@ -60,7 +60,6 @@ static char* getSystemCapability() { bool retBool; int retError, priOutputLen, priCapArrayCnt, sumLen; - int i = 0; char osOutput[SINGLE_SYSCAP_LEN] = {}; errno_t err = EOK; uint32_t *osCapU32 = nullptr; @@ -82,7 +81,7 @@ static char* getSystemCapability() } osCapU32 = reinterpret_cast(osOutput); - for (i = 0; i < PCID_MAIN_U32; i++) { // 2, header of pcid.sc + for (size_t i = 0; i < PCID_MAIN_U32; i++) { // 2, header of pcid.sc retError = sprintf_s(osCapArray[i], U32_TO_STR_MAX_LEN, "%u", osCapU32[i]); if (retError == -1) { PRINT_ERR("get uint32_t syscap string failed."); @@ -98,10 +97,10 @@ static char* getSystemCapability() // calculate all string length sumLen = 0; - for (i = 0; i < PCID_MAIN_U32; i++) { + for (size_t i = 0; i < PCID_MAIN_U32; i++) { sumLen += strlen(osCapArray[i]); } - for (i = 0; i < priCapArrayCnt; i++) { + for (int i = 0; i < priCapArrayCnt; i++) { sumLen += strlen(*(priCapArray + i)); } sumLen += (PCID_MAIN_U32 + priCapArrayCnt + 1); // split with ',' @@ -121,7 +120,7 @@ static char* getSystemCapability() } temp = *osCapArray; - for (i = 1; i < PCID_MAIN_U32; i++) { + for (size_t i = 1; i < PCID_MAIN_U32; i++) { retError = sprintf_s(allSyscapBUffer, sumLen, "%s,%s", temp, osCapArray[i]); if (retError == -1) { PRINT_ERR("splicing os syscap string failed."); @@ -131,7 +130,7 @@ static char* getSystemCapability() } temp = allSyscapBUffer; } - for (i = 0; i < priCapArrayCnt; i++) { + for (int i = 0; i < priCapArrayCnt; i++) { retError = sprintf_s(allSyscapBUffer, sumLen, "%s,%s", temp, *(priCapArray + i)); if (retError == -1) { PRINT_ERR("splicing pri syscap string failed."); diff --git a/src/main.c b/src/main.c index 3b3c9d1b0f6d00c7612e4af58c28eccb322632c0..d44dd06961ee98fbc152c9a21efd216a56ba74b6 100644 --- a/src/main.c +++ b/src/main.c @@ -29,7 +29,7 @@ printf("ERROR: [%s: %d] -> ", __FILE__, __LINE__); \ printf(__VA_ARGS__); \ } while (0) -#define SYSCAP_VERSION "1.0.1" +#define SYSCAP_VERSION "1.1.2" #define OUTPUT_VERSION_LEN 200 #define ENCODE 0 #define DECODE 1 @@ -130,7 +130,9 @@ int main(int argc, char **argv) case 0x115: // 0x115, -Pesi inputfile ret = EncodePcidscToString(inputfile, outputpath); break; case 0x60: // 0x60, -C PCID.txt RPCID.txt - ret = ComparePcidWithRpcidString(pcidfile, rpcidfile); break; + ret = ComparePcidWithRpcidString(pcidfile, rpcidfile, TYPE_FILE); break; + case 0x64: // 0x64, -sC "pcidstring" "rpcidstring" + ret = ComparePcidWithRpcidString(pcidfile, rpcidfile, TYPE_STRING); break; case 0x111: // 0x111, -Pei inputfile ret = CreatePCID(inputfile, outputpath); break; case 0x112: // 0x112, -Pdi inputfile @@ -168,7 +170,8 @@ void PrintHelp(void) printf("-h, --help\t: how to use\n"); printf("-R, --RPCID\t: encode or decode RPCID\n"); printf("-P, --PCID\t: encode or decode PCID\n"); - printf("-C, --compare\t: compare pcid with rpcid string format.\n"); + printf("-C, --compare\t: compare pcid with rpcid string format.\n\t" + "-s, --string : input string.\n"); printf("-e, --encode\t: encode to sc format.\n\t-s, --string : encode to string format.\n"); printf("-d, --decode\t: decode to json format.\n\t-s, --string : decode string format.\n"); printf("-i filepath, --input filepath\t: input file\n"); diff --git a/src/syscap_tool.c b/src/syscap_tool.c index 54c7063bb7309cc9f4c1b922dffb137917dd89a8..fdfceb22d8799485d53eeca84bcd5981e0f501d9 100644 --- a/src/syscap_tool.c +++ b/src/syscap_tool.c @@ -647,7 +647,7 @@ SKIP_PRI_SYSCAP: return 0; } -int32_t ComparePcidWithRpcidString(char *pcidFile, char *rpcidFile) +int32_t ComparePcidWithRpcidString(char *pcidFile, char *rpcidFile, uint32_t type) { int32_t ret; int32_t versionFlag = 0; @@ -663,14 +663,21 @@ int32_t ComparePcidWithRpcidString(char *pcidFile, char *rpcidFile) uint32_t pcidOsAarry[PCID_OUT_BUFFER] = {0}; uint32_t rpcidOsAarry[PCID_OUT_BUFFER] = {0}; - if (GetFileContext(pcidFile, &pcidContent, &pcidContentLen)) { - PRINT_ERR("Get pcid file context failed, input file : %s\n", pcidFile); - return -1; - } - - if (GetFileContext(rpcidFile, &rpcidContent, &rpcidContentLen)) { - PRINT_ERR("Get rpcid file context failed, input file : %s\n", rpcidFile); - free(pcidContent); + if (type == TYPE_FILE) { + if (GetFileContext(pcidFile, &pcidContent, &pcidContentLen)) { + PRINT_ERR("Get pcid file context failed, input file : %s\n", pcidFile); + return -1; + } + if (GetFileContext(rpcidFile, &rpcidContent, &rpcidContentLen)) { + PRINT_ERR("Get rpcid file context failed, input file : %s\n", rpcidFile); + free(pcidContent); + return -1; + } + } else if (type == TYPE_STRING) { + pcidContent = pcidFile; + rpcidContent = rpcidFile; + } else { + PRINT_ERR("Input file type error, type=%d\n", type); return -1; }