在安卓应用上扩展鸿蒙特性

独孤九剑 2021-06-30 09:47:29 4035

鸿蒙混合打包,在现有安卓应用的基础上扩展鸿蒙的特性,以最快的速度布局鸿蒙生态!

我尽可能把每一步的改动作为一个 commit,这样方便大家看代码。

开发步骤
①准备 Android 工程
本示例中,我用 AS 建了一个 Hello World 工程。
②Android 工程改造

④配置鸿蒙工程

这一步,有三点要注意的:

签名就不要转了,直接重新创建,只要秘钥和别名和 Android 的保持不变。(如果在模拟器上运行,不配置签名也能跑起来)

鸿蒙的 version 和 apk 的 version 要一致。

config.json 的 app 节点下,增加 relatedBundleName 而不是 originalName。

config.json 里都支持哪些字段,没必要看文档,只要按住 ctrl 点击相应的字段,就可以看到,比如点击 app 字段。

⑤卡片

本示例中,我用 DevEco Studio 建了一个名为 mycard 的 module,并且勾选"show in service center",这样这个卡片就可以显示在"服务中心"了。

有几点需要说明:

必须签名(我的验证结果是这样的),所以要有真机。我提交的签名文件是绑定我的机器,所以你要更新自己的签名文件。

卡片的 config.json 的 app 字段要和 entry 的 app 字段完全一致(relatedBundleName 字段只在 entry 里有就可以,卡片里不写也行)。

多 module 的工程,运行的时候要勾选 Deploy Multi Hap Packages。

为什么把卡片放在独立的 module 里?因为混合打包下,entry 只是一个壳,我们可以把 entry 当作 apk 的占位,所以 entry 里的内容都不会打到 appj 里,鸿蒙相关的功能代码我们只能放在独立的 module 中。(当然,这也是我的验证结果,最终要等华为官方更明确的文档解释)

⑥鸿蒙打开 apk 中的 activity

请参考京东 APP 鸿蒙版上架实践:

⑦鸿蒙打开 apk 中的 activity,并传递参数

鸿蒙 IntentParams 对应安卓 Bundle,相应的 api:
//ohos put:
IntentParams params = new IntentParams();
params.setParam("androidFile1","androidFile1----");
intent.setParams(params);

//android put:
Intent intent = new Intent();
intent.putExtra("androidFile1","androidFile1----");

//get:
intent.getStringExtra("androidFile1");

鸿蒙 Uri 对应安卓 Uri,鸿蒙 Entity 对应安卓 Category,相应的 api:
//ohos put:
Set entities = new HashSet<>();
entities.add("entity.user.c1");

Operation operation = new Intent.OperationBuilder()
.withUri(Uri.parse("https://www.baidu.com"))
.withEntities(entities)
.build();

//android put:
Intent intent = new Intent();
intent.setData(Uri.parse("https://www.baidu.com"));
intent.addCategory("entity.user.c1");

//get:
intent.getData();
intent.getCategories();

常见问题(欢迎评论区补充)

Failure[INSTALL_FAILED_INCONSISTENT_BUNDLE_VERSION]

混合打合时要和 apk 的 version 一致。

Failure[INSTALL_FAILED_RESTRICTED_PERMISSIONS_NOT_GRANTED]

没有继承 HarmonyApplication 或者没有配置到 AndroidManifest.xml 中。

Failure[INSTALL_FAILED_INTERNAL_ERROR]

确认一下:
在AndroidManifest.xml中,向根节点下增加。

向application节点下新增子节点。

<meta-data android:name="multiFrameworkBundle" android:value="true" /

来源:鸿蒙技术社区

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 95 4 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
独孤九剑
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区