diff --git a/frameworks/native/backup_ext/ani/BUILD.gn b/frameworks/native/backup_ext/ani/BUILD.gn index 098ebf899e4b0d25c12757f3c9deb067b8e99361..662dbb57f62faeb93b24435e4f72c2208caa918f 100644 --- a/frameworks/native/backup_ext/ani/BUILD.gn +++ b/frameworks/native/backup_ext/ani/BUILD.gn @@ -53,6 +53,7 @@ ohos_shared_library("backup_ext_ani") { "hitrace:hitrace_meter", "ipc:ipc_core", "runtime_core:ani", + "runtime_core:ani_helpers", "samgr:samgr_proxy", ] diff --git a/frameworks/native/backup_ext/ani/include/ani_utils.h b/frameworks/native/backup_ext/ani/include/ani_utils.h index 6ce270f0c81e39a03338154d07245afb2ef25ed5..f65e4fd084fbc1a109208b5b5b82664b2d947da8 100644 --- a/frameworks/native/backup_ext/ani/include/ani_utils.h +++ b/frameworks/native/backup_ext/ani/include/ani_utils.h @@ -17,6 +17,7 @@ #define ANI_UTILS_H #include +#include #include #include @@ -34,19 +35,22 @@ public: ani_object nullobj {}; ani_namespace ns; + // Pls replace manually if (ANI_OK != env->FindNamespace(nsName, &ns)) { std::cerr << "[ANI] Not found namespace " << nsName << std::endl; return nullobj; } ani_class cls; + // Pls replace manually if (ANI_OK != env->Namespace_FindClass(ns, clsName, &cls)) { std::cerr << "[ANI] Not found class " << clsName << std::endl; return nullobj; } ani_method ctor; - if (ANI_OK != env->Class_FindMethod(cls, "", nullptr, &ctor)) { + auto methodCtor = arkts::ani_signature::Builder::BuildConstructorName(); + if (ANI_OK != env->Class_FindMethod(cls, methodCtor.c_str(), nullptr, &ctor)) { std::cerr << "[ANI] Not found for class " << clsName << std::endl; return nullobj; } @@ -69,13 +73,15 @@ public: ani_object nullobj {}; ani_class cls; + // Pls replace manually if (ANI_OK != env->FindClass(clsName, &cls)) { std::cerr << "[ANI] Not found class " << clsName << std::endl; return nullobj; } ani_method ctor; - if (ANI_OK != env->Class_FindMethod(cls, "", nullptr, &ctor)) { + auto methodCtor = arkts::ani_signature::Builder::BuildConstructorName(); + if (ANI_OK != env->Class_FindMethod(cls, methodCtor.c_str(), nullptr, &ctor)) { std::cerr << "[ANI] Not found for class " << clsName << std::endl; return nullobj; } @@ -97,7 +103,8 @@ public: ani_object nullobj {}; ani_method ctor; - if (ANI_OK != env->Class_FindMethod(cls, "", nullptr, &ctor)) { + auto methodCtor = arkts::ani_signature::Builder::BuildConstructorName(); + if (ANI_OK != env->Class_FindMethod(cls, methodCtor.c_str(), nullptr, &ctor)) { std::cerr << "[ANI] Not found for class" << std::endl; return nullobj; } @@ -168,6 +175,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; @@ -221,6 +229,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; @@ -237,6 +246,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; @@ -253,6 +263,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; @@ -287,6 +298,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; @@ -311,6 +323,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; @@ -335,6 +348,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; @@ -413,6 +427,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/native/backup_ext/ani/src/ext_backup_ani.cpp b/frameworks/native/backup_ext/ani/src/ext_backup_ani.cpp index d5ac5d1ab66a145c47a8d78bf9e3130bf0b4077b..45087e464ed6f4240c1489d698feffb6a8dbeb73 100644 --- a/frameworks/native/backup_ext/ani/src/ext_backup_ani.cpp +++ b/frameworks/native/backup_ext/ani/src/ext_backup_ani.cpp @@ -13,6 +13,7 @@ * limitations under the License. */ +#include #include "ext_backup_ani.h" #include "b_error/b_error.h" #include "b_error/b_excep_utils.h" @@ -74,6 +75,7 @@ void ExtBackupAni::Init(const std::shared_ptr &r ErrCode ExtBackupAni::CallEtsOnBackup() { + // Pls replace manually if (ANI_OK != env_->Object_CallMethodByName_Void(etsObj_->aniObj, "onBackup", nullptr)) { HILOGE("Failed to call the method: onBackup"); return EINVAL; @@ -88,6 +90,7 @@ ErrCode ExtBackupAni::CallEtsOnRestore() HILOGE("Failed to Create the BundleVersionInner"); return EINVAL; } + // Pls replace manually if (ANI_OK != env_->Object_CallMethodByName_Void(etsObj_->aniObj, "onRestore", nullptr, bundleVersionObj)) { HILOGE("Failed to call the method: onRestore"); return EINVAL; diff --git a/interfaces/kits/ani/file_share/BUILD.gn b/interfaces/kits/ani/file_share/BUILD.gn index 772e9e2591adec8eb005bfdaf1e5bf43b24fa735..b860d80b79c082b5cca3573bd11f22e606604db1 100644 --- a/interfaces/kits/ani/file_share/BUILD.gn +++ b/interfaces/kits/ani/file_share/BUILD.gn @@ -57,6 +57,7 @@ ohos_shared_library("fileshare_ani") { "init:libbegetutil", "ipc:ipc_core", "runtime_core:ani", + "runtime_core:ani_helpers", ] part_name = "app_file_service" subsystem_name = "filemanagement" diff --git a/interfaces/kits/ani/file_share/src/ani_file_share.cpp b/interfaces/kits/ani/file_share/src/ani_file_share.cpp index 800b8e50f7b3da4449617ee6a0488f351c87f41f..b72f3b6e3d3cfe84b7cd4299c84ae97548be97e4 100644 --- a/interfaces/kits/ani/file_share/src/ani_file_share.cpp +++ b/interfaces/kits/ani/file_share/src/ani_file_share.cpp @@ -16,6 +16,7 @@ #include "ani_file_share.h" #include +#include #include #include #include "ability.h" @@ -66,12 +67,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)) { LOGE("%{public}s: Not found namespace %{public}s.", __func__, 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)) { LOGE("%{public}s: Not found in %{public}s.", __func__, errorClsName); return nullptr; } @@ -281,6 +287,7 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) static const char *nsName = "L@ohos/fileshare/fileShare;"; ani_namespace ns; + // Pls replace manually if (ANI_OK != env->FindNamespace(nsName, &ns)) { LOGE("Not found namespace %{public}s.", nsName); return ANI_NOT_FOUND; diff --git a/interfaces/kits/ani/file_uri/BUILD.gn b/interfaces/kits/ani/file_uri/BUILD.gn index c3545159d00f886955e9eb735f777a1e5335bde7..aeeec67ddcb8ce49b08566c9c1cc3b47c65fa508 100644 --- a/interfaces/kits/ani/file_uri/BUILD.gn +++ b/interfaces/kits/ani/file_uri/BUILD.gn @@ -50,6 +50,7 @@ ohos_shared_library("fileuri_ani") { "hilog:libhilog", "ipc:ipc_core", "runtime_core:ani", + "runtime_core:ani_helpers", "samgr:samgr_proxy", ] part_name = "app_file_service" diff --git a/interfaces/kits/ani/file_uri/src/ani_file_uri.cpp b/interfaces/kits/ani/file_uri/src/ani_file_uri.cpp index ee5c314bdde9041ae7aa3dd306441c026585f728..e8e423423bfcab9e2793f19fced609264dd55b7e 100644 --- a/interfaces/kits/ani/file_uri/src/ani_file_uri.cpp +++ b/interfaces/kits/ani/file_uri/src/ani_file_uri.cpp @@ -14,6 +14,7 @@ */ #include +#include #include #include #include "common_func.h" @@ -51,12 +52,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)) { LOGE("Not found %{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)) { LOGE("Not found method in %{public}s.", errorClsName); return nullptr; } @@ -113,7 +119,8 @@ void FileUriConstructor(ani_env *env, ani_object obj, ani_string stringObj) LOGD("FileUriConstructor fileuriEntity: %{public}p.", fileuriEntity.get()); ani_namespace ns; - if (env->FindNamespace("L@ohos/file/fileuri/fileUri;", &ns) != ANI_OK) { + auto namespaceTypefileUri = arkts::ani_signature::Builder::BuildNamespace({"@ohos", "file", "fileuri", "fileUri"}); + if (env->FindNamespace(namespaceTypefileUri.Descriptor().c_str(), &ns) != ANI_OK) { LOGE("Namespace L@ohos/file/fileuri/fileUri not found."); ani_error err = CreateAniError(env, "Namespace L@ohos/file/fileuri/fileUri not found."); env->ThrowError(err); @@ -122,6 +129,7 @@ void FileUriConstructor(ani_env *env, ani_object obj, ani_string stringObj) ani_class cls; static const char *className = "LFileUri;"; + // Pls replace manually if (env->Namespace_FindClass(ns, className, &cls) != ANI_OK) { LOGE("Not found class LFileUri in Namespace L@ohos/file/fileuri/fileUri."); ani_error err = CreateAniError(env, "Class LFileUri not found."); @@ -130,7 +138,10 @@ void FileUriConstructor(ani_env *env, ani_object obj, ani_string stringObj) } ani_method acquireObj; - if (ANI_OK != env->Class_FindMethod(cls, "acquireFileUriEntity", "J:V", &acquireObj)) { + arkts::ani_signature::SignatureBuilder acquireFileUriEntitySigBuilder; + acquireFileUriEntitySigBuilder.AddLong(); + auto acquireFileUriEntitySignature = acquireFileUriEntitySigBuilder.BuildSignatureDescriptor(); + if (ANI_OK != env->Class_FindMethod(cls, "acquireFileUriEntity", acquireFileUriEntitySignature.c_str(), &acquireObj)) { LOGE("Not found method acquireFileUriEntity in class LFileUri."); ani_error err = CreateAniError(env, "Method acquireFileUriEntity not found."); env->ThrowError(err); @@ -156,6 +167,7 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) static const char *nsName = "L@ohos/file/fileuri/fileUri;"; ani_namespace ns; + // Pls replace manually if (ANI_OK != env->FindNamespace(nsName, &ns)) { LOGE("Not found namespace %{public}s.", nsName); return ANI_NOT_FOUND; @@ -170,12 +182,16 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) static const char *className = "LFileUri;"; ani_class fileUriClass; + // Pls replace manually if (ANI_OK != env->Namespace_FindClass(ns, className, &fileUriClass)) { LOGE("Not found class %{public}s in %{public}s.", nsName, nsName); return ANI_NOT_FOUND; } + arkts::ani_signature::SignatureBuilder FileUriConstructorSigBuilder; + FileUriConstructorSigBuilder.AddClass({"std", "core", "String"}); + auto FileUriConstructorSignature = FileUriConstructorSigBuilder.BuildSignatureDescriptor(); std::array classMethods = { - ani_native_function {"", "Lstd/core/String;:V", reinterpret_cast(FileUriConstructor)}, + ani_native_function{ "", FileUriConstructorSignature.c_str(), reinterpret_cast(FileUriConstructor) }, }; if (ANI_OK != env->Class_BindNativeMethods(fileUriClass, classMethods.data(), classMethods.size())) { LOGE("Cannot bind native methods to class %{public}s.", className);