add libbundlemgr_mini.z.so

Signed-off-by: zhrenqiang <zhangrenqiang@huawei.com>
Change-Id: I52fae89be75bec0188a1e302ae4b4fb1b8c7aa4e
This commit is contained in:
zhrenqiang 2024-10-08 15:36:06 +08:00
parent 5cd4eb2d0a
commit 6b797891d8
5 changed files with 327 additions and 0 deletions

View File

@ -19,6 +19,7 @@ group("bms_target") {
"common:common_target",
"interfaces/inner_api/appexecfwk_base:appexecfwk_base",
"interfaces/inner_api/appexecfwk_core:appexecfwk_core",
"interfaces/inner_api/appexecfwk_core:bundlemgr_mini",
"interfaces/inner_api/bundlemgr_extension:bundlemgr_extension",
"interfaces/kits/cj:cj_bundle_manager_ffi",
"interfaces/kits/js:napi_packages",

View File

@ -130,6 +130,15 @@
},
"name": "//foundation/bundlemanager/bundle_framework/interfaces/inner_api/appexecfwk_core:appexecfwk_core"
},
{
"header": {
"header_base": "//foundation/bundlemanager/bundle_framework/interfaces/inner_api/appexecfwk_core/include",
"header_files": [
"bundlemgr/bundle_mgr_mini_proxy.h"
]
},
"name": "//foundation/bundlemanager/bundle_framework/interfaces/inner_api/appexecfwk_core:bundlemgr_mini"
},
{
"header": {
"header_base": "//foundation/bundlemanager/bundle_framework/interfaces/inner_api/bundlemgr_extension/include",

View File

@ -154,3 +154,54 @@ ohos_shared_library("appexecfwk_core") {
]
part_name = "bundle_framework"
}
ohos_shared_library("bundlemgr_mini") {
branch_protector_ret = "pac_ret"
sanitize = {
cfi = true
cfi_cross_dso = true
debug = false
}
sources = [ "src/bundlemgr/bundle_mgr_mini_proxy.cpp" ]
public_configs = [
":appexecfwk_core_config",
":bundlemgr_sdk_config",
]
defines = [
"APP_LOG_TAG = \"BMS\"",
"LOG_DOMAIN = 0xD001120",
]
cflags = [ "-Os" ]
cflags_cc = [ "-Os" ]
if (target_cpu == "arm") {
cflags += [ "-DBINDER_IPC_32BIT" ]
}
deps = [
"${base_path}:appexecfwk_base",
"${common_path}:libappexecfwk_common",
]
external_deps = [
"c_utils:utils",
"common_event_service:cesfwk_core",
"common_event_service:cesfwk_innerkits",
"hilog:libhilog",
"hitrace:hitrace_meter",
"ipc:ipc_core",
"samgr:samgr_proxy",
]
public_external_deps = [
"ability_base:want",
"common_event_service:cesfwk_innerkits",
]
subsystem_name = "bundlemanager"
innerapi_tags = [
"platformsdk",
"sasdk",
]
part_name = "bundle_framework"
}

View File

@ -0,0 +1,89 @@
/*
* Copyright (c) 2024 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef FOUNDATION_APPEXECFWK_INTERFACES_INNERKITS_APPEXECFWK_CORE_INCLUDE_BUNDLEMGR_BUNDLE_MGR_MINI_PROXY_H
#define FOUNDATION_APPEXECFWK_INTERFACES_INNERKITS_APPEXECFWK_CORE_INCLUDE_BUNDLEMGR_BUNDLE_MGR_MINI_PROXY_H
#include <string>
#include "bundle_framework_core_ipc_interface_code.h"
#include "bundle_mgr_interface.h"
#include "iremote_proxy.h"
namespace OHOS {
namespace AppExecFwk {
class BundleMgrMiniProxy : public IRemoteProxy<IBundleMgr> {
public:
explicit BundleMgrMiniProxy(const sptr<IRemoteObject> &impl);
virtual ~BundleMgrMiniProxy() override;
/**
* @brief Obtains the formal name associated with the given UID.
* @param uid Indicates the uid.
* @param name Indicates the obtained formal name.
* @return Returns ERR_OK if execute success; returns errCode otherwise.
*/
virtual ErrCode GetNameForUid(const int uid, std::string &name) override;
/**
* @brief Obtains the application ID based on the given bundle name and user ID.
* @param bundleName Indicates the bundle name of the application.
* @param userId Indicates the user ID.
* @return Returns the application ID if successfully obtained; returns empty string otherwise.
*/
virtual std::string GetAppIdByBundleName(const std::string &bundleName, const int userId) override;
/**
* @brief Obtains the application UID based on the given bundle name and user ID through the proxy object.
* @param bundleName Indicates the bundle name of the application.
* @param userId Indicates the user ID.
* @return Returns the uid if successfully obtained; returns -1 otherwise.
*/
virtual int GetUidByBundleName(const std::string &bundleName, const int userId) override;
/**
* @brief Obtains the application UID based on the given bundle name and user ID through the proxy object.
* @param bundleName Indicates the bundle name of the application.
* @param userId Indicates the user ID.
* @param userId Indicates the app Index.
* @return Returns the uid if successfully obtained; returns -1 otherwise.
*/
virtual int32_t GetUidByBundleName(const std::string &bundleName, const int32_t userId, int32_t appIndex) override;
private:
/**
* @brief Send a command message from the proxy object.
* @param code Indicates the message code to be sent.
* @param data Indicates the objects to be sent.
* @param reply Indicates the reply to be sent;
* @return Returns true if message send successfully; returns false otherwise.
*/
bool SendTransactCmd(BundleMgrInterfaceCode code, MessageParcel &data, MessageParcel &reply);
/**
* @brief Send a command message from the proxy object and printf log.
* @param code Indicates the message code to be sent.
* @param data Indicates the objects to be sent.
* @param reply Indicates the reply to be sent;
* @return Returns true if message send successfully; returns false otherwise.
*/
bool SendTransactCmdWithLog(BundleMgrInterfaceCode code, MessageParcel &data, MessageParcel &reply);
};
} // namespace AppExecFwk
} // namespace OHOS
#endif // FOUNDATION_APPEXECFWK_INTERFACES_INNERKITS_APPEXECFWK_CORE_INCLUDE_BUNDLEMGR_BUNDLE_MGR_MINI_PROXY_H

