diff --git a/app/src/main/ets/pages/Index.ets b/app/src/main/ets/pages/Index.ets index abca558..efaf358 100644 --- a/app/src/main/ets/pages/Index.ets +++ b/app/src/main/ets/pages/Index.ets @@ -7,6 +7,7 @@ import { Log } from '@devwiki/base'; import { BaseLocalStorage, ScreenUtil } from '@devwiki/base'; import { HomeItem, HomeItemGroup } from '../model/Home'; import { Context } from '@kit.AbilityKit'; +import { Calculator } from '@devwiki/hmcalculate'; import('./animation/LoadingPage') @@ -68,6 +69,10 @@ struct Index { aboutToAppear(): void { ScreenUtil.getInstance().initScreenSize(); BaseLocalStorage.getInstance().init(getContext(this)); + + let cal:Calculator = new Calculator(); + let sum = cal.add(1,2); + let info = cal.getInfo(); } onPageShow(): void { diff --git a/cppLib/build.bat b/cppLib/build.bat index 8201f8f..5ab660e 100644 --- a/cppLib/build.bat +++ b/cppLib/build.bat @@ -2,14 +2,11 @@ chcp 65001 > nul set "native_path=C:\Program Files\Huawei\DevEco Studio5\sdk\HarmonyOS-NEXT-DB1\openharmony\native\" -IF NOT "%~1" == "" ( - set "native_path=%~1" -) +::IF NOT "%~1" == "" ( +:: set "native_path=%~1" +::) echo %native_path% -IF NOT "%~2" == "" ( - set "arch=%~2" -) set "toolchain=%native_path%build\cmake\ohos.toolchain.cmake" echo %toolchain% @@ -22,6 +19,9 @@ echo %ninja_path% set "make_path=C:\MinGW\msys\1.0\bin\make.exe" echo %make_path% set "arch=arm64-v8a" +IF NOT "%~1" == "" ( + set "arch=%~1" +) echo %arch% if exist build ( @@ -40,11 +40,10 @@ if exist dist ( cd build :: 使用 make 构建 -:: "%cmake_path%" -G"Unix Makefiles" -DCMAKE_MAKE_PROGRAM="%make_path%" -DOHOS_STL=c++_static -DOHOS_ARCH="%arch%" -DOHOS_PLATFORM=OHOS -DCMAKE_TOOLCHAIN_FILE="%toolchain%" .. +:: "%cmake_path%" -G "Unix Makefiles" -DCMAKE_MAKE_PROGRAM="%make_path%" -DOHOS_STL=c++_static -DOHOS_ARCH="%arch%" -DOHOS_PLATFORM=OHOS -DCMAKE_TOOLCHAIN_FILE="%toolchain%" .. :: %make_path% :: 使用 ninja 构建 -"%cmake_path%" -GNinja -DCMAKE_MAKE_PROGRAM="%ninja_path%" -DOHOS_STL=c++_static -DOHOS_ARCH="%arch%" -DOHOS_PLATFORM=OHOS -DCMAKE_TOOLCHAIN_FILE="%toolchain%" .. +"%cmake_path%" -G "Ninja" -D CMAKE_MAKE_PROGRAM="%ninja_path%" -D OHOS_STL=c++_static -D OHOS_ARCH="%arch%" -D OHOS_PLATFORM=OHOS -D CMAKE_TOOLCHAIN_FILE="%toolchain%" .. "%ninja_path%" cd ../ - diff --git a/cppLib/build_all.bat b/cppLib/build_all.bat index 39ebe7a..8c8f94e 100644 --- a/cppLib/build_all.bat +++ b/cppLib/build_all.bat @@ -3,5 +3,3 @@ chcp 65001 > nul build.bat build.bat x86_64 - -build.bat \ No newline at end of file diff --git a/cppLib/dist/lib/x86_64/libcalculate.so b/cppLib/dist/lib/x86_64/libcalculate.so index a05b9bd..feda59e 100644 Binary files a/cppLib/dist/lib/x86_64/libcalculate.so and b/cppLib/dist/lib/x86_64/libcalculate.so differ diff --git a/hmcalculate/Index.ets b/hmcalculate/Index.ets index bfb9054..3b29c7d 100644 --- a/hmcalculate/Index.ets +++ b/hmcalculate/Index.ets @@ -1 +1,2 @@ -export { CalculateAdapter } from './src/main/cpp/types/libhmcalculate/index' \ No newline at end of file +export { Calculator } from './src/main/ets/Calculator' +export { CalculateInfo } from './src/main/ets/CalculateInfo' \ No newline at end of file diff --git a/hmcalculate/src/main/cpp/CMakeLists.txt b/hmcalculate/src/main/cpp/CMakeLists.txt index 08c5635..9a84705 100644 --- a/hmcalculate/src/main/cpp/CMakeLists.txt +++ b/hmcalculate/src/main/cpp/CMakeLists.txt @@ -3,6 +3,7 @@ cmake_minimum_required(VERSION 3.4.1) project(hmcalculate) set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR}) +add_definitions(-DOHOS_PLATFORM) if(DEFINED PACKAGE_FIND_FILE) include(${PACKAGE_FIND_FILE}) @@ -13,16 +14,61 @@ include_directories(${NATIVERENDER_ROOT_PATH} add_library(hmcalculate SHARED napi_init.cpp - CalculateInfo.h CalculateAdaptor.cpp) -# 根据不同的架构选择不同的库文件路径 -IF(OHOS_ARCH STREQUAL "arm64-v8a") - set(LIB_DIR ${NATIVERENDER_ROOT_PATH}/../../../../cppLib/dist/lib/arm64-v8a) -ELSEIF(OHOS_ARCH STREQUAL "x86_64") - set(LIB_DIR ${NATIVERENDER_ROOT_PATH}/../../../../cppLib/dist/lib/x86_64) -ELSE() - MESSAGE(FATAL_ERROR "Unsupported architecture: ${OHOS_ARCH}") -ENDIF() +find_library( + # Sets the name of the path variable. + EGL-lib + # Specifies the name of the NDK library that + # you want CMake to locate. + EGL +) -target_link_libraries(hmcalculate PUBLIC ${LIB_DIR}/libcalculate.so) \ No newline at end of file +find_library( + # Sets the name of the path variable. + GLES-lib + # Specifies the name of the NDK library that + # you want CMake to locate. + GLESv3 +) + +find_library( + # Sets the name of the path variable. + hilog-lib + # Specifies the name of the NDK library that + # you want CMake to locate. + hilog_ndk.z +) + +find_library( + # Sets the name of the path variable. + libnapi-lib + # Specifies the name of the NDK library that + # you want CMake to locate. + ace_napi.z +) + +find_library( + # Sets the name of the path variable. + libace-lib + # Specifies the name of the NDK library that + # you want CMake to locate. + ace_ndk.z +) + +find_library( + # Sets the name of the path variable. + libuv-lib + # Specifies the name of the NDK library that + # you want CMake to locate. + uv +) + +target_link_libraries(hmcalculate PUBLIC + ${EGL-lib} + ${GLES-lib} + ${hilog-lib} + ${libnapi-lib} + ${libace-lib} + ${libuv-lib} + ${NATIVERENDER_ROOT_PATH}/../../../../cppLib/dist/lib/${OHOS_ARCH}/libcalculate.so) \ No newline at end of file diff --git a/hmcalculate/src/main/cpp/Calculate.h b/hmcalculate/src/main/cpp/Calculate.h index 502230d..2246a7d 100644 --- a/hmcalculate/src/main/cpp/Calculate.h +++ b/hmcalculate/src/main/cpp/Calculate.h @@ -1,7 +1,6 @@ #ifndef CPPLIB_LIBRARY_H #define CPPLIB_LIBRARY_H -#include #include "CalculateInfo.h" class Calculate { diff --git a/hmcalculate/src/main/cpp/CalculateAdaptor.cpp b/hmcalculate/src/main/cpp/CalculateAdaptor.cpp index efdacf5..9a43f9c 100644 --- a/hmcalculate/src/main/cpp/CalculateAdaptor.cpp +++ b/hmcalculate/src/main/cpp/CalculateAdaptor.cpp @@ -5,15 +5,15 @@ // please include "napi/native_api.h". #include "CalculateAdaptor.h" +#include "js_native_api.h" #include "Calculate.h" -#include "CalculateInfo.h" +#include +#include CalculateAdaptor::CalculateAdaptor() { - _calculate = &Calculate::getInstance(); } CalculateAdaptor::CalculateAdaptor(napi_env env, napi_value thisVar) { - _calculate = &Calculate::getInstance(); } CalculateAdaptor::~CalculateAdaptor() { @@ -30,7 +30,6 @@ CalculateAdaptor *util_get_napi_info(napi_env env, napi_callback_info cbinfo, si return calculator; } - napi_value calculate_add(napi_env env, napi_callback_info info) { size_t argc = 2; napi_value argv[2] = {0}; @@ -58,7 +57,57 @@ napi_value calculate_getInfo(napi_env env, napi_callback_info info) { info2.versionCode = calculator->_calculate->getInfo().versionCode; info2.versionName = calculator->_calculate->getInfo().versionName; - napi_value value; + napi_value js_frame; + napi_create_object(env, &js_frame); + util_set_object_string_property_value(env, js_frame, "name", info2.name); + util_set_object_string_property_value(env, js_frame, "versionName", &info2.versionName); + util_set_object_int32_property_value(env, js_frame, "versionCode", info2.versionCode); + return js_frame; +} + +napi_value util_create_int32_value(napi_env env, int32_t arg) +{ + napi_value value; + napi_status status = napi_create_int32(env, arg, &value); return value; } + +napi_status util_set_object_int32_property_value(napi_env env, napi_value object, const char *name, int32_t value) +{ + napi_value js_value = util_create_int32_value(env, value); + return napi_set_named_property(env, object, name, js_value); +} + +napi_value util_create_string_value(napi_env env, const char *arg) +{ + napi_value value; + napi_status status = napi_create_string_utf8(env, arg, NAPI_AUTO_LENGTH, &value); + return value; +} + +napi_status util_set_object_string_property_value(napi_env env, napi_value object, const char *name, const char *value) +{ + napi_value js_value = util_create_string_value(env, value); + return napi_set_named_property(env, object, name, js_value); +} + +char *util_get_object_string_property_value(napi_env env, napi_value arg, const char *name) +{ + napi_status status = napi_ok; + napi_value js_result; + status = napi_get_named_property(env, arg, name, &js_result); + if (napi_ok == status) { + return util_get_string_value(env, js_result); + } + return ""; +} + +char *util_get_string_value(napi_env env, napi_value arg) +{ + size_t len = 0; + napi_get_value_string_utf8(env, arg, nullptr, 0, &len); // 获取字符串长度到len + char *buf = new char[len + 1]; // 分配合适大小的char数组 + napi_get_value_string_utf8(env, arg, buf, len + 1, &len); // 获取字符串 + return buf; +} diff --git a/hmcalculate/src/main/cpp/CalculateAdaptor.h b/hmcalculate/src/main/cpp/CalculateAdaptor.h index 3b90f01..51a1086 100644 --- a/hmcalculate/src/main/cpp/CalculateAdaptor.h +++ b/hmcalculate/src/main/cpp/CalculateAdaptor.h @@ -7,9 +7,9 @@ #ifndef HM4DEMO_CALCULATOR_H #define HM4DEMO_CALCULATOR_H -#include "CalculateInfo.h" #include "Calculate.h" #include "js_native_api.h" +#include class CalculateAdaptor { public: @@ -24,5 +24,12 @@ CalculateAdaptor *util_get_napi_info(napi_env env, napi_callback_info cbinfo, si napi_value calculate_add(napi_env env, napi_callback_info info); napi_value calculate_getInfo(napi_env env, napi_callback_info info); +napi_value util_create_int32_value(napi_env env, int32_t arg); +napi_status util_set_object_int32_property_value(napi_env env, napi_value object, const char *name, int32_t value); + +napi_value util_create_string_value(napi_env env, const char *arg); +napi_status util_set_object_string_property_value(napi_env env, napi_value object, const char *name, const char *value); +char *util_get_object_string_property_value(napi_env env, napi_value arg, const char *name); +char *util_get_string_value(napi_env env, napi_value arg); #endif //HM4DEMO_CALCULATOR_H diff --git a/hmcalculate/src/main/cpp/napi_init.cpp b/hmcalculate/src/main/cpp/napi_init.cpp index 12844ff..8da0165 100644 --- a/hmcalculate/src/main/cpp/napi_init.cpp +++ b/hmcalculate/src/main/cpp/napi_init.cpp @@ -1,6 +1,6 @@ #include "napi/native_api.h" -#include "CalculateAdaptor.h" #include "js_native_api.h" +#include "CalculateAdaptor.h" napi_value JS_Constructor(napi_env env, napi_callback_info info) { napi_value thisVar = nullptr; @@ -38,12 +38,12 @@ static napi_module demoModule = { .nm_flags = 0, .nm_filename = nullptr, .nm_register_func = Init, - .nm_modname = "native_lib", + .nm_modname = "hmcalculate", .nm_priv = ((void*)0), .reserved = { 0 }, }; -extern "C" __attribute__((constructor)) void RegisterNatvie_libModule(void) +extern "C" __attribute__((constructor)) void RegisterHmcalculateModule(void) { napi_module_register(&demoModule); } diff --git a/hmcalculate/src/main/cpp/types/libhmcalculate/index.d.ts b/hmcalculate/src/main/cpp/types/libhmcalculate/index.d.ts index 9d65f68..d3c2257 100644 --- a/hmcalculate/src/main/cpp/types/libhmcalculate/index.d.ts +++ b/hmcalculate/src/main/cpp/types/libhmcalculate/index.d.ts @@ -1,4 +1,4 @@ -export class CalculateAdapter { +export class CalculateAdaptor { add(a: number, b: number): number; getInfo(): Object; } \ No newline at end of file diff --git a/hmcalculate/src/main/cpp/types/libhmcalculate/oh-package.json5 b/hmcalculate/src/main/cpp/types/libhmcalculate/oh-package.json5 index f9d2701..d597d95 100644 --- a/hmcalculate/src/main/cpp/types/libhmcalculate/oh-package.json5 +++ b/hmcalculate/src/main/cpp/types/libhmcalculate/oh-package.json5 @@ -1,6 +1,6 @@ { "name": "libhmcalculate.so", "types": "./index.d.ts", - "version": "", + "version": "1.0.0", "description": "Please describe the basic information." } \ No newline at end of file diff --git a/hmcalculate/src/main/ets/Calculator.ets b/hmcalculate/src/main/ets/Calculator.ets index 0685efa..48e3a96 100644 --- a/hmcalculate/src/main/ets/Calculator.ets +++ b/hmcalculate/src/main/ets/Calculator.ets @@ -1,12 +1,12 @@ -import { CalculateAdapter } from 'native_lib.so' +import { CalculateAdaptor } from 'libhmcalculate.so' import { CalculateInfo } from './CalculateInfo' export class Calculator { - private adaptor!:CalculateAdapter; + private adaptor!:CalculateAdaptor; constructor() { - this.adaptor = new CalculateAdapter(); + this.adaptor = new CalculateAdaptor(); } add(a:number, b: number): number {