1、什么是fullsdk?什么是publicsdk?为什么fullsdk需要单独下载?


  • 可以看到OH本意是好的,做了系统API权限区分,但在实际开发中,经常遇到需要使用fullsdk的场景。但是fullsdk又需要特殊下载替换,对于部分初学者不是很友好,所以特开此文描述一下有关fullsdk的问题。

2、如何获取fullsdk?如何获取publicsdk?

  1. 方法一是自行编译

    编译指令:./build.sh --product-name ohos-sdk --ccache

    1. 下载源码后执行上述命令,等待编译完成(产物为fullsdk,如果想要publicsdk,DevEco默认下载的就是publicsdk,不用再下载,不要绕晕了)
    2. 可以在如下目录看到产物,如果是单纯的应用开发者,不推荐这种方式,费时,参考方法二

      img

  2. 方法二是网站上下载(本质上是网站在每天编译,提供下载链接)

    地址:https://ci.openharmony.cn/workbench/cicd/dailybuild/dailylist

    1. 选择需要的版本,刷新日期,点今天(部分老版本不再编译,可以把日期往前调)

      img

    2. 找到对应的fullsdk点击下载,选择全量包,下载完解压

      img


      img


      img


      再解压,会得到和上面的一样的如下文件夹。

      img

3、如何使用fullsdk?

  1. 打开DevEco,按住Ctrl+Alt+S呼出设置栏,或者从左上角进入

    img

  2. 搜索栏输入SDK,切换到OpenHarmony,复制右侧路径

    img

  3. 在文件目录页打开上述路径,选择自己想要替换的api版本,没有就新建数字文件夹(5.0.0对应api12,5.0.1对应api13,4.1对应api11,4.0对应api10)。以12为例。

    img

  4. 进入文件夹,如果未替换过,且有备份需求,建议把文件都复制出去,然后把这个目录文件全删了,把上一步得到的文件夹都移过来,你会发现这四个文件夹和上一步四个文件夹名字是对应的。

    img

  5. 再次打开DevEco,此时一般就已经完成了sdk替换,如果没完成,关闭DevEco重新打开。至此替换fullsdk的完整步骤走完了。

4、什么时候需要使用fullsdk?

api查阅网址:https://docs.openharmony.cn/(非最新,只是方便)

api文档仓:https://gitee.com/openharmony/docs(包含所有版本的的所有历史文档,内容保证最新,就是查阅不方便)

  1. 当查阅接口左侧标明为系统接口时,需要使用fullsdk。

  2. 当接口描述提示为系统接口时,需要使用fullsdk。

  3. 报错信息Permission verification failed. A non-system application calls a system API.等。

    img

  4. 如下代码注释有@systemapi时,需要使用fullsdk(api12是@systemapi,其他版本可能是其他提示)

    import { BusinessError } from './@ohos.base';
    
    /**
     * Provides interfaces to control the power of display.
     *
     * @namespace brightness
     * @syscap SystemCapability.PowerManager.DisplayPowerManager
     * @systemapi
     * @since 7
     */
    declare namespace brightness {
      /**
       * Sets the screen brightness.
       *
       * @param { number } value Brightness value, ranging from 0 to 255.
       * value parameter must be of type number.
       * @throws { BusinessError } 202 - Permission verification failed. A non-system application calls a system API.
       * @throws { BusinessError } 401 - Parameter error. Possible causes: 1.Mandatory parameters are left unspecified;
       * 2. Incorrect parameter types;
       * @throws { BusinessError } 4700101 - Failed to connect to the service.
       * @syscap SystemCapability.PowerManager.DisplayPowerManager
       * @systemapi
       * @since 7
       */
      function setValue(value: number): void;
    
      /**
       * Sets the screen brightness.
       *
       * @param { number } value - Brightness value, ranging from 0 to 255.
       * value parameter must be of type number.
       * @param { boolean } continuous - This parameter is used in the scenario of continuous adjustment to the brightness.
       * You are advised to set this parameter to true during the continuous adjustment and
       * to false at the end of the continuous adjustment for better performance.
       * continuous parameter must be of type boolean.
       * @throws { BusinessError } 202 - Permission verification failed. A non-system application calls a system API.
       * @throws { BusinessError } 401 - Parameter error. Possible causes: 1.Mandatory parameters are left unspecified;
       * 2. Incorrect parameter types;
       * @throws { BusinessError } 4700101 - Failed to connect to the service.
       * @syscap SystemCapability.PowerManager.DisplayPowerManager
       * @systemapi
       * @since 11
       */
      function setValue(value: number, continuous: boolean): void;
    }
    export default brightness;
    

4、一个简单的应用来验证fullsdk是否替换成功

环境:DevEco Studio NEXT Release 构建版本:5.0.3.900,构建 2024年10月8日

sdk:手动替换这个目录下为api12的fullsdk文件(5.0.0.71 Release)

img

  1. 一个简单的页面,就加了个点击函数,其他的不用细看。

    import brightness from '@ohos.brightness';
    
    @Entry
    @Component
    struct Index {
      @State message: string = 'Hello World';
    
      build() {
        RelativeContainer() {
          Text(this.message)
            .onClick(()=>{
              try {
                brightness.setValue(255, true);
              } catch(err) {
                console.error('set brightness failed, err: ' + err);
              }
            })
            .id('HelloWorld')
            .fontSize(50)
            .fontWeight(FontWeight.Bold)
            .alignRules({
              center: { anchor: '__container__', align: VerticalAlign.Center },
              middle: { anchor: '__container__', align: HorizontalAlign.Center }
            })
        }
        .height('100%')
        .width('100%')
      }
    }
    
  2. 直接编译。

    img

  3. 可以看到已经有了输出。

    img

  4. 可以上机验证,不过到这一步几乎就成功了,下面换为publicsdk,继续第2步

    img


    img


    可以看到,IDE直接报红找不到,编译也报错。因为publicsdk只有publicApi,fullsdk有publicApi和systemApi,而brightness属于systemApi,所以替换为publicApi后直接报红找不到。

5、结语

应该会更新文档,有问题可以先提,到时候统一改。

参考链接

如何替换full-SDK (openharmony.cn)

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