openharmony不使用Devceo Studio进行应用开发编译hap包并对其签名


开发板:BearPi-HM_Micro_small

需要java8开发环境(更高版本没有测试过)
博主想使用openharmony的软总线功能,但是官方示例只提供了Native侧和ArkTS侧的教程(IPC与RPC通信开发指导 (openharmony.cn))。

使用Devceo Studio开发时又因为BearPi-HM_Micro的移植的openharmony代码为3.0版本。只能使用JS进行应用开发。 因此自己研究了下Native侧的开发方法

第一步 仿照小熊派示例编写一个最简单的myapp

​目录结构如下在这里插入图片描述
其中目录如下在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/674ede4a767a4b2ba4a092b571c5487d.png在这里插入图片描述
必须要有myapp_test.png做应用图标
.cpp内容如下

#include <ability_loader.h>
namespace OHOS {
class MyAppMainAbility : public Ability {
protected:
    void OnStart(const Want& want) override;
    void OnInactive() override;
    void OnActive(const Want& want) override;
    void OnBackground() override;
    void OnStop() override;
};
} // namespace OHOS

namespace OHOS {
REGISTER_AA(MyAppMainAbility)

void MyAppMainAbility::OnStart(const Want &want) {
    // 调用父类的OnStart方法
    Ability::OnStart(want);
}

}

config.json内容如下

{
    "app": {
        "bundleName": "com.huawei.myapp_test",
        "vendor": "huawei",
        "version": {
            "code": 1,
            "name": "1.0"
        },
        "apiVersion": {
            "compatible": 3,
            "target": 4
        }
    },
    "deviceConfig": {
        "default": {

        }
    },
    "module": {
        "package": "com.huawei.myapp_test",
        "name": ".MyHarmonyAbilityPackage",
        "deviceType": [
            "phone", "tv","tablet", "pc","car","smartWatch","sportsWatch","smartVision"
        ],
        "distro": {
            "deliveryWithInstall": true,
            "moduleName": "myapp_test",
            "moduleType": "entry"
        },
        "abilities": [{
            "name": "myapp_testMainAbility",
            "icon": "assets/myapp_test/resources/base/media/myapp_test.png",
            "label": "test testapp2 1",
            "launchType": "standard",
            "type": "page",
            "visible":true
        }
        ]
    }
}

BUILD.gn内容如下

{
    "app": {
        "bundleName": "com.huawei.myapp_test",
        "vendor": "huawei",
        "version": {
            "code": 1,
            "name": "1.0"
        },
        "apiVersion": {
            "compatible": 3,
            "target": 4
        }
    },
    "deviceConfig": {
        "default": {

        }
    },
    "module": {
        "package": "com.huawei.myapp_test",
        "name": ".MyHarmonyAbilityPackage",
        "deviceType": [
            "phone", "tv","tablet", "pc","car","smartWatch","sportsWatch","smartVision"
        ],
        "distro": {
            "deliveryWithInstall": true,
            "moduleName": "myapp_test",
            "moduleType": "entry"
        },
        "abilities": [{
            "name": "myapp_testMainAbility",
            "icon": "assets/myapp_test/resources/base/media/myapp_test.png",
            "label": "test testapp2 1",
            "launchType": "standard",
            "type": "page",
            "visible":true
        }
        ]
    }
}

