鸿蒙OS开发指导:【应用包签名工具】

编译构建

  1. 该工具基于Maven3编译构建,请确认环境已安装配置Maven3环境,并且版本正确

     mvn -version
    
  2. 下载代码,命令行打开文件目录至developtools_hapsigner/hapsigntool,执行命令进行编译打包

     mvn package
    
  3. 编译后得到二进制文件,目录为: ./hap_sign_tool/target

开发指导

鸿蒙开发指导书:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到即可打开。

场景介绍

OpenHarmony系统内置密钥库文件,文件名称为OpenHarmony.p12,内含根CA证书、中间CA证书、最终实体证书等信息,工具基于该密钥库文件对OpenHarmony应用进行签名。

按照有无应用签名证书可分为以下两种场景:

  1. 无应用签名证书场景: 开发者使用该工具对应用包签名时,需按照签名步骤从第一步生成应用签名证书密钥对依次完成应用签名证书生成、profile文件签名、应用签名流程。
  2. 有应用签名证书场景: 开发者可直接从签名步骤第三步对profile文件进行签名开始开发,使用应用签名证书和包含对应密钥的本地密钥库文件对应用进行签名。

鸿蒙HarmonyOS与OpenHarmony开发技术紫料

搜狗高速浏览器截图20240326151547.png

