01.编译构件
编译构建是将HarmonyOS应用的源代码、资源、第三方库等打包生成HAP或者APP的过程。其中,HAP可以直接运行在真机设备或者模拟器中;APP则是用于应用上架到华为应用市场。
为了确保HarmonyOS应用的完整性,HarmonyOS通过数字证书和授权文件来对应用进行管控,只有签名过的HAP才允许安装到设备上运行(如果不带签名信息,仅可以运行在模拟器中);
同时,上架到华为应用市场的APP也必须通过签名才允许上架。因此,为了保证应用能够发布和安装到设备上, 需要提前申请相应的证书与Profile文件
申请证书和Profile文件时,用于调试和上架的证书与授权文件不能交叉使用:
- 应用调试证书与应用调试Profile文件、应用发布证书与应用发布Profile文件具有匹配关系,必须成对使用,不可交叉使用。
- 应用调试证书与应用调试Profile文件必须应用于调试场景,用于发布场景将导致应用发布审核不通过;应用发布证书与应用发布Profile文件必须应用于发布场景,用于调试场景将导致应用无法安装。
02.编译构建前配置
在进行HarmonyOS应用的编译构建前,需要对工程和编译构建的Module进行设置,请根据实际情况进行修改。
- build.gradle:HarmonyOS应用依赖gradle进行构建,需要通过build.gradle来对工程编译构建参数进行设置。
build.gradle分为工程级和模块级两种类型,其中工程根目录下的工程级build.gradle用于工程的全局设置,各模块下的build.gradle只对本模块生效。 - config.json:应用配置文件,用于描述应用的全局配置信息、在具体设备上的配置信息和HAP的配置信息。
>> 关于 工程级别 build.gradle 文件的结构说明
- apply plugin:在工程级Gradle中引入打包app的插件,不需要修改。
apply plugin: 'com.huawei.ohos.app'
- ohos闭包:工程配置,包括如下配置项:
- compileSdkVersion:应用编译构建的目标SDK版本。
- signingConfigs:应用的签名信息,包括调试签名信息或发布签名信息。(默认不存在)
- buildscript闭包:Gradle脚本执行依赖,包括Maven仓地址和HarmonyOS编译构建插件。
HarmonyOS编译构建插件是以Gradle插件为基础,在使用相应的HarmonyOS编译构建插件时,需要使用配套的Gradle插件,两者之间的配套关系如下表所示。 - allprojects闭包:工程自身所需要的依赖,比如引用第三方库的Maven仓库和依赖包。
>> 关于 模块级别 build.gradle 文件的结构说明
- apply plugin:在模块级Gradle中引入打包hap和library的插件,无需修改。
- ohos闭包:模块配置,包括如下配置项:
* compileSdkVersion: 依赖的SDK版本
* showInServiceCenter: 是否在服务中心露出,只有在创建工程时,钩选了 "Show in Service Center" 选项时,才会生成这个字段;
showInServiceCenter true
* buildTypes: Java代码混淆功能;
* signingConfigs: 在构建生成HAP中进行设置后自动生成;
* entryModel "entry" 该Feature模块关联的Entry模块;
* mergeJsSrc true
跨设备的应用编译构建,是否需要合并JS代码。
//合并JS代码打包时,需要在ohos闭包下手动添加, true:表示需要合并代码,false表示不需要合并;
* annotationEnabled: 支持数据库注释
-
dependencies闭包: 该模块所需的依赖项;
-
config.json配置文件
HarmonyOS应用的每个模块下包含一个config.json配置文件,在编译构建前,需要对照检查和修改config.json文件
03. 配置 Java 代码混淆
DevEco Studio提供了代码混淆功能,通过使用ProGuard工具(ProGuard是一个开源的Java代码混淆器)将工程中的Java文件源代码进行混淆,
以简短无意义的名称(例如a、b、c等),对类、字段和方法等进行重命名,可以有效的减少应用的大小。
同时,代码混淆功能还可以提升反编译的难度,降低源代码泄露的风险,起到保护源代码的目的。
>>> 在模块 build.gradle 中配置 proguardEnabled true
在DevEco Studio中,在开启混淆功能后,压缩、优化功能均为默认开启的状态。如果想要关闭这些功能,可以在自定义规则文件中进行配置。
启动混淆功能后,在构建Release类型的hap包或APP时,DevEco Studio会自动对源码进行混淆。
>>> 公共模块在混淆时的处理规则
工程中存在多个模块的情况下,如果多个模块引用了公共的HarmonyOS Library模块或HAR类库,则需要在每一个模块中的config.json文件的module闭包中添加如下字段,
避免在混淆打包的时候出现公共的HarmonyOS Library模块或HAR类库的混淆结果被相互覆盖。
>>> 在DevEco Studio中为每一个模块默认提供了Proguard规则文件proguard-rules.pro。
开发者在proguard-rules.pro中配置混淆规则后,构建时会将自定义的混淆规则与SDK中默认的规则合并、应用到程序中。
如果程序引用了其它HarmonyOS Library模块或HAR类库,依赖中被打包的混淆规则也会一并应用到主程序中。
>>> 对于HarmonyOS Library模块,需要在模块下手动创建“consumer-rules.pro”文件,目录层级与“proguard-rules.pro”文件并列。
HarmonyOS Library模块中的混淆规则文件consumerRulesFiles,在编译时会打包到har包中,并更名为“proguard.txt”。
更多混淆规则 :https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ide_java_obfuscate-0000001063740093
04. 关于构建 生成HAP
HAP可以直接在模拟器或者真机设备上运行,用于HarmonyOS应用开发阶段的调试和查看运行效果。HAP按构建类型和是否签名可以分为以下四种形态:
- 构建类型为Debug的HAP(带调试签名信息):携带调试签名信息,具备单步调试等调试手段的HAP,一般用于开发者使用真机设备调试应用。
- 构建类型为Release的HAP(带调试签名信息):携带调试签名信息,不具备调试能力的HAP,相对于Debug类型的HAP包,体积更小,运行效果与用户实际体验一致。一般用于开发者在代码调试完成后,在真机设备中验证应用运行效果。
- 构建类型为Debug的HAP(不带签名):不带调试签名信息,具备单步调试等调试手段的HAP,一般用于开发者使用模拟器调试应用。
- 构建类型为Release的HAP(不带签名):不带调试签名信息,不具备调试能力的HAP,相对于Debug类型的HAP包,体积更小,运行效果与用户实际体验一致。一般用于开发者在代码调试完成后,在模拟器设备中验证应用运行效果。
根据HarmonyOS工程介绍,一个HarmonyOS工程下可以存在多个Module,在编译构建时,可以选择对单个Module进行编译构建;也可以对整个工程进行编译构建,同时生成多个HAP。
>>> a. 打开DevEco并连接上设备
>>> b. 打开配置签名模块 (因为上一步已经登陆了,所以这里直接出现了配置窗口, 但我们现在还没有项目,需要先去创建一个项目)
登陆 AppGallery Connect 去创建一个项目
1.先创建一个项目
2. 在项目中创建一个应用
3. 确认以后,会打开一个引导页面
>> 下载配置文件“agconnect-services.json” >>将Huawei DevEco Studio切换到项目视图 >> 将agconnect-services.json添加到模块根目录
>> Gradle文件中设置 AppGallery Connect 的Gradle插件以及 AppGallery Connect SDK 基础包
4. 此时再进入Project Structure 进行签名配置,发现,还是无法处理
>>> 由于缺少HarmoneyOS设备,无法创建配置文件。请先通过IP或USB连接HarmoneyOS设备
>>> 接入 HarmoneyOS 的真机设备, 立马出来了;
>>> 在工程级别的gradle中将出现签名数据
5. 左下角: OhosBuild Variants 检查确认为 debug 模式, 并编译HAP
** 如果只需要对单个Module进行编译构建,请在DevEco Studio左侧的工程目录中选中要编译的Module,
然后在主菜单栏点击Build > Make Module 'Module Name',生成单个Module的HAP包。
6. 一键重构