diff --git a/frameworks/js/ani/BUILD.gn b/frameworks/js/ani/BUILD.gn index c56092f3b88265d944156277f43425d535aa2682..4972cd61810123280375f6234c13216a1a10fe85 100644 --- a/frameworks/js/ani/BUILD.gn +++ b/frameworks/js/ani/BUILD.gn @@ -43,6 +43,7 @@ ohos_shared_library("sensor_ani") { "hilog:libhilog", "ipc:ipc_single", "runtime_core:ani", + "runtime_core:ani_helpers", "safwk:system_ability_fwk", "samgr:samgr_proxy", ] diff --git a/frameworks/js/ani/include/ani_utils.h b/frameworks/js/ani/include/ani_utils.h index 8f2605f0e3f3ad9c2e8399e9d0f56efe06bbe684..ba5b6135ac85c309dde2fb0f4aadad57b7b6de27 100644 --- a/frameworks/js/ani/include/ani_utils.h +++ b/frameworks/js/ani/include/ani_utils.h @@ -17,6 +17,7 @@ #define ANI_UTILS_H #include +#include #include #include @@ -38,7 +39,11 @@ public: static ani_object Wrap([[maybe_unused]] ani_env *env, [[maybe_unused]] ani_class clazz, T* nativePtr) { ani_method ctor; - if (ANI_OK != env->Class_FindMethod(clazz, "", "J:V", &ctor)) { + auto methodCtor = arkts::ani_signature::Builder::BuildConstructorName(); + arkts::ani_signature::SignatureBuilder methodCtorSigBuilder; + methodCtorSigBuilder.AddLong(); + auto methodCtorSignature = methodCtorSigBuilder.BuildSignatureDescriptor(); + if (ANI_OK != env->Class_FindMethod(clazz, methodCtor.c_str(), methodCtorSignature.c_str(), &ctor)) { std::cerr << "Not found ''" << std::endl; ani_object nullobj = nullptr; return nullobj; @@ -105,6 +110,7 @@ public: bool IsInstanceOf(const std::string& cls_name) { ani_class cls; + // Pls replace manually env_->FindClass(cls_name.c_str(), &cls); ani_boolean ret; @@ -158,6 +164,7 @@ bool UnionAccessor::TryConvert(bool &value) } ani_boolean aniValue; + // Pls replace manually auto ret = env_->Object_CallMethodByName_Boolean(obj_, "unboxed", nullptr, &aniValue); if (ret != ANI_OK) { return false; @@ -174,6 +181,7 @@ bool UnionAccessor::TryConvert(int &value) } ani_int aniValue; + // Pls replace manually auto ret = env_->Object_CallMethodByName_Int(obj_, "unboxed", nullptr, &aniValue); if (ret != ANI_OK) { return false; @@ -190,6 +198,7 @@ bool UnionAccessor::TryConvert(double &value) } ani_double aniValue; + // Pls replace manually auto ret = env_->Object_CallMethodByName_Double(obj_, "unboxed", nullptr, &aniValue); if (ret != ANI_OK) { return false; @@ -224,6 +233,7 @@ bool UnionAccessor::TryConvertArray(std::vector &value) return false; } ani_boolean val; + // Pls replace manually if (ANI_OK != env_->Object_CallMethodByName_Boolean(static_cast(ref), "unboxed", nullptr, &val)) { std::cerr << "Object_CallMethodByName_Double unbox failed" << std::endl; return false; @@ -248,6 +258,7 @@ bool UnionAccessor::TryConvertArray(std::vector &value) return false; } ani_int intValue; + // Pls replace manually if (ANI_OK != env_->Object_CallMethodByName_Int(static_cast(ref), "unboxed", nullptr, &intValue)) { std::cerr << "Object_CallMethodByName_Double unbox failed" << std::endl; return false; @@ -272,6 +283,7 @@ bool UnionAccessor::TryConvertArray(std::vector &value) return false; } ani_double val; + // Pls replace manually if (ANI_OK != env_->Object_CallMethodByName_Double(static_cast(ref), "unboxed", nullptr, &val)) { std::cerr << "Object_CallMethodByName_Double unbox failed" << std::endl; return false; @@ -352,6 +364,7 @@ std::optional OptionalAccessor::Convert() } ani_double aniValue; + // Pls replace manually auto ret = env_->Object_CallMethodByName_Double(obj_, "doubleValue", nullptr, &aniValue); if (ret != ANI_OK) { return std::nullopt; diff --git a/frameworks/js/ani/src/sensor_ani.cpp b/frameworks/js/ani/src/sensor_ani.cpp index 5eec81d45e4cdaa1b3dc82b93f2feda50d6bb3b1..3136dab82a6fcc5ffe752f8d7f70860e44e0f50b 100644 --- a/frameworks/js/ani/src/sensor_ani.cpp +++ b/frameworks/js/ani/src/sensor_ani.cpp @@ -91,12 +91,17 @@ static ani_error CreateAniError(ani_env *env, std::string &&errMsg) { static const char *errorClsName = "Lescompat/Error;"; ani_class cls {}; + // Pls replace manually if (ANI_OK != env->FindClass(errorClsName, &cls)) { SEN_HILOGE("Not found namespace %{public}s.", errorClsName); return nullptr; } ani_method ctor; - if (ANI_OK != env->Class_FindMethod(cls, "", "Lstd/core/String;:V", &ctor)) { + auto methodCtor = arkts::ani_signature::Builder::BuildConstructorName(); + arkts::ani_signature::SignatureBuilder methodCtorSigBuilder; + methodCtorSigBuilder.AddClass({"std", "core", "String"}); + auto methodCtorSignature = methodCtorSigBuilder.BuildSignatureDescriptor(); + if (ANI_OK != env->Class_FindMethod(cls, methodCtor.c_str(), methodCtorSignature.c_str(), &ctor)) { SEN_HILOGE("Not found in %{public}s.", errorClsName); return nullptr; } @@ -157,6 +162,7 @@ static bool CheckSystemSubscribe(int32_t sensorTypeId) static ani_boolean IsInstanceOf(ani_env *env, const std::string &cls_name, ani_object obj) { ani_class cls; + // Pls replace manually if (ANI_OK != env->FindClass(cls_name.c_str(), &cls)) { SEN_HILOGE("FindClass failed"); return ANI_FALSE; @@ -209,6 +215,7 @@ bool ValidateAndInitialize(sptr asyncCallbackInfo, ani_object ani_namespace ns; static const char *namespaceName = "L@ohos/sensor/sensor;"; + // Pls replace manually if (ANI_OK != asyncCallbackInfo->env->FindNamespace(namespaceName, &ns)) { SEN_HILOGE("Not found '%{public}s'", namespaceName); return false; @@ -216,13 +223,15 @@ bool ValidateAndInitialize(sptr asyncCallbackInfo, ani_object ani_class cls; const char *className = g_sensorTypeToClassName[sensorTypeId].c_str(); + // Pls replace manually if (ANI_OK != asyncCallbackInfo->env->Namespace_FindClass(ns, className, &cls)) { SEN_HILOGE("FindClass %{public}s failed", className); return false; } ani_method ctor; - if (ANI_OK != asyncCallbackInfo->env->Class_FindMethod(cls, "", nullptr, &ctor)) { + auto methodCtor = arkts::ani_signature::Builder::BuildConstructorName(); + if (ANI_OK != asyncCallbackInfo->env->Class_FindMethod(cls, methodCtor.c_str(), nullptr, &ctor)) { SEN_HILOGE("Class_FindMethod 'constructor' failed"); return false; } @@ -238,6 +247,7 @@ ani_enum_item GetEnumItem(ani_env *env, int32_t accuracy) { ani_namespace ns; static const char *namespaceName = "L@ohos/sensor/sensor;"; + // Pls replace manually if (ANI_OK != env->FindNamespace(namespaceName, &ns)) { SEN_HILOGE("Not found '%{public}s'", namespaceName); return nullptr; @@ -245,6 +255,7 @@ ani_enum_item GetEnumItem(ani_env *env, int32_t accuracy) ani_enum aniEnum{}; const char *enumName = "LSensorAccuracy;"; + // Pls replace manually if (ANI_OK != env->Namespace_FindEnum(ns, enumName, &aniEnum)) { SEN_HILOGE("Not found '%{public}s'", enumName); return nullptr; @@ -477,9 +488,11 @@ bool GetIntervalValue(ani_env *env, ani_object options, int64_t& interval) } ani_class stringClass; - env->FindClass("Lstd/core/String;", &stringClass); + auto classTypeString = arkts::ani_signature::Builder::BuildClass({"std", "core", "String"}); + env->FindClass(classTypeString.Descriptor().c_str(), &stringClass); ani_class doubleClass; - env->FindClass("Lstd/core/Double;", &doubleClass); + auto classTypeDouble = arkts::ani_signature::Builder::BuildClass({"std", "core", "Double"}); + env->FindClass(classTypeDouble.Descriptor().c_str(), &doubleClass); ani_boolean isDouble; env->Object_InstanceOf(static_cast(intervalRef), doubleClass, &isDouble); @@ -487,6 +500,7 @@ bool GetIntervalValue(ani_env *env, ani_object options, int64_t& interval) env->Object_InstanceOf(static_cast(intervalRef), stringClass, &isString); if (isDouble) { ani_double doubleValue; + // Pls replace manually auto ret = env->Object_CallMethodByName_Double(static_cast(intervalRef), "unboxed", nullptr, &doubleValue); if (ret != ANI_OK) { @@ -661,6 +675,7 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) ani_namespace ns; static const char *spaceName = "L@ohos/sensor/sensor;"; + // Pls replace manually if (ANI_OK != env->FindNamespace(spaceName, &ns)) { SEN_HILOGE("Not found space name"); return ANI_ERROR;