diff --git a/app/oh-package.json5 b/app/oh-package.json5 index bfbf670..d2b8133 100644 --- a/app/oh-package.json5 +++ b/app/oh-package.json5 @@ -8,7 +8,8 @@ "dependencies": { "@devwiki/common_ui": "file:../common_ui", "@devwiki/base": "file:../base", - "@ohos/axios": "^2.2.0" + "@ohos/axios": "^2.2.0", + "@devwiki/native_lib": "file:../native_lib" }, "devDependencies": {}, "dynamicDependencies": {} diff --git a/app/src/main/ets/pages/Index.ets b/app/src/main/ets/pages/Index.ets index 4f5fa54..d75e76a 100644 --- a/app/src/main/ets/pages/Index.ets +++ b/app/src/main/ets/pages/Index.ets @@ -8,6 +8,7 @@ import { Log } from '@devwiki/base'; import { BaseLocalStorage, ScreenUtil } from '@devwiki/base'; import { HomeItem, HomeItemGroup } from '../model/Home'; import { common, Want } from '@kit.AbilityKit'; +import { CalculateAdapter } from '@devwiki/native_lib/src/main/cpp/types/libnatvie_lib'; @Entry @@ -63,9 +64,13 @@ struct Index { } ]; + adapter?: CalculateAdapter; + aboutToAppear(): void { ScreenUtil.getInstance().initScreenSize(); BaseLocalStorage.getInstance().init(getContext(this)); + this.adapter = new CalculateAdapter(); + let a = this.adapter.add(1,2); } onPageShow(): void { diff --git a/app/src/main/ets/pages/mvvm/HomePage.ets b/app/src/main/ets/pages/mvvm/HomePage.ets index 8a0c805..8d860bd 100644 --- a/app/src/main/ets/pages/mvvm/HomePage.ets +++ b/app/src/main/ets/pages/mvvm/HomePage.ets @@ -35,7 +35,8 @@ export struct HomePage { TabContent() { TabView2(); }.tabBar("View2") - }.onChange((index) => { + }.barOverlap(true) + .onChange((index) => { if (index == 0) { this.tv1ViewModel.onViewShow(); this.tv2ViewModel.onViewHide(); diff --git a/native_lib/Index.ets b/native_lib/Index.ets index e69de29..b001e25 100644 --- a/native_lib/Index.ets +++ b/native_lib/Index.ets @@ -0,0 +1 @@ +export {} from './src/main/cpp/types/libnatvie_lib/index' \ No newline at end of file diff --git a/native_lib/oh-package.json5 b/native_lib/oh-package.json5 index 7cd5a2f..37b71eb 100644 --- a/native_lib/oh-package.json5 +++ b/native_lib/oh-package.json5 @@ -1,5 +1,5 @@ { - "name": "native_lib", + "name": "@devwiki/native_lib", "version": "1.0.0", "description": "Please describe the basic information.", "main": "Index.ets", @@ -7,6 +7,6 @@ "license": "Apache-2.0", "packageType": "InterfaceHar", "dependencies": { - "libnatvie_lib.so": "file:./src/main/cpp/types/libnatvie_lib" + "native_lib.so": "file:./src/main/cpp/types/libnatvie_lib" } } \ No newline at end of file diff --git a/native_lib/src/main/cpp/CMakeLists.txt b/native_lib/src/main/cpp/CMakeLists.txt index 764ee4a..2aa36ba 100644 --- a/native_lib/src/main/cpp/CMakeLists.txt +++ b/native_lib/src/main/cpp/CMakeLists.txt @@ -13,4 +13,4 @@ include_directories(${NATIVERENDER_ROOT_PATH} add_library(native_lib SHARED napi_init.cpp) -target_link_libraries(native_lib PUBLIC ../../../../cppLib/dist/lib/arm64-v8a) \ No newline at end of file +target_link_libraries(native_lib PUBLIC ../../../../cppLib/dist/lib/arm64-v8a/libcalculate.so) \ No newline at end of file diff --git a/native_lib/src/main/cpp/Calculator.cpp b/native_lib/src/main/cpp/CalculateAdaptor.cpp similarity index 61% rename from native_lib/src/main/cpp/Calculator.cpp rename to native_lib/src/main/cpp/CalculateAdaptor.cpp index a0c5484..318cdf3 100644 --- a/native_lib/src/main/cpp/Calculator.cpp +++ b/native_lib/src/main/cpp/CalculateAdaptor.cpp @@ -4,40 +4,36 @@ // Node APIs are not fully supported. To solve the compilation error of the interface cannot be found, // please include "napi/native_api.h". -#include "Calculator.h" -#include "Calculate.h" +#include "CalculateAdaptor.h" +#include "library.h" -Calculator::Calculator() { +CalculateAdaptor::CalculateAdaptor() { _calculate = &Calculate::getInstance(); } -Calculator::~Calculator() { +CalculateAdaptor::CalculateAdaptor(napi_env env, napi_value thisVar) { + _calculate = &Calculate::getInstance(); +} + +CalculateAdaptor::~CalculateAdaptor() { } -Calculator *util_get_napi_info(napi_env env, napi_callback_info cbinfo, size_t argc, napi_value *argv) +CalculateAdaptor *util_get_napi_info(napi_env env, napi_callback_info cbinfo, size_t argc, napi_value *argv) { napi_value thisVar = nullptr; void *data = nullptr; napi_get_cb_info(env, cbinfo, &argc, argv, &thisVar, &data); - Calculator *calculator = nullptr; + CalculateAdaptor *calculator = nullptr; napi_unwrap(env, thisVar, (void **)&calculator); return calculator; } -Calculate *util_get_napi_calculate(napi_env env, napi_callback_info cbinfo, size_t argc, napi_value *argv) -{ - Calculator *calculator = util_get_napi_info(env, cbinfo, argc, argv); - if (calculator) { - return calculator->_calculate; - } - return nullptr; -} napi_value calculate_add(napi_env env, napi_callback_info info) { size_t argc = 2; napi_value argv[2] = {0}; - Calculator *calculator = util_get_napi_info(env, info, argc, argv); + CalculateAdaptor *calculator = util_get_napi_info(env, info, argc, argv); int32_t result = 0; napi_status a = napi_ok; @@ -51,10 +47,10 @@ napi_value calculate_add(napi_env env, napi_callback_info info) { return value; } -CalculateInfo calculate_getInfo(napi_env env, napi_callback_info info) { +napi_value calculate_getInfo(napi_env env, napi_callback_info info) { size_t argc = 0; napi_value argv[1] = {0}; - Calculator *calculator = util_get_napi_info(env, info, argc, argv); + CalculateAdaptor *calculator = util_get_napi_info(env, info, argc, argv); CalculateInfo info2; info2.name = calculator->_calculate->getInfo().name; @@ -62,4 +58,6 @@ CalculateInfo calculate_getInfo(napi_env env, napi_callback_info info) { info2.versionName = calculator->_calculate->getInfo().versionName; napi_value value; + + return value; } diff --git a/native_lib/src/main/cpp/CalculateAdaptor.h b/native_lib/src/main/cpp/CalculateAdaptor.h new file mode 100644 index 0000000..c631727 --- /dev/null +++ b/native_lib/src/main/cpp/CalculateAdaptor.h @@ -0,0 +1,27 @@ +// +// Created on 2024/4/22. +// +// Node APIs are not fully supported. To solve the compilation error of the interface cannot be found, +// please include "napi/native_api.h". + +#ifndef HM4DEMO_CALCULATOR_H +#define HM4DEMO_CALCULATOR_H + +#include "library.h" +#include "js_native_api.h" + +class CalculateAdaptor { +public: + CalculateAdaptor(); + CalculateAdaptor(napi_env env, napi_value thisVar); + ~CalculateAdaptor(); + Calculate *_calculate; +}; + +CalculateAdaptor *util_get_napi_info(napi_env env, napi_callback_info cbinfo, size_t argc, napi_value *argv); + +napi_value calculate_add(napi_env env, napi_callback_info info); +napi_value calculate_getInfo(napi_env env, napi_callback_info info); + + +#endif //HM4DEMO_CALCULATOR_H diff --git a/native_lib/src/main/cpp/Calculator.h b/native_lib/src/main/cpp/Calculator.h deleted file mode 100644 index ecbf426..0000000 --- a/native_lib/src/main/cpp/Calculator.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// Created on 2024/4/22. -// -// Node APIs are not fully supported. To solve the compilation error of the interface cannot be found, -// please include "napi/native_api.h". - -#ifndef HM4DEMO_CALCULATOR_H -#define HM4DEMO_CALCULATOR_H - -#include "Calculate.h" -#include "js_native_api.h" - -class Calculator { -public: - Calculator(); - ~Calculator(); - Calculate *_calculate; -}; - -Calculator *util_get_napi_info(napi_env env, napi_callback_info cbinfo, size_t argc, napi_value *argv); -Calculate *util_get_napi_calculate(napi_env env, napi_callback_info cbinfo, size_t argc, napi_value *argv); - -int add(int a, int b); -CalculateInfo getInfo(); - - -#endif //HM4DEMO_CALCULATOR_H diff --git a/native_lib/src/main/cpp/Calculate.h b/native_lib/src/main/cpp/library.h similarity index 100% rename from native_lib/src/main/cpp/Calculate.h rename to native_lib/src/main/cpp/library.h diff --git a/native_lib/src/main/cpp/napi_init.cpp b/native_lib/src/main/cpp/napi_init.cpp index 5adab4d..517aeff 100644 --- a/native_lib/src/main/cpp/napi_init.cpp +++ b/native_lib/src/main/cpp/napi_init.cpp @@ -1,40 +1,38 @@ #include "napi/native_api.h" -#include "Calculator.h" +#include "CalculateAdaptor.h" +#include "js_native_api.h" -static napi_value Add(napi_env env, napi_callback_info info) -{ - size_t requireArgc = 2; - size_t argc = 2; - napi_value args[2] = {nullptr}; - - napi_get_cb_info(env, info, &argc, args , nullptr, nullptr); - - napi_valuetype valuetype0; - napi_typeof(env, args[0], &valuetype0); - - napi_valuetype valuetype1; - napi_typeof(env, args[1], &valuetype1); - - double value0; - napi_get_value_double(env, args[0], &value0); - - double value1; - napi_get_value_double(env, args[1], &value1); - - napi_value sum; - napi_create_double(env, value0 + value1, &sum); - - return sum; +napi_value JS_Constructor(napi_env env, napi_callback_info info) { + napi_value thisVar = nullptr; + void *data = nullptr; + napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, &data); + CalculateAdaptor *adaptor = new CalculateAdaptor(env, thisVar); + napi_wrap( + env, thisVar, adaptor, + [](napi_env env, void *data, void *hint) { + CalculateAdaptor *ada = (CalculateAdaptor *)data; + delete ada; + }, + nullptr, nullptr); + return thisVar; } EXTERN_C_START + + napi_value Init(napi_env env, napi_value exports) { - napi_property_descriptor desc[] = {{"add", nullptr, Calculator::add, nullptr, nullptr, nullptr, napi_default, nullptr}, - {"getInfo", nullptr, GetInfo, nullptr, nullptr, nullptr, napi_default, nullptr}, - {"getInstance", nullptr, GetInstance, nullptr, nullptr, nullptr, napi_default, nullptr}}; + const char className[] = "CalculateAdaptor"; + napi_property_descriptor desc[] = {{"add", nullptr, calculate_add, nullptr, nullptr, nullptr, napi_default, nullptr}, + {"getInfo", nullptr, calculate_getInfo, nullptr, nullptr, nullptr, napi_default, nullptr}}; napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); + + napi_value result = nullptr; + napi_define_class(env, className, sizeof(className), JS_Constructor, nullptr, + sizeof(desc) / sizeof(desc[0]), desc, &result); + + napi_set_named_property(env, exports, "CalculateAdaptor", result); return exports; } EXTERN_C_END diff --git a/native_lib/src/main/cpp/types/libnatvie_lib/index.d.ts b/native_lib/src/main/cpp/types/libnatvie_lib/index.d.ts index 97e3bea..9d65f68 100644 --- a/native_lib/src/main/cpp/types/libnatvie_lib/index.d.ts +++ b/native_lib/src/main/cpp/types/libnatvie_lib/index.d.ts @@ -1,5 +1,4 @@ -export class Calculate { +export class CalculateAdapter { add(a: number, b: number): number; - static getInstance(): Calculate; getInfo(): Object; } \ No newline at end of file diff --git a/native_lib/src/main/cpp/types/libnatvie_lib/oh-package.json5 b/native_lib/src/main/cpp/types/libnatvie_lib/oh-package.json5 index d954df2..7e8247b 100644 --- a/native_lib/src/main/cpp/types/libnatvie_lib/oh-package.json5 +++ b/native_lib/src/main/cpp/types/libnatvie_lib/oh-package.json5 @@ -1,5 +1,5 @@ { - "name": "native_lib_lib.so", + "name": "native_lib.so", "types": "./index.d.ts", "version": "", "description": "Please describe the basic information." diff --git a/native_lib/src/main/ets/CalculateDefine.ets b/native_lib/src/main/ets/CalculateDefine.ets new file mode 100644 index 0000000..252979e --- /dev/null +++ b/native_lib/src/main/ets/CalculateDefine.ets @@ -0,0 +1,6 @@ + +export interface CalculateInfo { + name: string; + versionName: string; + versionCode: number; +} \ No newline at end of file diff --git a/native_lib/src/main/ets/Calculator.ets b/native_lib/src/main/ets/Calculator.ets new file mode 100644 index 0000000..b9970f5 --- /dev/null +++ b/native_lib/src/main/ets/Calculator.ets @@ -0,0 +1,20 @@ +import { CalculateAdapter } from 'native_lib.so' +import { CalculateInfo } from './CalculateDefine' + +export class Calculator { + + private adaptor!:CalculateAdapter; + + constructor() { + this.adaptor = new CalculateAdapter(); + } + + add(a:number, b: number): number { + return this.adaptor.add(a, b); + } + + getInfo(): CalculateInfo { + return this.adaptor.getInfo() as CalculateInfo; + } + +} \ No newline at end of file diff --git a/native_lib/src/main/ets/utils/Calc.ets b/native_lib/src/main/ets/utils/Calc.ets deleted file mode 100644 index f961c14..0000000 --- a/native_lib/src/main/ets/utils/Calc.ets +++ /dev/null @@ -1,8 +0,0 @@ -import { Calculate } from 'libnatvie_lib.so'; - -export class Calculator { - - static add(a: number, b:number) : number { - return Calculate.add(a, b); - } -} \ No newline at end of file