命令说明

  1. 输出命令帮助信息。

    -help     # 输出命令帮助信息(不输入参数默认输出命令帮助信息)
    
  2. 输出版本信息。

    -version  # 输出版本信息
    
  3. 生成密钥对。

    generate-keypair : 生成密钥对
        ├── -keyAlias          # 密钥别名,必填项
        ├── -keyPwd            # 密钥口令,可选项
        ├── -keyAlg            # 密钥算法,必填项,包括RSA/ECC
        ├── -keySize           # 密钥长度,必填项,RSA算法的长度为2048/3072/4096,ECC算法的长度NIST-P-256/NIST-P-384
        ├── -keystoreFile      # 密钥库文件,必填项,JKS或P12格式
        ├── -keystorePwd       # 密钥库口令,可选项
    
  4. 生成证书签名请求。

    generate-csr : 生成证书签名请求
        ├── -keyAlias          # 密钥别名,必填项
        ├── -keyPwd            # 密钥口令,可选项
        ├── -subject           # 证书主题,必填项
        ├── -signAlg           # 签名算法,必填项,包括SHA256withRSA / SHA384withRSA / SHA256withECDSA / SHA384withECDSA
        ├── -keystoreFile      # 密钥库文件,必填项,JKS或P12格式
        ├── -keystorePwd       # 密钥库口令,可选项
        ├── -outFile           # 输出文件,可选项,如果不填,则直接输出到控制台
    
  5. 生成根CA/中间CA证书。

    generate-ca : 生成根CA/中间CA证书,如果密钥不存在,一起生成密钥
        ├── -keyAlias                        # 密钥别名,必填项
        ├── -keyPwd                          # 密钥口令,可选项
        ├── -keyAlg                          # 密钥算法,必填项,包括RSA/ECC
        ├── -keySize                         # 密钥长度,必填项,RSA算法的长度为2048/3072/4096,ECC算法的长度NIST-P-256/NIST-P-384
        ├── -issuer                          # 颁发者的主题,可选项,如果不填,表示根CA
        ├── -issuerKeyAlias                  # 颁发者的密钥别名,可选项,如果不填,表示根CA
        ├── -issuerKeyPwd                    # 颁发者的密钥口令,可选项
        ├── -subject                         # 证书主题,必填项
        ├── -validity                        # 证书有效期,可选项,默认为3650天
        ├── -signAlg                         # 签名算法,必填项,包括SHA256withRSA / SHA384withRSA / SHA256withECDSA / SHA384withECDSA
        ├── -basicConstraintsPathLen         # 路径长度,可选项,默认为0
        ├── -keystoreFile                    # 密钥库文件,必填项,JKS或P12格式
        ├── -keystorePwd                     # 密钥库口令,可选项
        ├── -issuerKeystoreFile              # 签发者密钥库文件,可选项,JKS或P12格式
        ├── -issuerKeystorePwd               # 签发者密钥库口令,可选项
        ├── -outFile                         # 输出文件,可选项,如果不填,则直接输出到控制台
    
  6. 生成应用调试/发布证书。

    generate-app-cert : 生成应用调试/发布证书
        ├── -keyAlias                        # 密钥别名,必填项
        ├── -keyPwd                          # 密钥口令,可选项
        ├── -issuer                          # 颁发者的主题,必填项
        ├── -issuerKeyAlias                  # 颁发者的密钥别名,必填项
        ├── -issuerKeyPwd                    # 颁发者的密钥口令,可选项
        ├── -subject                         # 证书主题,必填项
        ├── -validity                        # 证书有效期,可选项,默认为3650天
        ├── -signAlg                         # 签名算法,必填项,包括SHA256withECDSA / SHA384withECDSA;
        ├── -issuerKeystoreFile              # 签发者密钥库文件,可选项,JKS或P12格式
        ├── -issuerKeystorePwd               # 签发者密钥库口令,可选项
        ├── -keystoreFile                    # 密钥库文件,必填项,JKS或P12格式
        ├── -keystorePwd                     # 密钥库口令,可选项
        ├── -outForm                         # 输出证书文件的格式,包括 cert / certChain,可选项,默认为certChain
        ├── -rootCaCertFile                  #  outForm为certChain时必填,根CA证书文件
        ├── -subCaCertFile                   #  outForm为certChain时必填,中间CA证书文件
        ├── -outFile                         #  输出证书文件(证书或证书链),可选项,如果不填,则直接输出到控制台
    
  7. 生成profile调试/发布证书。

    generate-profile-cert : 生成profile调试/发布证书
        ├── -keyAlias                        # 密钥别名,必填项
        ├── -keyPwd                          # 密钥口令,可选项
        ├── -issuer                          # 颁发者的主题,必填项
        ├── -issuerKeyAlias                  # 颁发者的密钥别名,必填项
        ├── -issuerKeyPwd                    # 颁发者的密钥口令,可选项
        ├── -subject                         # 证书主题,必填项
        ├── -validity                        # 证书有效期,可选项,默认为3650天
        ├── -signAlg                         # 签名算法,必填项,包括SHA256withECDSA / SHA384withECDSA;
        ├── -issuerKeystoreFile              # 签发者密钥库文件,可选项,JKS或P12格式
        ├── -issuerKeystorePwd               # 签发者密钥库口令,可选项
        ├── -keystoreFile                    # 密钥库文件,必填项,JKS或P12格式
        ├── -keystorePwd                     # 密钥库口令,可选项
        ├── -outForm                         # 输出证书文件的格式,包括 cert / certChain,可选项,默认为certChain
        ├── -rootCaCertFile                  #  outForm为certChain时必填,根CA证书文件
        ├── -subCaCertFile                   #  outForm为certChain时必填,中间CA证书文件
        ├── -outFile                         #  输出证书文件(证书或证书链),可选项,如果不填,则直接输出到控制台
    
  8. 通用证书生成,可以生成自定义证书。

    generate-cert : 通用证书生成,可以生成自定义证书
        ├── -keyAlias                          # 密钥别名,必填项
        ├── -keyPwd                            # 密钥口令,可选项
        ├── -issuer                            # 颁发者的主题,必填项
        ├── -issuerKeyAlias                    # 颁发者的密钥别名,必填项
        ├── -issuerKeyPwd                      # 颁发者的密钥口令,可选项
        ├── -subject                           # 证书主题,必填项
        ├── -validity                          # 证书有效期,可选项,默认为1095天
        ├── -keyUsage                          # 密钥用法,必选项,包括digitalSignature, nonRepudiation, keyEncipherment,
        ├                                        dataEncipherment, keyAgreement, certificateSignature, crlSignature,
        ├                                        encipherOnly和decipherOnly,如果证书包括多个密钥用法,用逗号分隔
        ├── -keyUsageCritical                  # keyUsage是否为关键项,可选项,默认为是
        ├── -extKeyUsage                       # 扩展密钥用法,可选项,包括clientAuthentication,serverAuthentication,
        ├                                        codeSignature,emailProtection,smartCardLogin,timestamp,ocspSignature
        ├── -extKeyUsageCritical               # extKeyUsage是否为关键项,可选项,默认为否
        ├── -signAlg                           # 签名算法,必填项,包括SHA256withRSA/SHA384withRSA/SHA256withECDSA/SHA384withECDSA 
        ├── -basicConstraints                  # 是否包含basicConstraints,可选项,默认为否
        ├── -basicConstraintsCritical          # basicConstraints是否包含为关键项,可选项,默认为否
        ├── -basicConstraintsCa                # 是否为CA,可选项,默认为否
        ├── -basicConstraintsPathLen           # 路径长度,可选项,默认为0
        ├── -issuerKeystoreFile                # 签发者密钥库文件,可选项,JKS或P12格式
        ├── -issuerKeystorePwd                 # 签发者密钥库口令,可选项
        ├── -keystoreFile                      # 密钥库文件,必填项,JKS或P12格式
        ├── -keystorePwd                       # 密钥库口令,可选项
        ├── -outFile                           # 输出证书文件,可选项,如果不填,则直接输出到控制台
    
  9. profile文件签名。

    sign-profile : profile文件签名
        ├── -mode            # 签名模式,必填项,包括localSign,remoteSign
        ├── -keyAlias        # 密钥别名,必填项
        ├── -keyPwd          # 密钥口令,可选项
        ├── -profileCertFile # Profile签名证书(证书链,顺序为最终实体证书-中间CA证书-根证书),必填项
        ├── -inFile          # 输入原始的模板Profile文件,文件为json格式,所在目录为developtools_hapsigner/autosign/UnsgnedReleasedProfileTemplate.json,必填项
        ├── -signAlg         # 签名算法,必填项,包括SHA256withECDSA / SHA384withECDSA
        ├── -keystoreFile    # 密钥库文件,localSign模式时为必填项,JKS或P12格式
        ├── -keystorePwd     # 密钥库口令,可选项
        ├── -outFile         # 输出签名后的profile文件,p7b格式,必填项
    
  10. profile文件验签。

    verify-profile : profile文件验签
        ├── -inFile       # 已签名的profile文件,p7b格式,必填项
        ├── -outFil       # 验证结果文件(包含验证结果和profile内容),json格式,可选项;如果不填,则直接输出到控制台
    
  11. 应用包和调试工具签名。

    sign-app : 应用包和二进制工具签名
        ├── -mode          # 签名模式,必填项,包括localSign,remoteSign,remoteResign
        ├── -keyAlias      # 密钥别名,必填项
        ├── -keyPwd        # 密钥口令,可选项
        ├── -appCertFile   # 应用签名证书文件(证书链,顺序为实体证书-中间CA证书-根证书),必填项
        ├── -profileFile   # 签名后的Provision Profile文件名,profileSigned为1时为p7b格式,profileSigned为0时为json格式,应用包签名必填项,二进制工具签名选填
        ├── -profileSigned # 指示profile文件是否带有签名,1表示有签名,0表示没有签名,默认为1。可选项
        ├── -inForm        # 输入的原始文件的格式,枚举值:zip、elf或bin;zip应用包对应zip,二进制工具对应elf,bin应用包为bin,默认zip;可选项
        ├── -inFile        # 输入的原始文件,应用包、elf或bin文件,必填项
        ├── -signAlg       # 签名算法,必填项,包括SHA256withECDSA / SHA384withECDSA
        ├── -keystoreFile  # 密钥库文件,localSign模式时为必填项,JKS或P12格式
        ├── -keystorePwd   # 密钥库口令,可选项
        ├── -outFile       # 输出签名后的包文件,必填项
        ├── -signCode      # 是否启用代码签名,1表示开启代码签名,0表示关闭代码签名。可选项。默认对hap、hsp、hqf、elf开启代码签名,通过参数配置为0关闭。
    
  12. 应用包和调试工具文件验签。

    verify-app : 应用包和二进制工具文件验签
       ├── -inFile          # 已签名的文件,应用包、elf或bin文件,必填项
       ├── -outCertChain    # 签名的证书链文件,必填项
       ├── -outProfile      # 应用包中的profile文件,必填项
       ├── -inForm          # 输入的原始文件的格式,枚举值:zip、elf或bin;zip应用包对应zip,二进制工具对应elf,bin应用包为bin,默认zip;可选项
    

