1、如何跳转到共享包中的指定页面
A:在使用方通过router.pushUrl方法传递正确url地址信息进行跳转。其中url地址模板内容为:
'@bundle:包名(bundleName)/模块名(moduleName)/路径/页面所在的文件名(不加.ets后缀)'
2、HSP打包后,为什么会生成HAR包,它是否会导致App包大小膨胀
A:HSP编译产生的HAR,只含有配置文件和接口定义,不含有代码逻辑,而且该HAR包仅用于开发态,并不会影响App包的大小。
3、HAP层有无加固的策略
A:为了保证应用的完整性和来源可靠,在应用构建时是对应用内每一个HAP/HSP进行签名的,而且只有经过签名的应用才能在真机设备上安装、运行、和调试。
4、从包管理的角度,保证代码安全的措施有哪些
A:如下
-
编译:HAR、HSP在编译构建时支持代码混淆的功能。
-
打包:每个HSP/HAP单独签名,只有签名后的应用才允许安装。
-
安装:终端设备用户终端设备上需要使用应用市场进行安装和卸载,无法通过其他方式安装。
-
运行时:提供应用沙箱机制,它是一种以安全防护为目的的隔离机制,避免数据受到恶意路径穿越访问。
5、怎么理解App、HAP、HAR的关系
A:如下
-
App是个上架概念,多个HAP打包一起上架。
-
HAP是可以独立运行、分发的,HAP不是复用的,复用的应该是HAR。
-
HAR是静态共享包,每个模块依赖的话都会打包到HAP里。
6、HSP/HAR包中如何引用外部编译的so库文件
A:如下步骤
-
libxxx.so库文件放入HAR或HSP的libs/arm64-v8a目录。设备类型不同时,需添加对应子目录。新版的arm64为libs/arm64-v8a,老版的arm64为libs/armeabi-v7a,x86模拟器为libs/x86_64。
-
在CMakeLists.txt文件中链接so库文件。
// CMakeLists.txt链接so库文件
target_link_libraries(entry PUBLIC libxxx)
7、SharedLibrary能否在配置文件中声明abilities、extensionAbilities标签
A:SharedLibrary创建的HSP包,当前不支持在配置文件中声明abilities、extensionAbilities标签。详细信息请参考以下链接。
8、HAR包中使用window作为Toast时无法引入页面组件
A:在HAR包中利用一个window作为弹窗,该window通过一个page页面实现,使用window.setUIContent方法引入page时,无法导入。
-
HAR没有page,推荐在HAP里面声明窗口放HAR或HSP组件。
-
实现一个弹窗Toast,可以使用ArkTS的组件自定义弹窗组件。
9、业务模块HAR如何获取宿主HAP的数据
A:把需要获取的信息当做参数传入,HAR提供方法给HAP,HAP调用HAR的接口把需要的HAP中的信息传入到HAR里面,这样HAR可以获取到HAP里面的数据。
10、如何查询应用包的名称、供应商、版本号、版本文本、安装时间、更新时间描述信息
A:首先通过bundleManager.getBundleInfoForSelf()接口获取应用包的名称、供应商、版本号、版本文本、安装时间、更新时间描述信息。具体可参考示例代码:
import { bundleManager } from '@kit.AbilityKit'; // 申请获取bundleInfo和applicationInfo let bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION; try { bundleManager.getBundleInfoForSelf(bundleFlags, (err, data) => { // 获取应用自身的bundleName const bundleName = data.name; // 获取应用的版本号(versionCode) const versionCode = data.versionCode; // 获取应用的版本名(versionName) const versionName = data.versionName; if (err) { console.error(`getBundleInfoForSelf failed: ${err.message}`); } else { console.info(`get bundleName successfully: ${bundleName}`); console.info(`get versionCode successfully: ${versionCode}`); console.info(`get versionName successfully: ${versionName}`); console.info(`getBundleInfoForSelf successfully: ${JSON.stringify(data)}`); } }); } catch (err) { console.error(`getBundleInfoForSelf failed: ${JSON.stringify(err)}`); }
11、如何在本应用中获取到其他应用的HAP包信息
A:查询系统内其他应用信息的API暂时只提供给系统应用使用,具体使用方法:
-
查询系统内指定应用信息需要获取normal级权限"ohos.permission.GET_BUNDLE_INFO",使用接口bundleManager.getApplicationInfo()。
-
查询系统内所有应用信息需要获取system_basic级权限"ohos.permission.GET_INSTALLED_BUNDLE_LIST",使用接口bundleManager.getAllApplicationInfo()。
12、如何安装打包出来的App包(通过什么命令安装)
A:App资源包是无法直接安装的,需要通过应用市场下载才能安装,最后通过解析App包安装的还是HAP包。
更多详情查看 :文档中心