赞
踩
系统有很多权限,比如:多媒体权限
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
申请权限方式跟系统别的权限申请方式没什么区别,在这就不写了
以上就是摸索的过程,希望对你有所帮助
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。