签名步骤

对应用包签名的完整步骤为:

  • 生成应用签名证书密钥对
  • 生成应用签名证书
  • 对profile文件进行签名
  • 对应用包进行签名

注意事项:

  1. 步骤一中的密钥对算法推荐使用ECC,出于安全性考虑,应用签名暂不使用RSA算法。
  2. 建议将待签名应用包、profile文件、密钥库文件OpenHarmony.p12、根CA证书、中间CA证书、签名工具放在同一个目录下,方便操作。
  1. 生成应用签名证书密钥对

    调用密钥对生成接口,生成签名密钥并保存到密钥库。

    命令实例:

    java -jar hap-sign-tool.jar generate-keypair -keyAlias "oh-app1-key-v1" -keyAlg "ECC"  -keySize "NIST-P-256" -keystoreFile "OpenHarmony.p12" -keyPwd "123456" -keystorePwd "123456"
    

    说明:

    请记录下keyAlias、keyStorePwdkeyPwd的值,在后续生成应用签名证书和对应用包进行签名操作会使用到。

    该命令的参数说明:

    generate-keypair : 生成应用签名证书密钥对
        ├── -keyAlias         #用于生成应用签名证书的密钥别名,存于OpenHarmony.p12密钥库文件中,该参数必填
        ├── -keyAlg           #密钥算法,推荐使用ECC,该参数必填
        ├── -keySize          #密钥长度,ECC算法的长度NIST-P-256/NIST-P-384,该参数必填
        ├── -keyStoreFile     #密钥库文件,推荐使用提供的OpenHarmony.p12密钥库文件,该参数必填
        ├── -keyStorePwd      #密钥库口令,OpenHarmony.p12口令默认为“123456”,必填项
        ├── -keyPwd           #密钥口令,可选项,该参数不填默认生成的密钥对无口令
    
  2. 生成应用签名证书

    调用应用签名证书生成接口,使用本地中间CA证书签发应用签名证书。

    命令实例:

    java -jar hap-sign-tool.jar generate-app-cert -keyAlias "oh-app1-key-v1" -signAlg "SHA256withECDSA"  -issuer "C=CN,O=OpenHarmony,OU=OpenHarmony Team,CN= OpenHarmony Application CA" -issuerKeyAlias "openharmony application ca" -subject "C=CN,O=OpenHarmony,OU=OpenHarmony Team,CN=OpenHarmony Application Release" -keystoreFile "OpenHarmony.p12" -subCaCertFile "subCA.cer" -rootCaCertFile "rootCA.cer" -outForm "certChain" -outFile "app1.pem" -keyPwd "123456" -keystorePwd "123456" -issuerKeyPwd "123456" -validity "365"
    

    该命令的参数说明:

    generate-app-cert:生成应用签名证书
        ├── -keyAlias         # 用于生成应用签名证书的密钥别名,请与第一步生成密钥对的密钥别名-keyAlias保持一致
        ├── -signAlg          # 签名算法,必填项,包括 SHA256withECDSA / SHA384withECDSA
        ├── -issuer           # 颁发者主题,填写已提供的中间CA证书主题,该参数必填且不能修改
        ├── -issuerKeyAlias   # 颁发者密钥别名,填写中间CA证书密钥别名,该参数必填且不能修改
        ├── -subject          # 证书主题,请参照命令实例中内容保证顺序不变,该参数必填
        ├── -issuerKeyPwd     # 颁发者密钥口令,填写中间CA证书密钥口令,该参数必填,指定“123456”,不可修改
        ├── -keystoreFile     # 密钥库文件,指定使用提供的OpenHarmony.p12密钥库文件,该参数必填且不可修改
        ├── -rootCaCertFile   # 根CA证书文件,指定为已提供的根CA证书,该参数必填且不可修改
        ├── -subCaCertFile    # 中间CA证书文件,指定为已提供的中间CA证书,该参数必填且不可修改
        ├── -outForm          # 输出证书文件格式,推荐使用certChain
        ├── -outFile          # 可选项,建议填写,不填则默认输出到控制台
        ├── -keyPwd           # 密钥口令,可选项,为第一步生成的密钥对口令
        ├── -keystorePwd      # 密钥库口令,默认为“123456”
        ├── -validity         # 证书有效期,可选项,默认为3650天
    
  3. 对profile文件进行签名

    调用profile文件签名接口,使用Profile签名密钥对profile文件进行签名。

    命令实例:

    java -jar hap-sign-tool.jar  sign-profile -keyAlias "openharmony application profile release" -signAlg "SHA256withECDSA" -mode "localSign" -profileCertFile "OpenHarmonyProfileRelease.pem" -inFile "UnsgnedReleasedProfileTemplate.json" -keystoreFile "OpenHarmony.p12" -outFile "app1-profile.p7b" -keyPwd "123456" -keystorePwd "123456"
    

    该命令的参数说明:

    sign-profile:签名profile文件
        ├── -keyAlias         # 生成profile证书的密钥别名,该参数必填且不能修改
        ├── -signAlg          # 签名算法,包括 SHA256withECDSA / SHA384withECDSA,该参数必填
        ├── -mode             # 签名模式,目前仅支持localSign,该参数必填
        ├── -profileCertFile  # Profile签名证书,指定已提供的profile证书文件,该参数必填且不可修改
        ├── -inFile           # 输入原始的模板Profile文件,文件为json格式,所在目录为developtools_hapsigner/autosign/UnsgnedReleasedProfileTemplate.json,该参数必填
        ├── -keystoreFile     # 密钥库文件,指定使用提供的OpenHarmony.p12密钥库文件,该参数必填且不可修改
        ├── -outFile          # 输出签名后的profile文件,p7b格式,该参数必填
        ├── -keyPwd           # 密钥口令,OpenHarmony.p12中的口令默认“123456”
        ├── -keystorePwd      # 密钥库口令,OpenHarmony.p12口令默认为“123456”
    
  4. 对应用包进行签名

    调用应用包签名接口,使用应用签名密钥为应用包签名。

    命令实例:

    java -jar hap-sign-tool.jar sign-app -keyAlias "oh-app1-key-v1" -signAlg "SHA256withECDSA" -mode "localSign" -appCertFile "app1.pem" -profileFile "app1-profile.p7b" -inFile "app1-unsigned.zip" -keystoreFile "OpenHarmony.p12" -outFile "app1-signed.hap" -keyPwd "123456" -keystorePwd "123456"
    

    说明

    以下参数说明默认为无应用签名证书场景,当开发场景为有应用签名证书场景时,下列参数需要修改: -keyAlias:密钥别名,填写已有应用签名证书对应的密钥别名,参数必填。 -appCertFile:应用签名证书,填写已有的应用签名证书,参数必填。 -keystoreFile:密钥库文件,填写已有应用签名证书对应的密钥库文件,参数必填。 -keyPwd:密钥口令,填写密钥库文件中对应密钥的口令。 -keystorePwd:密钥库口令,填写密钥库文件的密钥口令。

    该命令的参数说明:

    sign-app:签名应用包
        ├── -keyAlias          # 密钥别名,为第一步生成的密钥信息别名,该参数必填
        ├── -signAlg           # 签名算法,包括 SHA256withECDSA / SHA384withECDSA,该参数必填
        ├──  -mode             # 签名模式,目前仅支持localSign,该参数必填
        ├──  -appCertFile      # 应用签名证书(证书链,顺序为最终实体证书-中间CA证书-根证书),填写第二步生成的应用签名证书,该参数必填
        ├──  -profileFile      # 签名后的profile文件,p7b格式,填写第三步中生成的profile文件,必填项
        ├──  -inFile           # 输入原始应用包文件,该参数必填
        ├──  -keystoreFile     # 密钥库文件,请与步骤一中密钥库文件保持一致,该参数必填且不可修改
        ├──  -outFile          # 输出签名后的包文件,必填项
        ├──  -keyPwd           # 密钥口令,与第一步生成的密钥对口令保持一致
        ├──  -keystorePwd      # 密钥库口令,与第一步的密钥库口令保持一致
    

