OpenHarmony5.0release应用开发基础之fullsdk使用
1、什么是fullsdk?什么是publicsdk?为什么fullsdk需要单独下载? public-SDK是提供给应用开发的工具包,跟随DevEco Studio下载,不包含系统应用所需要的高权限API full-SDK是提供给OEM厂商开发应用的工具包,不能随DevEco Studio下载,包含了
1、什么是fullsdk?什么是publicsdk?为什么fullsdk需要单独下载?
public-SDK是提供给应用开发的工具包,跟随DevEco Studio下载,不包含系统应用所需要的高权限API
full-SDK是提供给OEM厂商开发应用的工具包,不能随DevEco Studio下载,包含了系统应用所需要的高权限API
三方开发者通过DevEco Studio自动下载的SDK均为public版本。public-SDK不支持开发者使用所有的系统API,包括animator组件、xcomponent组件、@ohos.app.ability.abilityManager.d.ts、@ohos.app.form.formInfo.d.ts、@ohos.bluetooth.d.ts等,如工程必须依赖于系统API,请按照以下步骤替换full-SDK。
- 可以看到OH本意是好的,做了系统API权限区分,但在实际开发中,经常遇到需要使用fullsdk的场景。但是fullsdk又需要特殊下载替换,对于部分初学者不是很友好,所以特开此文描述一下有关fullsdk的问题。
2、如何获取fullsdk?如何获取publicsdk?
方法一是自行编译
编译指令:
./build.sh --product-name ohos-sdk --ccache
- 下载源码后执行上述命令,等待编译完成(产物为fullsdk,如果想要publicsdk,DevEco默认下载的就是publicsdk,不用再下载,不要绕晕了)
- 可以在如下目录看到产物,如果是单纯的应用开发者,不推荐这种方式,费时,参考方法二
方法二是网站上下载(本质上是网站在每天编译,提供下载链接)
地址:https://ci.openharmony.cn/workbench/cicd/dailybuild/dailylist
- 选择需要的版本,刷新日期,点今天(部分老版本不再编译,可以把日期往前调)
- 找到对应的fullsdk点击下载,选择全量包,下载完解压
再解压,会得到和上面的一样的如下文件夹。
- 选择需要的版本,刷新日期,点今天(部分老版本不再编译,可以把日期往前调)
3、如何使用fullsdk?
- 打开DevEco,按住Ctrl+Alt+S呼出设置栏,或者从左上角进入
- 搜索栏输入SDK,切换到OpenHarmony,复制右侧路径
- 在文件目录页打开上述路径,选择自己想要替换的api版本,没有就新建数字文件夹(5.0.0对应api12,5.0.1对应api13,4.1对应api11,4.0对应api10)。以12为例。
- 进入文件夹,如果未替换过,且有备份需求,建议把文件都复制出去,然后把这个目录文件全删了,把上一步得到的文件夹都移过来,你会发现这四个文件夹和上一步四个文件夹名字是对应的。
- 再次打开DevEco,此时一般就已经完成了sdk替换,如果没完成,关闭DevEco重新打开。至此替换fullsdk的完整步骤走完了。
4、什么时候需要使用fullsdk?
api查阅网址:https://docs.openharmony.cn/(非最新,只是方便)
api文档仓:https://gitee.com/openharmony/docs(包含所有版本的的所有历史文档,内容保证最新,就是查阅不方便)
当查阅接口左侧标明为系统接口时,需要使用fullsdk。
当接口描述提示为系统接口时,需要使用fullsdk。
报错信息Permission verification failed. A non-system application calls a system API.等。
如下代码注释有
@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)
一个简单的页面,就加了个点击函数,其他的不用细看。
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%') } }
直接编译。
可以看到已经有了输出。
可以上机验证,不过到这一步几乎就成功了,下面换为publicsdk,继续第2步
可以看到,IDE直接报红找不到,编译也报错。因为publicsdk只有publicApi,fullsdk有publicApi和systemApi,而brightness属于systemApi,所以替换为publicApi后直接报红找不到。
5、结语
应该会更新文档,有问题可以先提,到时候统一改。
参考链接
更多推荐
所有评论(0)