View File

@ -0,0 +1,177 @@
/*
* Copyright (c) 2024 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "bundle_mgr_mini_proxy.h"
#include "app_log_wrapper.h"
#include "appexecfwk_errors.h"
#include "hitrace_meter.h"
namespace OHOS {
namespace AppExecFwk {
BundleMgrMiniProxy::BundleMgrMiniProxy(const sptr<IRemoteObject> &impl) : IRemoteProxy<IBundleMgr>(impl)
{
APP_LOGD("create BundleMgrMiniProxy");
}
BundleMgrMiniProxy::~BundleMgrMiniProxy()
{
APP_LOGD("destroy ~BundleMgrMiniProxy");
}
ErrCode BundleMgrMiniProxy::GetNameForUid(const int uid, std::string &name)
{
HITRACE_METER_NAME(HITRACE_TAG_APP, __PRETTY_FUNCTION__);
APP_LOGD("begin to GetNameForUid of %{public}d", uid);
MessageParcel data;
if (!data.WriteInterfaceToken(GetDescriptor())) {
APP_LOGE("fail to GetNameForUid due to write InterfaceToken fail");
return ERR_APPEXECFWK_PARCEL_ERROR;
}
if (!data.WriteInt32(uid)) {
APP_LOGE("fail to GetNameForUid due to write uid fail");
return ERR_APPEXECFWK_PARCEL_ERROR;
}
MessageParcel reply;
if (!SendTransactCmdWithLog(BundleMgrInterfaceCode::GET_NAME_FOR_UID, data, reply)) {
APP_LOGE("fail to GetNameForUid from server");
return ERR_APPEXECFWK_PARCEL_ERROR;
}
ErrCode ret = reply.ReadInt32();
if (ret != ERR_OK) {
return ret;
}
name = reply.ReadString();
return ERR_OK;
}
std::string BundleMgrMiniProxy::GetAppIdByBundleName(const std::string &bundleName, const int userId)
{
if (bundleName.empty()) {
APP_LOGE("failed to GetAppIdByBundleName due to bundleName empty");
return Constants::EMPTY_STRING;
}
HITRACE_METER_NAME(HITRACE_TAG_APP, __PRETTY_FUNCTION__);
APP_LOGD("begin to get appId of %{public}s", bundleName.c_str());
MessageParcel data;
if (!data.WriteInterfaceToken(GetDescriptor())) {
APP_LOGE("failed to GetAppIdByBundleName due to write InterfaceToken fail");
return Constants::EMPTY_STRING;
}
if (!data.WriteString(bundleName)) {
APP_LOGE("failed to GetAppIdByBundleName due to write bundleName fail");
return Constants::EMPTY_STRING;
}
if (!data.WriteInt32(userId)) {
APP_LOGE("failed to GetAppIdByBundleName due to write uid fail");
return Constants::EMPTY_STRING;
}
MessageParcel reply;
if (!SendTransactCmd(BundleMgrInterfaceCode::GET_APPID_BY_BUNDLE_NAME, data, reply)) {
APP_LOGE("failed to GetAppIdByBundleName from server");
return Constants::EMPTY_STRING;
}
std::string appId = reply.ReadString();
APP_LOGD("appId is %{private}s", appId.c_str());
return appId;
}
int BundleMgrMiniProxy::GetUidByBundleName(const std::string &bundleName, const int userId)
{
return GetUidByBundleName(bundleName, userId, 0);
}
int32_t BundleMgrMiniProxy::GetUidByBundleName(const std::string &bundleName, const int32_t userId, int32_t appIndex)
{
if (bundleName.empty()) {
APP_LOGE("failed to GetUidByBundleName due to bundleName empty");
return Constants::INVALID_UID;
}
HITRACE_METER_NAME(HITRACE_TAG_APP, __PRETTY_FUNCTION__);
APP_LOGD("begin to get uid of %{public}s, userId : %{public}d, appIndex : %{public}d", bundleName.c_str(),
userId, appIndex);
MessageParcel data;
if (!data.WriteInterfaceToken(GetDescriptor())) {
APP_LOGE("failed to GetUidByBundleName due to write InterfaceToken fail");
return Constants::INVALID_UID;
}
if (!data.WriteString(bundleName)) {
APP_LOGE("failed to GetUidByBundleName due to write bundleName fail");
return Constants::INVALID_UID;
}
if (!data.WriteInt32(userId)) {
APP_LOGE("failed to GetUidByBundleName due to write uid fail");
return Constants::INVALID_UID;
}
if (!data.WriteInt32(appIndex)) {
APP_LOGE("failed to GetUidByBundleName due to write uid fail");
return Constants::INVALID_UID;
}
MessageParcel reply;
if (!SendTransactCmd(BundleMgrInterfaceCode::GET_UID_BY_BUNDLE_NAME, data, reply)) {
APP_LOGE("failed to GetUidByBundleName from server");
return Constants::INVALID_UID;
}
int32_t uid = reply.ReadInt32();
APP_LOGD("uid is %{public}d", uid);
return uid;
}
bool BundleMgrMiniProxy::SendTransactCmd(BundleMgrInterfaceCode code, MessageParcel &data, MessageParcel &reply)
{
MessageOption option(MessageOption::TF_SYNC);
sptr<IRemoteObject> remote = Remote();
if (remote == nullptr) {
APP_LOGE("fail send transact cmd %{public}d due remote object", code);
return false;
}
int32_t result = remote->SendRequest(static_cast<uint32_t>(code), data, reply, option);
if (result != NO_ERROR) {
APP_LOGE("receive error transact code %{public}d in transact cmd %{public}d", result, code);
return false;
}
return true;
}
bool BundleMgrMiniProxy::SendTransactCmdWithLog(BundleMgrInterfaceCode code, MessageParcel &data, MessageParcel &reply)
{
MessageOption option(MessageOption::TF_SYNC);
sptr<IRemoteObject> remote = Remote();
if (remote == nullptr) {
APP_LOGE("fail send transact cmd %{public}d due remote object", code);
return false;
}
int32_t sptrRefCount = remote->GetSptrRefCount();
int32_t wptrRefCount = remote->GetWptrRefCount();
if (sptrRefCount <= 0 || wptrRefCount <= 0) {
APP_LOGI("SendRequest before sptrRefCount: %{public}d wptrRefCount: %{public}d",
sptrRefCount, wptrRefCount);
}
int32_t result = remote->SendRequest(static_cast<uint32_t>(code), data, reply, option);
if (result != NO_ERROR) {
APP_LOGE("receive error transact code %{public}d in transact cmd %{public}d", result, code);
return false;
}
return true;
}
} // namespace AppExecFwk
} // namespace OHOS