常见问题

  1. 执行第二步生成应用签名证书命令时,控制台打印结果,无文件输出。

    • 现象描述

      生成证书时,只在控制台打印证书内容,无对应文件输出。

    • 可能原因

      outFile参数中路径不正确 和 ‘-outFile’中的’-'非英文格式。

    • 解决办法

      检查并修正outFile参数为正确路径,‘-outFile’中的’-'为英文格式

  2. 执行第三步对profile文件进行签名时,提示签名失败。

    • 现象描述

      现象分为以下几种:

      (1)执行命令后提示 "SIGN_ERROR, code: 107. Details: Failed to verify signature: Wrong key usage"

      (2)执行命令后提示 "NOT_SUPPORT_ERROR, code: 105. Details: Profile cert 'result\profile1.pem' must a cert chain"

      (3)执行命令后提示 "VERIFY_ERROR, code: 108. Details: Failed to verify signature: unable to find valid certification path to requested target"

    • 可能原因

      (1)profile签名证书(最终实体证书)证书链顺序不正确。

      (2)profile签名证书(最终实体证书)不是证书链。

      (3)证书主题顺序不正确 或者 生成应用签名证书时“-issuerKeyAlias”参数填写错误。

    • 解决办法

      (1)检查并修正证书链顺序,只能正序或反序,不可乱序。

      (2)检查签名时的最终实体证书是否为证书链。

      (3)检查证书主题顺序是否正确,顺序须为C、O、OU、CN。

  3. 对应用包进行签名时提示签名错误。

    • 现象描述

      执行命令后提示:NOT_SUPPORT_ERROR, code: 105. Details: SignAlg params is incorrect, signature algorithms include SHA256withECDSA,SHA384withECDSA

    • 可能原因

      签名算法不支持,signAlg参数填写错误。

    • 解决办法

      最终实体证书密钥对推荐使用ECC生成,hap签名算法修改为ECC对应的SHA256withECDSA,SHA384withECDSA。

  4. 签名应用包失败,提示证书CN字段为空。

    • 现象描述

      执行命令后提示:error: Common name of certificate is empty!

    • 可能原因

      当前使用的应用包签名证书,不包含CN字段,导致签名失败。

    • 解决办法

      根据业界证书规范,应用包签名证书的CN字段必须不为空,请重新生成格式正确的证书。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/546855.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[开发日志系列]PDF图书在线系统20240415