之后就像设备开发那样(https://docs.openharmony.cn/pages/v4.1/zh-cn/device-dev/quick-start/quickstart-ide-3516-helloworld.md)
注意!!!:文档只供参考,两种开发BUILD.gn的内容并不相同,对其他文件添加内容也不完全相同
修改文件build/lite/components/applications.json,添加组件hello_world_app的配置,如下所示为applications.json文件添加的片段

        {
          "component": "bearpi_my_test_app",
          "description": "bearpi_my_test_app",
          "optional": "true",
          "dirs": [
            "applications/BearPi/BearPi-HM_Micro/samples/myapp_test"
          ],
          "targets": [
            "//applications/BearPi/BearPi-HM_Micro/samples/myapp_test:myapp_test_hap"
          ],
          "rom": "",
          "ram": "",
          "output": [
            "myapp_test.so"
          ],
          "adapted_kernel": [ "liteos_a","linux" ],
          "features": [],
          "deps": {
            "third_party": [
            ],
            "kernel_special": {},
            "board_special": {},
            "components": [
              "aafwk_lite",
              "appexecfwk_lite",
              "surface",
              "ui",
              "graphic_utils",
              "kv_store",
              "syspara_lite",
              "permission",
              "ipc_lite",
              "samgr_lite",
              "utils_base"
            ]
          }
        },

修改bearpi-hm_micro_small/vendor/bearpi/bearpi_hm_micro/config.json文件

      {
        "subsystem": "applications",
        "components": [
           { "component": "bearpi_sample_app", "features":[] },
           { "component": "bearpi_screensaver_app", "features":[] },
           { "component": "bearpi_my_test_app", "features":[] },
           { "component": "bearpi_sample_communication", "features":[] }
        ]
      },

之后直接进行编译,生成myapp_test.so文件(路径bearpi-hm_micro_small/out/bearpi_hm_micro/bearpi_hm_micro/usr/lib/libmyapp_test.so)

第二步 对生成的app打包,生成没有签名的hap文件

进行打包 生成没有前面的hap文件

java -jar /home/wsm/project/bearpi-hm_micro_small/developtools/packing_tool/jar/hmos_app_packing_tool.jar --mode hap --json-path /home/wsm/project/bearpi-hm_micro_small/applications/BearPi/BearPi-HM_Micro/samples/myapp_test/myapp_test/src/main/config.json --resources-path /home/wsm/project/bearpi-hm_micro_small/applications/BearPi/BearPi-HM_Micro/samples/myapp_test/myapp_test/src/main/resources --ability-so-path /home/wsm/project/bearpi-hm_micro_small/out/bearpi_hm_micro/bearpi_hm_micro/usr/lib/libmyapp_test.so  --out-path /home/wsm/project/bearpi-hm_micro_small/out/bearpi_hm_micro/bearpi_hm_micro/system/internal/unsigned_myapp_test.hap --force true --sign-by-server False
/home/wsm/project/bearpi-hm_micro_small/developtools/packing_tool/jar/hmos_app_packing_tool.jar
 指定了要运行的 JAR 文件的路径。
 --mode hap: 指定了工具运行的模式为 HAP 模式,用于生成 HAP 文件。
--json-path /home/wsm/project/bearpi-hm_micro_small/applications/BearPi/BearPi-HM_Micro/samples/setting/setting/src/main/config.json: 
指定了 JSON 配置文件的路径。
--resources-path /home/wsm/project/bearpi-hm_micro_small/applications/BearPi/BearPi-HM_Micro/samples/setting/setting/src/main/resources: 
指定了资源文件的路径。
--ability-so-path /home/wsm/project/bearpi-hm_micro_small/out/bearpi_hm_micro/bearpi_hm_micro/libsetting.so:
 指定了app文件的路径。
--out-path /home/wsm/project/bearpi-hm_micro_small/out/bearpi_hm_micro/bearpi_hm_micro/system/internal/unsigned_setting.hap:
 指定了生成的 HAP 文件的输出路径。
--force true:
 强制生成 HAP 文件,将覆盖已有的同名文件。
--sign-by-server False: 
指定了是否由服务器对 HAP 文件进行签名。在这里设置为 False,意味着不对 HAP 文件进行服务器签名。

路径根据自己项目路径进行修改,不要无脑抄!

第三步 将未签名的应用安装进行测试

根据教程https://gitee.com/bearpi/bearpi-hm_micro_small/blob/master/applications/BearPi/BearPi-HM_Micro/docs/将上一步生成的未签名的hap包安装进行测试

理论上到这里就可以使用了,hap包已经可以安装使用了。

第四步 对应用进行签名

这一步很多涉及安全类的知识,如公钥私钥校验,数字签名等。
建议了解一些预备知识和应用签名的原理。
推荐文章
https://blog.csdn.net/weixin_49061555/article/details/122105765
https://cloud.baidu.com/article/3275571
https://gitee.com/openharmony/docs/blob/OpenHarmony-3.1-Beta/zh-cn/application-dev/quick-start/configuring-openharmony-app-signature.md

需要环境 mvn gradle java8 缺少自行安装
mvn -versiongradle -v进行环境验证 缺少哪个安装哪个
找个地方执行命令

git clone https://gitee.com/openharmony/developtools_hapsigner.git

https://gitee.com/openharmony/developtools_hapsigner/tree/master/
``
这个是应用签名工具,里面介绍了使用方法和流程。
具体流程就不多赘述,说一下如何快速使用(自动签名)
克隆后进入文件夹 cd developtools_hapsigner/hapsigntool
执行gradle build
执行mvn package

进入目录 cd ../autosign
将未签名的hap包复制过来 cp /home/wsm/project/bearpi-hm_micro_small/out/bearpi_hm_micro/bearpi_hm_micro/system/internal/unsigned_setting.hap ./
修改文件 createAppCertAndProfile.config

// Sign profile
sign.profile.inFile=UnsgnedReleasedProfileTemplate.json
sign.profile.outFile=com.huawei.myapp_test_HarmonyAppProvision_release.p7b

将outFile改为你想要的profile文件的名字
修改文件 signHap.config

// Sign profile
sign.profile.outFile=com.huawei.myapp_test_HarmonyAppProvision_release.p7b

// Sign app
sign.app.inFile=unsigned_myapp_test.hap
sign.app.outFile=myapp_test.hap

上面三条都要修改 sign.profile.outFile为要输出的profile文件的名字

sign.app.inFile为没签名过的hap包
sign.app.outFile为签名后hap包的名字

接下来根据README.md文档进行操作

   chmod a+x create_root.sh
   chmod a+x create_appcert_sign_profile.sh
   chmod a+x sign_hap.sh

   ./create_root.sh

   ./create_appcert_sign_profile.sh

   ./sign_hap.sh

之后查看./result目录就已经有生成好的签名好的profile文件(.p7b)和签名好的hap包了。

  • 12
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丈原

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值