diff --git a/BUILD.gn b/BUILD.gn index 843cbd002576528020e1879e2e446a9fa37c4e1a..d743141b315ebc6087929c7b7429897ae3a87d7a 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -117,20 +117,17 @@ group("napi_packages") { deps = [ ":ace_napi", ":ace_napi_quickjs", + "sample/native_module_demo:demo", ] + deps += [ "sample/native_module_ability:ability" ] } group("napi_packages_test") { testonly = true deps = [ - "sample/native_module_demo:demo", "sample/native_module_netserver:netserver", "sample/native_module_storage:storage", "test/unittest:unittest", ] - - if (is_standard_system) { - deps += [ "sample/native_module_ability:ability" ] - } } diff --git a/sample/native_module_ability/BUILD.gn b/sample/native_module_ability/BUILD.gn index 3dc1c401bf9dce9d61f0fcc81a5ebe6dff119101..5bcc24957069f6fbb6a8e511a49dda9036e2e170 100644 --- a/sample/native_module_ability/BUILD.gn +++ b/sample/native_module_ability/BUILD.gn @@ -22,19 +22,9 @@ ohos_shared_library("ability") { sources = [ "native_module_ability.cpp" ] deps = [ - "//foundation/aafwk/standard/frameworks/kits/ability/native:abilitykit_native", "//foundation/ace/napi:ace_napi", ] - external_deps = [ - "aafwk_standard:ability_manager", - "aafwk_standard:want", - "appexecfwk_standard:appexecfwk_base", - "appexecfwk_standard:appexecfwk_core", - "appexecfwk_standard:libeventhandler", - "ipc:ipc_core", - ] - relative_install_dir = "module" subsystem_name = "ace" diff --git a/sample/native_module_ability/native_module_ability.cpp b/sample/native_module_ability/native_module_ability.cpp index e2840cd5377bba3149ec1eb7efd785526a2cb09d..e661327b0b723cd95e6d10f57a12b8ab5a7b37f8 100644 --- a/sample/native_module_ability/native_module_ability.cpp +++ b/sample/native_module_ability/native_module_ability.cpp @@ -15,8 +15,6 @@ #include -#include "ability.h" - #include "napi/native_api.h" #include "napi/native_node_api.h" @@ -27,37 +25,61 @@ void* data = nullptr; \ napi_get_cb_info(env, info, &argc, argv, &thisVar, &data) +enum TestEnum { + ONE = 0, + TWO, + THREE, + FOUR +}; + /* - * Get bundle path + * Constructor */ -static napi_value JSAbilityGetBundlePath(napi_env env, napi_callback_info info) +static napi_value DemoJavascriptClassConstructor(napi_env env, napi_callback_info info) { - GET_PARAMS(env, info, 0); - // get global value + napi_value thisArg = nullptr; + void* data = nullptr; + + napi_get_cb_info(env, info, nullptr, nullptr, &thisArg, &data); + napi_value global = nullptr; napi_get_global(env, &global); - // get ability - napi_value abilityObj = nullptr; - napi_get_named_property(env, global, "ability", &abilityObj); + return thisArg; +} + +/* + * Class Init + */ +void DemoJavascriptClassInit(napi_env env, napi_value exports) +{ + napi_value one = nullptr; + napi_value two = nullptr; + napi_value three = nullptr; + napi_value four = nullptr; - // get ability pointer - OHOS::AppExecFwk::Ability* ability = nullptr; - napi_get_value_external(env, abilityObj, (void**)&ability); + napi_create_int32(env, TestEnum::ONE, &one); + napi_create_int32(env, TestEnum::TWO, &two); + napi_create_int32(env, TestEnum::THREE, &three); + napi_create_int32(env, TestEnum::FOUR, &four); - // get bundle path - std::string path = ability->GetBundleCodePath(); - napi_value bundlePath = nullptr; - napi_create_string_utf8(env, path.c_str(), path.length(), &bundlePath); - return bundlePath; + napi_property_descriptor descriptors[] = { + DECLARE_NAPI_STATIC_PROPERTY("ONE", one), + DECLARE_NAPI_STATIC_PROPERTY("TWO", two), + DECLARE_NAPI_STATIC_PROPERTY("THREE", three), + DECLARE_NAPI_STATIC_PROPERTY("FOUR", four), + }; + + napi_value result = nullptr; + napi_define_class(env, "DemoClass", NAPI_AUTO_LENGTH, DemoJavascriptClassConstructor, nullptr, + sizeof(descriptors) / sizeof(*descriptors), descriptors, &result); + + napi_set_named_property(env, exports, "DemoClass", result); } static napi_value AbilityExport(napi_env env, napi_value exports) { - static napi_property_descriptor desc[] = { - DECLARE_NAPI_FUNCTION("getBundlePath", JSAbilityGetBundlePath), - }; - NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc)); + DemoJavascriptClassInit(env, exports); return exports; } diff --git a/sample/native_module_demo/BUILD.gn b/sample/native_module_demo/BUILD.gn index 6c9a09cd8a45d791219d8e120967a98accdea066..ea79d2127e6cba767f857eb6f37b5bf7d7f02aa9 100644 --- a/sample/native_module_demo/BUILD.gn +++ b/sample/native_module_demo/BUILD.gn @@ -12,6 +12,14 @@ # limitations under the License. import("//build/ohos.gni") +import("//build/ohos/ace/ace.gni") + +base_output_path = get_label_info(":demo_js", "target_out_dir") +demo_js_obj_path = base_output_path + "/demo.o" +gen_js_obj("demo_js") { + input = "demo.js" + output = demo_js_obj_path +} ohos_shared_library("demo") { include_dirs = [ @@ -24,7 +32,7 @@ ohos_shared_library("demo") { "native_module_demo.cpp", ] - deps = [ "//foundation/ace/napi:ace_napi" ] + deps = [ "//foundation/ace/napi:ace_napi", ":demo_js", ] relative_install_dir = "module" diff --git a/sample/native_module_demo/demo.js b/sample/native_module_demo/demo.js new file mode 100644 index 0000000000000000000000000000000000000000..9d7a0e1cd28345a91811569f6383799f28d2906a --- /dev/null +++ b/sample/native_module_demo/demo.js @@ -0,0 +1,18 @@ +const demoSo = requireInternal('demo'); + +console.info('before new'); +const demoClass = new demoSo.DemoClass(); +console.info('after new'); + +// 可以使用其它子系统的 js API +const ability = requireNapi('ability'); + +export default { + add: demoSo.add, + sub: demoClass.sub, + FeadConstant: { + TYPE_VALUE_0: 0, + TYPE_VALUE_1: demoClass.THREE, + TYPE_FROM_ABILITY: ability.DemoClass.FOUR + } +} diff --git a/sample/native_module_demo/native_module_demo.cpp b/sample/native_module_demo/native_module_demo.cpp index 68466c3041de1c279a7c746d047000919fccbef5..b1235286029a4c7895a46462e2c0c437a4899014 100644 --- a/sample/native_module_demo/native_module_demo.cpp +++ b/sample/native_module_demo/native_module_demo.cpp @@ -18,6 +18,9 @@ #include "napi/native_api.h" #include "napi/native_node_api.h" +extern const char _binary_demo_js_start[]; +extern const char _binary_demo_js_end[]; + /* * Sync callback */ @@ -206,6 +209,18 @@ static napi_value Init(napi_env env, napi_value exports) } EXTERN_C_END +// function name: NAPI_{ModuleName}_GetJSCode +extern "C" __attribute__((visibility("default"))) void NAPI_demo_GetJSCode(const char** buf, int* bufLen) +{ + if (buf != nullptr) { + *buf = _binary_demo_js_start; + } + + if (bufLen != nullptr) { + *bufLen = _binary_demo_js_end - _binary_demo_js_start; + } +} + /* * Module define */