20240414 Step1: 创建基础vueelment项目框架[耗时: 1h25min(8:45-10:10)] 检查node > 升级至最新 (考虑到时间问题,没有使用npm命令行执行,而是觉得删除重新下载最新版本) > > 配置vue3框架 ​ 取名:Online PDF Book System 遇到的报错: 第一报错: npm ERR! …

halcon 3.2标定相机

参考《solution_guide_iii_c_3d_vision.pdf》 3.2.2.2 Which Distortion Model to Use 选用何种畸变模型 对于面阵相机,halcon中两种畸变模型:The division model and the polynomial model(差分模型和多项式模型),前…

使用 Scrapy 爬取豆瓣电影 Top250

一、Scrapy框架 1. 介绍 在当今数字化的时代,数据是一种宝贵的资源,而网络爬虫(Web Scraping)则是获取网络数据的重要工具之一。而在 Python 生态系统中,Scrapy 框架作为一种高效、灵活的网络爬虫框架,为…

MLOps

参考: 什么是MLOps?与DevOps有何异同?有什么价值?https://baijiahao.baidu.com/s?id1765071998288593530&wfrspider&forpcMLOps简介_AI开发平台ModelArts_WorkflowMLOps(Machine Learning Operation)是机器学习&#xf…

更优性能与性价比,从自建 ELK 迁移到 SLS 开始

