diff --git a/appspawn.gni b/appspawn.gni index 341012bfdaf159848a1e5f28f07b1999842b53e2..802c3f70bc47c45beb76c29abcc92e782dad2eba 100644 --- a/appspawn.gni +++ b/appspawn.gni @@ -41,7 +41,6 @@ declare_args() { appspawn_support_local_debugger = false appspawn_hitrace_option = true appspawn_napi_preload_path = "../appspawn_preload.json" - appspawn_arkweb_preload = true } if (!defined(global_parts_info) || diff --git a/bundle.json b/bundle.json index 36e31976c2cf13983be49997ee42cd254c40970d..548ce33651ae13fb096fee7191f07f334e8a07d1 100644 --- a/bundle.json +++ b/bundle.json @@ -32,8 +32,7 @@ "appspawn_custom_sandbox", "appspawn_support_nosharefs", "appspawn_support_local_debugger", - "appspawn_napi_preload_path", - "appspawn_arkweb_preload" + "appspawn_napi_preload_path" ], "rom": "296KB", "ram": "13125KB", diff --git a/modules/nweb_adapter/BUILD.gn b/modules/nweb_adapter/BUILD.gn index 16145b27c2ffb6b835c358fb083e8a10c5371ab3..84804a226f476fef13af4515b5e0e6c176fe4254 100644 --- a/modules/nweb_adapter/BUILD.gn +++ b/modules/nweb_adapter/BUILD.gn @@ -31,9 +31,6 @@ ohos_shared_library("appspawn_nweb") { if (target_cpu == "x86_64") { defines += [ "webview_x86_64" ] } - if (appspawn_arkweb_preload) { - defines += [ "arkweb_preload" ] - } external_deps = [ "c_utils:utils", diff --git a/modules/nweb_adapter/nwebspawn_adapter.cpp b/modules/nweb_adapter/nwebspawn_adapter.cpp index f2238082fa943da0c44eced96bd983c843d5323e..5f744b24ce6c71467695948dbfaf2813e5b5bffd 100644 --- a/modules/nweb_adapter/nwebspawn_adapter.cpp +++ b/modules/nweb_adapter/nwebspawn_adapter.cpp @@ -36,17 +36,11 @@ #endif #include "arkweb_utils.h" +#include "arkweb_preload_common.h" namespace { const std::string ARK_WEB_ENGINE_LIB_NAME = "libarkweb_engine.so"; const std::string ARK_WEB_RENDER_LIB_NAME = "libarkweb_render.so"; - -typedef enum { - PRELOAD_NO = 0, // 不预加载 - PRELOAD_PARTIAL = 1, // 只预加载libohos_adapter_glue_source.z.so - PRELOAD_FULL = 2 // 预加载libohos_adapter_glue_source.z.so和libarkweb_engine.so -} RenderPreLoadMode; - } // namespace static bool SetSeccompPolicyForRenderer(void *nwebRenderHandle) @@ -160,81 +154,6 @@ APPSPAWN_STATIC int RunChildProcessor(AppSpawnContent *content, AppSpawnClient * return 0; } -static std::string GetOhosAdptGlueSrcLibPath() -{ -#ifdef webview_arm64 - const std::string ARK_WEB_CORE_HAP_LIB_PATH = - "/system/lib64/libohos_adapter_glue_source.z.so"; -#elif webview_x86_64 - const std::string ARK_WEB_CORE_HAP_LIB_PATH = ""; -#else - const std::string ARK_WEB_CORE_HAP_LIB_PATH = - "/system/lib/libohos_adapter_glue_source.z.so"; -#endif - return ARK_WEB_CORE_HAP_LIB_PATH; -} - -static std::string GetArkWebEngineLibPath() -{ - char bundleName[PATH_MAX] = {0}; - GetParameter("persist.arkwebcore.package_name", "", bundleName, PATH_MAX); - if (strlen(bundleName) == 0) { - APPSPAWN_LOGE("Fail to get persist.arkwebcore.package_name, empty"); - return ""; - } -#ifdef webview_arm64 - const std::string ARK_WEB_CORE_HAP_LIB_PATH = - "/data/app/el1/bundle/public/" + std::string(bundleName) + "/libs/arm64"; -#elif webview_x86_64 - const std::string ARK_WEB_CORE_HAP_LIB_PATH = ""; -#else - const std::string ARK_WEB_CORE_HAP_LIB_PATH = - "/data/app/el1/bundle/public/" + std::string(bundleName) + "/libs/arm"; -#endif - return ARK_WEB_CORE_HAP_LIB_PATH; -} - -static void PreLoadArkWebEngineLib() -{ - Dl_namespace dlns; - Dl_namespace ndkns; - dlns_init(&dlns, "nweb_ns"); - const std::string arkWebEngineLibPath = GetArkWebEngineLibPath(); - if (arkWebEngineLibPath.empty()) { - return; - } - dlns_create(&dlns, arkWebEngineLibPath.c_str()); - dlns_get("ndk", &ndkns); - dlns_inherit(&dlns, &ndkns, "allow_all_shared_libs"); - void *webEngineHandle = dlopen_ns(&dlns, ARK_WEB_ENGINE_LIB_NAME.c_str(), RTLD_NOW | RTLD_GLOBAL); - if (!webEngineHandle) { - APPSPAWN_LOGE("Fail to dlopen libarkweb_engine.so, errno: %{public}d", errno); - } -} - -static void PreLoadOHOSAdptGlueSrcLib() -{ - const std::string ohosAdptGlueSrcLibPath = GetOhosAdptGlueSrcLibPath(); - if (ohosAdptGlueSrcLibPath.empty()) { - return; - } - void *ohosAdptGlueSrcHandle = dlopen(ohosAdptGlueSrcLibPath.c_str(), RTLD_NOW | RTLD_GLOBAL); - if (!ohosAdptGlueSrcHandle) { - APPSPAWN_LOGE("Fail to dlopen libohos_adapter_glue_source.z.so, errno: %{public}d", errno); - } -} - -#ifndef arkweb_preload -static int GetSysParamPreLoadMode() -{ - const int BUFFER_LEN = 8; - char preLoadMode[BUFFER_LEN] = {0}; - GetParameter("const.startup.nwebspawn.preloadMode", "0", preLoadMode, BUFFER_LEN); - int ret = std::atoi(preLoadMode); - return ret; -} -#endif - APPSPAWN_STATIC int PreLoadNwebSpawn(AppSpawnMgr *content) { APPSPAWN_LOGI("PreLoadNwebSpawn %{public}d", IsNWebSpawnMode(content)); @@ -244,21 +163,8 @@ APPSPAWN_STATIC int PreLoadNwebSpawn(AppSpawnMgr *content) // register RegChildLooper(&content->content, RunChildProcessor); - // preload render lib -#ifdef arkweb_preload - int preloadMode = RenderPreLoadMode::PRELOAD_FULL; -#else - int preloadMode = GetSysParamPreLoadMode(); -#endif - APPSPAWN_LOGI("NwebSpawn preload render lib mode: %{public}d", preloadMode); - if (preloadMode == PRELOAD_PARTIAL) { - PreLoadOHOSAdptGlueSrcLib(); - } - if (preloadMode == PRELOAD_FULL) { - PreLoadArkWebEngineLib(); - PreLoadOHOSAdptGlueSrcLib(); - } - + OHOS::ArkWeb::PreloadArkWebLibForRender(); + return 0; } diff --git a/nwebspawn.cfg b/nwebspawn.cfg index fffd8651526167d6dffe17b8b1b505c5ec27d1f1..927dc444e16943329ccc29ab0cb9dac84605cc9a 100644 --- a/nwebspawn.cfg +++ b/nwebspawn.cfg @@ -6,6 +6,13 @@ "start nwebspawn" ] }], + "jobs" : [{ + "name" : "param:nwebspawn_service_restart", + "condition" : "bootevent.boot.completed=true && web.engine.install.completed=true", + "cmds" : [ + "reset nwebspawn" + ] + }], "services" : [{ "name" : "nwebspawn", "path" : ["/system/bin/nwebspawn",