> 文档中心 > OpenHarmony ArkTS 框架下如何自定义权限

OpenHarmony ArkTS 框架下如何自定义权限

系统有很多权限,比如:多媒体权限

ohos.permission.READ_MEDIA

那么,当我们在做开发板定制hap 时需要我们自定义的特殊权限,该如何做呢,比如要做个ohos.permission.MY_TEST_PERMISSION自定义权限,我的思路就是,找到系统自带的权限声明的地方,然后追加自己的自定义权限,然后想办法让追加的内容生效

首先需要知道系统的权限声明的地方在哪里,系统这么多权限,至少应该是一个列表声明,然后需要申请权限的地方读取这个文件里相关权限的 名字 啊 权限描述什么的,所以,至少应该是一个单独的配置文件

在OpenHarmony ArkTs框架下,使用hdc_std shell 命令进入开发板,以下以rk3568开发板为例:

在我们没有任何资料的帮助下,该如何去找系统的权限配置单位置,首先我想到的是,如果系统文件命名规范,是不是至少应该有带有config 这样关键字的文件存在,所以使用find命令 搜寻整个开发板系统文件

find . –type f –name *.config  和find . –type f –name config

很遗憾,搜出来的两个文件使用hdc导出文件命令 发现不像

再次思索,ArkTs本就是Ts语言的变身,Ts本就是js的升级版,那么配置文件应该是json文件,所以使用搜索命令:

 find . -type f -name config.json

搜索结果:
./data/app/el1/bundle/public/ohos.global.systemres/ohos.global.systemres/config.json
./data/app/el1/bundle/public/ohos.backgroundtaskmgr.resources/ohos.backgroundtaskmgr.resources/config.json
./data/app/el1/bundle/public/com.ohos.mms/com.ohos.mms/config.json
./data/app/el1/bundle/public/com.ohos.settingsdata/com.ohos.settingsdata/config.json
./data/app/el1/bundle/public/com.ohos.telephonydataability/com.ohos.telephonydataability/config.json
./data/app/el1/bundle/public/ohos.sample.shopping/com.example.entry/config.json
./data/app/el1/bundle/public/com.ohos.download/com.ohos.download/config.json
./data/app/el1/bundle/public/ohos.telephony.resources/ohos.telephony.resources/config.json
./data/app/el1/bundle/public/com.ohos.contactsdataability/com.ohos.contactsdataability/config.json
./data/app/el1/bundle/public/ohos.samples.distributedmusicplayer/ohos.samples.distributedmusicplayer/config.json
./data/app/el1/bundle/public/ohos.samples.distributedcalc/ohos.samples.distributedcalc/config.json
./data/app/el1/bundle/public/ohos.samples.clock/ohos.samples.clock/config.json
./data/app/el1/bundle/public/com.ohos.contacts/com.ohos.contacts/config.json

 观察搜索结果:只有第一个比较符合,比如global 这种全局字眼,systemres系统资源文件字眼,这就看着很像了,所以退出开发板使用导出命令:

hdc_std file recv /data/app/el1/bundle/public/ohos.global.systemres/ohos.global.systemres/config.json D:\recv

然后打开导出的文件,可以看到

 观看文件内容,一大片系统的权限,然后对比 官网的权限列表:

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/permission-list.md

随便对了十几个,全都对的上号,包括normal /system_basic/system_core这种权限级别标识,以及申请权限是否会要弹框(那种有label属性的,就是要弹框显示的文字),那么这个文件八九不离十,就是我们需要修改的文件了

观看上面的文件,那个labelId 是一串数字,这东西哪来的,我们总不能随便写一个吧,玩过android的都知道,我们的资源文件索引,最终是在编译后的R文件里面,那些索引就是编译生成的一串数字,最终在加载资源的时候,就会用到这种索引,所以,这里面的这种数字应该不是手动写上去的,应该是由编译镜像生成的,那么这个文件,也应该是在编译系统镜像后生成的,所以,接下来的思路,就是找到这个文件所在的系统源文件位置,增加我们自己的权限,重新编译镜像,烧录进rk3568开发板

观看目录 该文件位置data/app/el1/bundle/public/ohos.global.systemres/ohos.global.systemres/config.json

ohos.global.systemres 这种很面熟,应该是在系统应用的目录里,直接进入开发板cd 

cd system/app   然后ls命令 目录

 果然是在这个目录下,那我们要修改这个hap,就得找到这个hap的源码,进入OpenHarmony的官网下载 这个应用源码:

utils_system_resources: Providing system resources such as fonts | 字体等系统资源下载下来后,发现这个并非用ets语言写的,就是说,不能用官方编译器生成最终的.hap包

先进入目录:

应用目录:systemres/main/config.json 把自己想要自定义的权限,依葫芦画瓢加上

观察了一下项目,这个项目得用linux随着源码一起编译进镜像,我们只要将 修改的这部分代码,放入镜像源文件位置即可,接下来就是编译系统镜像的过程了,这个就不做讲解,因为重点是:我也不会

但是公司同事会,最后编译好镜像,烧录进开发板,写个应用测试下权限,一把过,很nice

申请权限方式跟系统别的权限申请方式没什么区别,在这就不写了

以上就是摸索的过程,希望对你有所帮助