作者:荆磊 背景 ELK (Elasticsearch、Logstash、Kibana) 是当下开源领域主流的日志解决方案,在可观测场景下有比较广泛的应用。 随着数字化进程加速,机器数据日志增加,自建 ELK 在面临大规模数据、查询性能等方面有较多问题和挑…

【自动驾驶】贝叶斯算法在机器学习中的应用研究

目录 第一章:引言 1.1 贝叶斯算法在机器学习中的重要性 1.2 研究背景 1.3 研究目的 1.4 论文结构 第二章:贝叶斯算法概述 2.1 贝叶斯定理 2.2 贝叶斯算法分类 第三章:贝叶斯算法在机器学习中的应用 3.1 贝叶斯分类器 3.2 贝叶斯回…

【软考】UML中的图之用例图

目录 1. 说明2. 建模2.1 说明2.2 语境建模2.3 需求建模 3. 图示4. 组成部分 1. 说明 1.用例图(Use Case Diagram)。2.展现了一组用例、参与者(Actor)以及它们之间的关系。3.用例图通常包括以下的内容:用例、参与者、用…

linux 自定义快捷指令(docker

vi /root/.bashrc alias disdocker images alias dpsdocker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}" 保存退出后使用sourece /root/.bashrc 让其立即生效 sourece /root/.bashrc

