【HarmonyOS NEXT】FAQ之应用框架(程序包结构1)

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:如下步骤

  1. libxxx.so库文件放入HAR或HSP的libs/arm64-v8a目录。设备类型不同时,需添加对应子目录。新版的arm64为libs/arm64-v8a,老版的arm64为libs/armeabi-v7a,x86模拟器为libs/x86_64。

    点击放大

  2. 在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时,无法导入。

  1. HAR没有page,推荐在HAP里面声明窗口放HAR或HSP组件。

  2. 实现一个弹窗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包。

更多详情查看 :文档中心

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值