鴻蒙混合打包,在現有安卓應用的基礎上擴展鴻蒙的特性,以最快的速度布局鴻蒙生態!
本項目只是《京東 APP 鴻蒙版上架實踐》這篇文章的一個驗證,讓更多的兄弟們可以少走彎路。
我盡可能把每一步的改動作為一個 commit,這樣方便大家看代碼。
開發步驟
①準備 Android 工程
本示例中,我用 AS 建了一個 Hello World 工程。
②Android 工程改造
這一步,有兩點要注意的:
abilityshell_ide_java.jar 在這里,自行 copy 到安卓工程中。
注意 apk 文件名必須是 xxx-entry.apk 這種格式。
③準備鴻蒙工程
本示例中,我用 DevEco Studio 建了一個 Hello World 工程。
④配置鴻蒙工程
這一步,有三點要注意的:
簽名就不要轉了,直接重新創建,只要秘鑰和別名和 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 中。(當然,這也是我的驗證結果,最終要等華為官方更明確的文檔解釋)
請參考京東 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《String》 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中,向根節點下增加。
《uses-feature android:name=“zidane.software.ability” android:required=“false” /》
向application節點下新增子節點。
《meta-data android:name=“permZA” android:value=“true” /》
《meta-data android:name=“multiFrameworkBundle” android:value=“true” /》
編輯:jq
-
Android
+關注
關注
12文章
3935瀏覽量
127370 -
鴻蒙系統
+關注
關注
183文章
2634瀏覽量
66320
原文標題:在安卓應用上擴展鴻蒙特性
文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論