python 判断变量是数字型还是字符型

python如何判断数据类型?方法如下: 使用type()函数: import types type(x) is types.IntType # 判断是否int 类型 type(x) is types.StringType #是否string类型可以不用记住types.StringType,即: import types type(…

Adobe Premiere 2015 下载地址及安装教程

Premiere是一款专业的视频编辑软件,由Adobe Systems开发。它为用户提供了丰富的视频编辑工具和创意效果,可用于电影、电视节目、广告和其他多媒体项目的制作。 Premiere具有直观的用户界面和强大的功能,使得编辑和处理视频变得简单而高效。它…

【leetcode面试经典150题】51. 用最少数量的箭引爆气球(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主,题解使用C语言。(若有使用其他语言的同学也可了解题解思路,本质上语法内容一致&…

2024蓝桥A组E题

成绩统计 问题描述格式输入格式输出样例输入样例输出评测用例规模与约定解析参考程序难度等级 问题描述 题目有问题方差定义那加平方(vi-v) 格式输入 输入的第一行包含三个正整数n,k,T ,相邻整数之间使用一个空格分隔。 第二行包含n个正整数…

FPGA - 仲裁器的设计实现

一,为什么做仲裁 在多主单从的设计中,当多个源端同时发起传输请求时,这个时候就需要仲裁器来根据优先级来判断响应哪一个源端,向其传输数据。比如:以太网仲裁,DDR仲裁,光纤传图仲裁..... 二&a…

线程安全---synchronized

直接上代码 private static int a 0;public static void main(String[] args) throws InterruptedException {Thread t1 new Thread(() -> {for(int i 0; i < 50000; i){a;}});Thread t2 new Thread(() -> {for(int i 0; i < 50000; i){a;}});t1.start();t2.s…

Module Federation微前端应用拆分后 - request请求优化、私有化request|分发拦截器

1. 背景及目的 1.1 需求背景 随着应用的拆分&#xff0c;目前子应用有12个&#xff0c;这些子应用都使用的是同一个request实例。 前端支持后端切流&#xff0c;增加多个拦截器用于灰度 经手动梳理&#xff1a; 目前所有应用中有26个在使用的拦截器&#xff0c; 其中用于灰…

hive了解系列一

“ 随着智能手机的普及&#xff0c;互联网时代红利的爆发&#xff0c;用户数量和产生的数据也越发庞大。为了解决这个问题&#xff0c;提高数据的使用价值。 Hadoop生态系统就被广泛得到应用。 在早期&#xff0c;Hadoop生态系统就是为处理如此大数据集而产生的一个合乎成本效益…

【JAVA基础篇教学】第十四篇:Java中设计模式

博主打算从0-1讲解下java基础教学&#xff0c;今天教学第十四篇&#xff1a;Java中设计模式。 设计模式是解决软件设计中常见问题的可重复利用的解决方案。在 Java 中&#xff0c;常见的设计模式包括单例模式、工厂模式、观察者模式等。目前在基础教学篇中只展示常见的几种模…

nvm node.js的安装

说明&#xff1a;部分但不全面的记录 因为过程中没有截图&#xff0c;仅用于自己的学习与总结 过程中借鉴的优秀博客 可以参考 1,npm install 或者npm init vuelatest报错 2&#xff0c;了解后 发现是nvm使用的版本较低&#xff0c;于是涉及nvm卸载 重新下载最新版本的nvm 2…

【RabbitMQ】RabbitMQ基础认识

文章目录 前言初识MQSpringAMQP如何首发消息&#xff1f;消费者交换机Fanout&#xff1a;广播Direct交换机Topic交换机声明队列和交换机 总结 前言 微服务一旦拆分&#xff0c;必然涉及到服务之间的相互调用&#xff0c;目前我们服务之间调用采用的都是基于OpenFeign的调用。这…

四川古力未来科技抖音小店安全:保障您的购物体验,让每一笔交易都安心

在数字化浪潮席卷全球的今天&#xff0c;电子商务已经成为人们生活中不可或缺的一部分。四川古力未来科技抖音小店&#xff0c;作为新兴的电商力量&#xff0c;始终将顾客的安全放在首位&#xff0c;倾力打造安全、便捷、高效的购物平台&#xff0c;让每一位顾客在享受购物乐趣…