从网络下载的abc文件,通过napi_run_script_path接口执行的方法
通过网络下载的abc文件,保存到沙箱目录后,需要支持通过napi_run_script_path接口运行,这种场景,在现实中,经常会碰到,比如,过关游戏中,玩某一关卡时才下载对应的程序文件。
场景实现思路:
1.通过es2abc工具将ets文件生成abc文件,该工具为sdk自带工具,路径举例如下:
D:\Programs\sdk\HarmonyOS-NEXT-DP2\base\ets\build-tools\ets-loader\bin\ark\build-win\bin
如,将TestClass.ets文件生成TestClass.abc文件。
在命令行中,执行./es2abc.exe TestClass.ets指令,在工具目录下,就会生成对应的abc文件。
2.将abc文件放到工程的src/main/resources/rawfile目录下,代码中将该文件拷贝一份到应用的沙箱路径下,以此来模拟从网络上下载abc文件的过程。
3.需要配置ohos.permission.RUN_DYN_CODE权限,首先,在src/main/module.json5文件上添加该权限(requestPermissions项中):
......
"deviceTypes": [
"phone"
],
"requestPermissions": [
{
"name" : "ohos.permission.RUN_DYN_CODE",
"reason": "$string:reason",
"usedScene": {
"abilities": [
"FormAbility"
],
"when":"always"
}
}
],
"deliveryWithInstall": true,
......
其次,在代码中,是该权限起作用。
4.通过verifyAbc文件来验证abc文件合法性,以便其将abc文件映射到el1目录下,如映射后的沙箱目录如下:
/data/storage/el1/bundle//abcs/data/storage/el2/base/haps/entry/files/TestClass.abc
5.通过首先的worker来调用napi_run_script_path接口
使用的OS能力相关的核心API
- requestPermissionsFromUser
- RestrictedWorker
- getRawFileContent
- napi_run_script_path
1) 代码中申请权限:
2) 目录网路abc文件下载到沙箱目录:
3) 验证文件,以便映射到el1目录下:
4) 通过受限worker调用abc文件:
5) Native C++层实现:
实现效果
手机上执行结果如下:
楼主 TestClass代码可以提供一下么, 还得还不是太懂