diff --git a/en/application-dev/quick-start/cross-app-hsp.md b/en/application-dev/quick-start/cross-app-hsp.md index db971e348908dbc6f6ca87f5d84d162b6bac0997..4d4115490d7060843fe008cda7281fcc2a003ada 100644 --- a/en/application-dev/quick-start/cross-app-hsp.md +++ b/en/application-dev/quick-start/cross-app-hsp.md @@ -17,34 +17,29 @@ An inter-application HSP works by combining the following parts: HSP: contains the actual implementation code, including the JS/TS code, C++ libraries, resources, and configuration files. It is either released to the application market or integrated into the system version. ### Integrating the HAR in an Inter-Application HSP -Define the interfaces to be exported in the **index.d.ets** file in the HAR, which is the entry to the declaration file exported by the inter-application HSP. The path of the **index.d.ets** file is as follows: +Define the interfaces to be exported in the **index.ets** file in the HAR, which is the entry to the declaration file exported by the inter-application HSP. The path to the **index.ets** file is as follows: ``` -src -├── main -| └── module.json5 -├── index.d.ets +liba +├── src +│ └── main +│ ├── ets +│ │ ├── pages +│ │ └── index.ets +│ ├── resources +│ └── module.json5 └── oh-package.json5 ``` -Below is an example of the **index.d.ets** file content: -```ts -@Component -export declare struct UIComponent { - build():void; -} - -export declare function hello(): string; - -export declare function foo1(): string; +Below is an example of the **index.ets** file content: -export declare function foo2(): string; - -export declare function nativeHello(): string; +```ts +// liba/src/main/ets/index.ets +export { hello, foo1, foo2, nativeMulti, UIComponent } from './ui/MyUIComponent' ``` -In the example, **UIComponent** is an ArkUI component, **hello()**, **foo1()**, and **foo2()** are TS methods, and **nativeHello()** is a native method. Specific implementation is as follows: +In the example, **UIComponent** is an ArkUI component, **hello()**, **foo1()**, and **foo2()** are TS methods, and **nativeMulti()** is a native method. Specific implementation is as follows: #### ArkUI Components The following is an implementation example of ArkUI components in the HSP: ```ts -// lib/src/main/ets/ui/MyUIComponent.ets +// liba/src/main/ets/ui/MyUIComponent.ets @Component export struct UIComponent { @State message: string = 'Hello World' @@ -63,6 +58,7 @@ export struct UIComponent { #### **TS Methods** The following is an implementation example of TS methods in the HSP: ```ts +// liba/src/main/ets/ui/MyUIComponent.ets export function hello(name: string): string { return "hello + " + name; } @@ -74,50 +70,22 @@ export function foo1() { export function foo2() { return "foo2"; } + ``` #### **Native Methods** -The following is an implementation example of native methods in the HSP: -```C++ -#include "napi/native_api.h" -#include -#include -#include - -const std::string libname = "liba"; -const std::string version = "v10001"; - -static napi_value Hello(napi_env env, napi_callback_info info) { - napi_value ret; - std::string msg = libname + ":native hello, " + version; - napi_create_string_utf8(env, msg.c_str(), msg.length(), &ret); - return ret; -} +The HSP can contain .so files compiled in C++. The HSP indirectly exports the native method in the .so file. In this example, the **multi** API in the **libnative.so** file is exported. -EXTERN_C_START -static napi_value Init(napi_env env, napi_value exports) { - napi_property_descriptor desc[] = { - {"nativeHello", nullptr, Hello, nullptr, nullptr, nullptr, napi_default, nullptr}}; - napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); - return exports; -} -EXTERN_C_END - -static napi_module demoModule = { - .nm_version = 1, - .nm_flags = 0, - .nm_filename = nullptr, - .nm_register_func = Init, - .nm_modname = "liba", - .nm_priv = ((void *)0), - .reserved = {0}, -}; - -extern "C" __attribute__((constructor)) void RegisterLibaModule(void) { - napi_module_register(&demoModule); +```ts +// liba/src/main/ets/ui/MyUIComponent.ets +import native from "libnative.so" + +export function nativeMulti(a: number, b: number) { + return native.multi(a, b); } ``` + ### Using the Capabilities Exported from the HAR -To start with, [configure dependency](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ohos-development-npm-package-0000001222578434#section89674298391) on the HAR. The dependency information will then be generated in the **module.json5** file of the corresponding module, as shown in the following: +To start with, [configure dependency](https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/creating_har_api9-0000001518082393-V3#section611662614153) on the HAR. The dependency information will then be generated in the **module.json5** file of the corresponding module, as shown in the following: ```json "dependencies": [ { @@ -180,7 +148,7 @@ struct Index { #### Referencing Native Methods in the HAR To reference the native methods exported from the HAR, use **import** as follows: ``` ts -import { nativeHello } from 'liba' +import { nativeMulti } from 'liba' @Component struct Index { @@ -190,7 +158,7 @@ struct Index { Button('Button') .onClick(()=>{ // Reference the native method in the HAR. - nativeHello(); + nativeMulti(); }) } .width('100%') @@ -207,11 +175,6 @@ Inter-application HSPs are not completely integrated into an application. They a ### Inter-Application HSP Debugging Mode You can debug an inter-application HSP after it is distributed to a device. If the aforementioned distribution methods are not applicable, you can distribute the HSP by running **bm** commands. The procedure is as follows: - -> **NOTE** -> -> Do not reverse steps 2 and 3. Otherwise, your application will fail to be installed due to a lack of the required inter-application HSP. For more information about the **bm** commands, see [Bundle Management](../../readme/bundle-management.md). - 1. Obtain the inter-application HSP installation package. 2. Run the following **bm** command to install the inter-application HSP. ``` @@ -222,3 +185,7 @@ bm install -s sharebundle.hsp bm install -p feature.hap ``` 4. Start your application and start debugging. + +> **NOTE** +> +> Do not reverse steps 2 and 3. Otherwise, your application will fail to be installed due to a lack of the required inter-application HSP. For more information about the **bm** commands, see [bm Commands](../../readme/bundle-management.md#bm-commands). \ No newline at end of file diff --git a/en/application-dev/quick-start/har-package.md b/en/application-dev/quick-start/har-package.md index 63b5fcfd10437ac2140a17bcc1daf690e780c791..587af49e108ed1cfedbd9a190ea7858bc470073c 100644 --- a/en/application-dev/quick-start/har-package.md +++ b/en/application-dev/quick-start/har-package.md @@ -2,7 +2,7 @@ A Harmony Archive (HAR) is a static shared package that can contain code, C++ libraries, resources, and configuration files. It enables modules and projects to share code related to ArkUI components, resources, and more. Unlike a Harmony Ability Package (HAP), a HAR cannot be independently installed on a device. Instead, it can be referenced only as the dependency of an application module. ## Creating a HAR Module -You can kickstart your HAR module development with the module template of the **Library** type in DevEco Studio. By default, obfuscation is disabled for the HAR module. To enable this feature, set **artifactType** in the **build-profile.json5** file of the HAR module to **obfuscation** as follows: +You can [create a HAR module in DevEco Studio](https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/creating_har_api9-0000001518082393-V3#section143510369612). To better protect your source code, enable obfuscation for the HAR module so that DevEco Studio compiles, obfuscates, and compresses code during HAR building. To enable obfuscation, open the **build-profile.json5** file of the HAR module and set **artifactType** to **obfuscation** as follows: ```json { @@ -12,15 +12,13 @@ You can kickstart your HAR module development with the module template of the ** } } ``` -The value options of **artifactType** are as follows, and the default value is **original**: +The value options of **artifactType** are as follows, with the default value being **original**: - **original**: Code is not obfuscated. - **obfuscation**: Code is obfuscated using Uglify. -When obfuscation is enabled, DevEco Studio compiles, obfuscates, and compresses code during HAR building, thereby protecting your code assets. - > **NOTE** > -> If **artifactType** is set to **obfuscation**, **apiType** must be set to **stageMode**, because obfuscation is available only in the stage model. +> Obfuscation is available only in the stage model. Therefore, if **artifactType** is set to **obfuscation**, **apiType** must be set to **stageMode**. ## Precautions for HAR Development - The HAR does not support the declaration of **abilities** and **extensionAbilities** in its configuration file. @@ -88,12 +86,12 @@ export { func2 } from './src/main/ts/test' ``` ### Resources Resources are packed into the HAR when it is being compiled and packaged. During compilation and building of a HAP, DevEco Studio collects resource files from the HAP module and its dependent modules. If the resource files of different modules have the same name, DevEco Studio overwrites the resource files based on the following priorities (in descending order): -- AppScope (supported only by the stage model of API version 9) +- AppScope (only for the stage model of API version 9) - Modules in the HAP file - If resource conflicts occur between dependent HAR modules, they are overwritten based on the dependency sequence. (The module that is higher in the dependency sequence list has higher priority.) ## Referencing ArkUI Components, APIs, and Resources in the HAR -To start with, [configure dependency](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ohos-development-npm-package-0000001222578434#section89674298391) on the HAR. +To start with, [configure dependency](https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/creating_har_api9-0000001518082393-V3#section611662614153) on the HAR. ### Reference ArkUI Components in the HAR @@ -170,3 +168,7 @@ struct Index { } } ``` + +## Releasing a HAR + +Follow the [instructions](https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/creating_har_api9-0000001518082393-V3#section1213451811512) to release a HAR. diff --git a/en/application-dev/quick-start/in-app-hsp.md b/en/application-dev/quick-start/in-app-hsp.md index 4c0cc3c7dffc1c41d0011dd644a94a84424808dc..cb31cbc5b703c3caec5c34b4e0702657b56d26f5 100644 --- a/en/application-dev/quick-start/in-app-hsp.md +++ b/en/application-dev/quick-start/in-app-hsp.md @@ -5,7 +5,7 @@ The in-application HSP is released with the Application Package (App Pack) of th ## Developing an In-Application HSP -You can kickstart your HSP development with the HSP template in DevEco Studio. In this example, an HSP module named **library** is created. The basic project directory structure is as follows: +[Create an HSP module in DevEco Studio](https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/hsp-0000001521396322-V3#section7717162312546). In this example, an HSP module named **library** is created. The basic project directory structure is as follows: ``` library ├── src @@ -88,7 +88,7 @@ if **Image("common/example.png")** is used in the HSP module, the **\** c ### Exporting Native Methods The HSP can contain .so files compiled in C++. The HSP indirectly exports the native method in the .so file. In this example, the **multi** method in the **libnative.so** file is exported. ```ts -// ibrary/src/main/ets/utils/nativeTest.ts +// library/src/main/ets/utils/nativeTest.ts import native from "libnative.so" export function nativeMulti(a: number, b: number) { @@ -103,15 +103,9 @@ export { nativeMulti } from './utils/nativeTest' ``` ## Using the In-Application HSP -To use APIs in the HSP, first configure the dependency on the HSP in the **oh-package.json5** file of the module that needs to call the APIs (called the invoking module). If the HSP and the invoking module are in the same project, the APIs can be referenced locally. The sample code is as follows: -```json -// entry/oh-package.json5 -"dependencies": { - "library": "file:../library" -} -``` -You can now call the external APIs of the HSP in the same way as calling the APIs in the HAR. -In this example, the external APIs are the following ones exported from **library**: +To use APIs in the HSP, first [configure the dependency](https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/hsp-0000001521396322-V3#section6161154819195) on the HSP in the **oh-package.json5** file of the module that needs to call the APIs (called the invoking module). +You can then call the external APIs of the HSP in the same way as calling the APIs in the HAR. In this example, the external APIs are the following ones exported from **library**: + ```ts // library/src/main/ets/index.ets export { Log, add, minus } from './utils/test'