diff --git a/include/appspawn_server.h b/include/appspawn_server.h index c73cf79fa9fa00cf026a1a9e3f403ae67b695ce2..b210bc599d5ca5a107ca13118702e7ce7c996e7b 100644 --- a/include/appspawn_server.h +++ b/include/appspawn_server.h @@ -143,6 +143,13 @@ private: */ bool CheckAppProperty(const ClientSocket::AppProperty *appProperty); +#ifdef ACEABILITY_LIBRARY_LOADER + /** + * Load libace.z.so library when boot the devices + */ + void LoadAceLib(); +#endif + private: const std::string deviceNull_ = "/dev/null"; std::string socketName_ {}; diff --git a/src/appspawn_server.cpp b/src/appspawn_server.cpp index c5071b053ba84e05256d964d8e1b3dc8fa4fac79..e5d0ee5e7486e864a53e56a861ee5853539197bf 100644 --- a/src/appspawn_server.cpp +++ b/src/appspawn_server.cpp @@ -28,6 +28,11 @@ #include "main_thread.h" #include "securec.h" +#if defined(ABILITY_LIBRARY_LOADER) || defined(APPLICATION_LIBRARY_LOADER) +#include +#include +#endif + #define GRAPHIC_PERMISSION_CHECK namespace OHOS { @@ -147,6 +152,22 @@ void AppSpawnServer::ConnectionPeer() } } +#ifdef ACEABILITY_LIBRARY_LOADER +void AppSpawnServer::LoadAceLib() +{ + std::string acelibdir("/system/lib/libace.z.so"); + void *AceAbilityLib = nullptr; + HiLog::Info(LABEL, "MainThread::LoadAbilityLibrary. Start calling dlopen acelibdir."); + AceAbilityLib = dlopen(acelibdir.c_str(), RTLD_NOW | RTLD_GLOBAL); + if (AceAbilityLib == nullptr) { + HiLog::Error(LABEL, "Fail to dlopen %{public}s, [%{public}s]", acelibdir.c_str(), dlerror()); + } else { + HiLog::Info(LABEL, "Success to dlopen %{public}s", acelibdir.c_str()); + } + HiLog::Info(LABEL, "MainThread::LoadAbilityLibrary. End calling dlopen."); +} +#endif + bool AppSpawnServer::ServerMain(char *longProcName, int64_t longProcNameLen) { if (socket_->RegisterServerSocket() != 0) { @@ -154,7 +175,9 @@ bool AppSpawnServer::ServerMain(char *longProcName, int64_t longProcNameLen) return false; } std::thread(&AppSpawnServer::ConnectionPeer, this).detach(); - +#ifdef ACEABILITY_LIBRARY_LOADER + LoadAceLib(); +#endif while (isRunning_) { std::unique_lock lock(mut_); dataCond_.wait(lock, [this] { return !this->appQueue_.empty(); });