diff --git a/frameworks/kits/ability/native/include/js_service_extension.h b/frameworks/kits/ability/native/include/js_service_extension.h index b95b15ab9a99a4e77483ea5b62da17d43dfdad75..036fe803236e59ca22f60abc7c92800f63609e73 100644 --- a/frameworks/kits/ability/native/include/js_service_extension.h +++ b/frameworks/kits/ability/native/include/js_service_extension.h @@ -107,6 +107,8 @@ public: private: NativeValue* CallObjectMethod(const char* name, NativeValue* const* argv = nullptr, size_t argc = 0); + void GetSrcPath(std::string &srcPath); + JsRuntime& jsRuntime_; std::unique_ptr jsObj_; }; diff --git a/frameworks/kits/ability/native/src/js_service_extension.cpp b/frameworks/kits/ability/native/src/js_service_extension.cpp index 1abe9ce14fa2f2418cd1a21694186bf758c0ebd5..e72970cea9fd4c10ba6d7b6d923e36a500b33c69 100755 --- a/frameworks/kits/ability/native/src/js_service_extension.cpp +++ b/frameworks/kits/ability/native/src/js_service_extension.cpp @@ -46,14 +46,12 @@ void JsServiceExtension::Init(const std::shared_ptr &record, const sptr &token) { ServiceExtension::Init(record, application, handler, token); - if (Extension::abilityInfo_->srcEntrance.empty()) { - HILOG_ERROR("abilityInfo srcEntrance is empty"); + std::string srcPath = ""; + GetSrcPath(srcPath); + if (srcPath.empty()) { + HILOG_ERROR("Failed to get srcPath"); return; } - std::string srcPath(Extension::abilityInfo_->moduleName + "/"); - srcPath.append(Extension::abilityInfo_->srcPath); - srcPath.erase(srcPath.rfind('.')); - srcPath.append(".abc"); std::string moduleName(Extension::abilityInfo_->moduleName); moduleName.append("::").append(abilityInfo_->name); @@ -246,5 +244,26 @@ NativeValue* JsServiceExtension::CallObjectMethod(const char* name, NativeValue* HILOG_INFO("JsServiceExtension::CallFunction(%{public}s), success", name); return nativeEngine.CallFunction(value, method, argv, argc); } + +void JsServiceExtension::GetSrcPath(std::string &srcPath) +{ + if (!Extension::abilityInfo_->isStageBasedModel) { + /* temporary compatibility api8 + config.json */ + srcPath.append(Extension::abilityInfo_->package); + srcPath.append("/assets/js/"); + if (!Extension::abilityInfo_->srcPath.empty()) { + srcPath.append(Extension::abilityInfo_->srcPath); + } + srcPath.append("/").append(Extension::abilityInfo_->name).append(".abc"); + return; + } + + if (!Extension::abilityInfo_->srcEntrance.empty()) { + srcPath.append(Extension::abilityInfo_->moduleName + "/"); + srcPath.append(Extension::abilityInfo_->srcEntrance); + srcPath.erase(srcPath.rfind('.')); + srcPath.append(".abc"); + } +} } } \ No newline at end of file diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index 94d8b8364e97d3dcda1e373bfb6617f3f8a200bb..4460723b8534c32d6cf52ec6dc9fbe3de914cab3 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -3069,6 +3069,7 @@ int32_t AbilityManagerService::InitAbilityInfoFromExtension(AppExecFwk::Extensio abilityInfo.applicationInfo = extensionInfo.applicationInfo; abilityInfo.resourcePath = extensionInfo.resourcePath; abilityInfo.enabled = extensionInfo.enabled; + abilityInfo.isStageBasedModel = true; switch (extensionInfo.type) { case AppExecFwk::ExtensionAbilityType::FORM: abilityInfo.type = AppExecFwk::AbilityType::FORM;