This commit is contained in:
DevWiki 2024-06-25 20:46:40 +08:00
parent d303942188
commit 472fc2e574
13 changed files with 141 additions and 37 deletions

View File

@ -7,6 +7,7 @@ import { Log } from '@devwiki/base';
import { BaseLocalStorage, ScreenUtil } from '@devwiki/base'; import { BaseLocalStorage, ScreenUtil } from '@devwiki/base';
import { HomeItem, HomeItemGroup } from '../model/Home'; import { HomeItem, HomeItemGroup } from '../model/Home';
import { Context } from '@kit.AbilityKit'; import { Context } from '@kit.AbilityKit';
import { Calculator } from '@devwiki/hmcalculate';
import('./animation/LoadingPage') import('./animation/LoadingPage')
@ -68,6 +69,10 @@ struct Index {
aboutToAppear(): void { aboutToAppear(): void {
ScreenUtil.getInstance().initScreenSize(); ScreenUtil.getInstance().initScreenSize();
BaseLocalStorage.getInstance().init(getContext(this)); BaseLocalStorage.getInstance().init(getContext(this));
let cal:Calculator = new Calculator();
let sum = cal.add(1,2);
let info = cal.getInfo();
} }
onPageShow(): void { onPageShow(): void {

View File

@ -2,14 +2,11 @@
chcp 65001 > nul chcp 65001 > nul
set "native_path=C:\Program Files\Huawei\DevEco Studio5\sdk\HarmonyOS-NEXT-DB1\openharmony\native\" set "native_path=C:\Program Files\Huawei\DevEco Studio5\sdk\HarmonyOS-NEXT-DB1\openharmony\native\"
IF NOT "%~1" == "" ( ::IF NOT "%~1" == "" (
set "native_path=%~1" :: set "native_path=%~1"
) ::)
echo %native_path% echo %native_path%
IF NOT "%~2" == "" (
set "arch=%~2"
)
set "toolchain=%native_path%build\cmake\ohos.toolchain.cmake" set "toolchain=%native_path%build\cmake\ohos.toolchain.cmake"
echo %toolchain% echo %toolchain%
@ -22,6 +19,9 @@ echo %ninja_path%
set "make_path=C:\MinGW\msys\1.0\bin\make.exe" set "make_path=C:\MinGW\msys\1.0\bin\make.exe"
echo %make_path% echo %make_path%
set "arch=arm64-v8a" set "arch=arm64-v8a"
IF NOT "%~1" == "" (
set "arch=%~1"
)
echo %arch% echo %arch%
if exist build ( if exist build (
@ -40,11 +40,10 @@ if exist dist (
cd build cd build
:: 使用 make 构建 :: 使用 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% :: %make_path%
:: 使用 ninja 构建 :: 使用 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%" "%ninja_path%"
cd ../ cd ../

View File

@ -3,5 +3,3 @@ chcp 65001 > nul
build.bat build.bat
build.bat x86_64 build.bat x86_64
build.bat

Binary file not shown.

View File

@ -1 +1,2 @@
export { CalculateAdapter } from './src/main/cpp/types/libhmcalculate/index' export { Calculator } from './src/main/ets/Calculator'
export { CalculateInfo } from './src/main/ets/CalculateInfo'

View File

@ -3,6 +3,7 @@ cmake_minimum_required(VERSION 3.4.1)
project(hmcalculate) project(hmcalculate)
set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR}) set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
add_definitions(-DOHOS_PLATFORM)
if(DEFINED PACKAGE_FIND_FILE) if(DEFINED PACKAGE_FIND_FILE)
include(${PACKAGE_FIND_FILE}) include(${PACKAGE_FIND_FILE})
@ -13,16 +14,61 @@ include_directories(${NATIVERENDER_ROOT_PATH}
add_library(hmcalculate SHARED add_library(hmcalculate SHARED
napi_init.cpp napi_init.cpp
CalculateInfo.h
CalculateAdaptor.cpp) CalculateAdaptor.cpp)
# find_library(
IF(OHOS_ARCH STREQUAL "arm64-v8a") # Sets the name of the path variable.
set(LIB_DIR ${NATIVERENDER_ROOT_PATH}/../../../../cppLib/dist/lib/arm64-v8a) EGL-lib
ELSEIF(OHOS_ARCH STREQUAL "x86_64") # Specifies the name of the NDK library that
set(LIB_DIR ${NATIVERENDER_ROOT_PATH}/../../../../cppLib/dist/lib/x86_64) # you want CMake to locate.
ELSE() EGL
MESSAGE(FATAL_ERROR "Unsupported architecture: ${OHOS_ARCH}") )
ENDIF()
target_link_libraries(hmcalculate PUBLIC ${LIB_DIR}/libcalculate.so) 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)

View File

@ -1,7 +1,6 @@
#ifndef CPPLIB_LIBRARY_H #ifndef CPPLIB_LIBRARY_H
#define CPPLIB_LIBRARY_H #define CPPLIB_LIBRARY_H
#include <string>
#include "CalculateInfo.h" #include "CalculateInfo.h"
class Calculate { class Calculate {

View File

@ -5,15 +5,15 @@
// please include "napi/native_api.h". // please include "napi/native_api.h".
#include "CalculateAdaptor.h" #include "CalculateAdaptor.h"
#include "js_native_api.h"
#include "Calculate.h" #include "Calculate.h"
#include "CalculateInfo.h" #include <string>
#include <stdint.h>
CalculateAdaptor::CalculateAdaptor() { CalculateAdaptor::CalculateAdaptor() {
_calculate = &Calculate::getInstance();
} }
CalculateAdaptor::CalculateAdaptor(napi_env env, napi_value thisVar) { CalculateAdaptor::CalculateAdaptor(napi_env env, napi_value thisVar) {
_calculate = &Calculate::getInstance();
} }
CalculateAdaptor::~CalculateAdaptor() { CalculateAdaptor::~CalculateAdaptor() {
@ -30,7 +30,6 @@ CalculateAdaptor *util_get_napi_info(napi_env env, napi_callback_info cbinfo, si
return calculator; return calculator;
} }
napi_value calculate_add(napi_env env, napi_callback_info info) { napi_value calculate_add(napi_env env, napi_callback_info info) {
size_t argc = 2; size_t argc = 2;
napi_value argv[2] = {0}; 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.versionCode = calculator->_calculate->getInfo().versionCode;
info2.versionName = calculator->_calculate->getInfo().versionName; 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; 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;
}

View File

@ -7,9 +7,9 @@
#ifndef HM4DEMO_CALCULATOR_H #ifndef HM4DEMO_CALCULATOR_H
#define HM4DEMO_CALCULATOR_H #define HM4DEMO_CALCULATOR_H
#include "CalculateInfo.h"
#include "Calculate.h" #include "Calculate.h"
#include "js_native_api.h" #include "js_native_api.h"
#include <stdint.h>
class CalculateAdaptor { class CalculateAdaptor {
public: 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_add(napi_env env, napi_callback_info info);
napi_value calculate_getInfo(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 #endif //HM4DEMO_CALCULATOR_H

View File

@ -1,6 +1,6 @@
#include "napi/native_api.h" #include "napi/native_api.h"
#include "CalculateAdaptor.h"
#include "js_native_api.h" #include "js_native_api.h"
#include "CalculateAdaptor.h"
napi_value JS_Constructor(napi_env env, napi_callback_info info) { napi_value JS_Constructor(napi_env env, napi_callback_info info) {
napi_value thisVar = nullptr; napi_value thisVar = nullptr;
@ -38,12 +38,12 @@ static napi_module demoModule = {
.nm_flags = 0, .nm_flags = 0,
.nm_filename = nullptr, .nm_filename = nullptr,
.nm_register_func = Init, .nm_register_func = Init,
.nm_modname = "native_lib", .nm_modname = "hmcalculate",
.nm_priv = ((void*)0), .nm_priv = ((void*)0),
.reserved = { 0 }, .reserved = { 0 },
}; };
extern "C" __attribute__((constructor)) void RegisterNatvie_libModule(void) extern "C" __attribute__((constructor)) void RegisterHmcalculateModule(void)
{ {
napi_module_register(&demoModule); napi_module_register(&demoModule);
} }

View File

@ -1,4 +1,4 @@
export class CalculateAdapter { export class CalculateAdaptor {
add(a: number, b: number): number; add(a: number, b: number): number;
getInfo(): Object; getInfo(): Object;
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "libhmcalculate.so", "name": "libhmcalculate.so",
"types": "./index.d.ts", "types": "./index.d.ts",
"version": "", "version": "1.0.0",
"description": "Please describe the basic information." "description": "Please describe the basic information."
} }

View File

@ -1,12 +1,12 @@
import { CalculateAdapter } from 'native_lib.so' import { CalculateAdaptor } from 'libhmcalculate.so'
import { CalculateInfo } from './CalculateInfo' import { CalculateInfo } from './CalculateInfo'
export class Calculator { export class Calculator {
private adaptor!:CalculateAdapter; private adaptor!:CalculateAdaptor;
constructor() { constructor() {
this.adaptor = new CalculateAdapter(); this.adaptor = new CalculateAdaptor();
} }
add(a:number, b: number): number { add(a:number, b: number): number {