开发板:BearPi-HM_Micro_small
需要java8开发环境(更高版本没有测试过)
博主想使用openharmony的软总线功能,但是官方示例只提供了Native侧和ArkTS侧的教程(IPC与RPC通信开发指导 (openharmony.cn))。
使用Devceo Studio开发时又因为BearPi-HM_Micro的移植的openharmony代码为3.0版本。只能使用JS进行应用开发。 因此自己研究了下Native侧的开发方法
第一步 仿照小熊派示例编写一个最简单的myapp
目录结构如下
其中目录如下
 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.youkuaiyun.com/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 -version
和gradle -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包了。