AndroidQ+ 手机搬家 微信等数据迁移方案
发布日期:2021-06-29 11:30:15
浏览次数:2
分类:技术文章
本文共 7893 字,大约阅读时间需要 26 分钟。
diff --git a/frameworks/base/core/java/android/content/pm/IPackageManager.aidl b/frameworks/base/core/java/android/content/pm/IPackageManager.aidl
index a7eecd7f43..71223d999a 100644 --- a/frameworks/base/core/java/android/content/pm/IPackageManager.aidl +++ b/frameworks/base/core/java/android/content/pm/IPackageManager.aidl @@ -468,6 +468,10 @@ interface IPackageManager { */ void clearApplicationUserData(in String packageName, IPackageDataObserver observer, int userId); +//zyf test satrt + void cpApplicationData(in String packageName,in String srcPath, + in String destPath,in int groupId, in int userId); +//zyf test end /** * Clear the profile data of an application. * @param packageName The package name of the application whose profile data diff --git a/frameworks/base/core/java/android/content/pm/PackageManager.java b/frameworks/base/core/java/android/content/pm/PackageManager.java index e08f4a28e7..f4f47cbfd5 100644 --- a/frameworks/base/core/java/android/content/pm/PackageManager.java +++ b/frameworks/base/core/java/android/content/pm/PackageManager.java @@ -7388,4 +7388,15 @@ public abstract class PackageManager { "sendDeviceCustomizationReadyBroadcast not implemented in subclass"); } + //zyf test start + /** + * @hide + */ + public void cpApplicationData(String packageName, String srcPath, + String destPath, int groupId, int userId){ + throw new UnsupportedOperationException( + "cpApplicationData not implemented in subclass"); + } + //zyf test end + } diff --git a/frameworks/base/services/core/java/com/android/server/pm/Installer.java b/frameworks/base/services/core/java/com/android/server/pm/Installer.java index adcd19e9bb..d6edd5463b 100644 --- a/frameworks/base/services/core/java/com/android/server/pm/Installer.java +++ b/frameworks/base/services/core/java/com/android/server/pm/Installer.java @@ -210,6 +210,18 @@ public class Installer extends SystemService { } } + //zyf test start + public int copyDirFiles(String uuid, String srcPath , String destPath, int groupId, int userId) throws InstallerException { + if (!checkBeforeRemote()) return -1; + try { + mInstalld.copyDirFiles(uuid, srcPath, destPath , groupId, userId); + } catch (Exception e) { + throw InstallerException.from(e); + } + return 0; + } + //zyf test end + public void destroyAppData(String uuid, String packageName, int userId, int flags, long ceDataInode) throws InstallerException { if (!checkBeforeRemote()) return; diff --git a/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java b/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java index e8d439d288..1503a1d871 100644 --- a/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java @@ -20073,6 +20073,39 @@ public class PackageManagerService extends IPackageManager.Stub }); } + //zyf test start + //void cpApplicationData(in String packageName,in String srcPath, + // in String destPath,in int groupId, in int userId); + @Override + public void cpApplicationData(final String packageName,final String srcPath, + final String destPath, final int groupId, final int userId) { + + final int callingUid = Binder.getCallingUid(); + + + + final PackageParser.Package pkg; + synchronized (mPackages) { + pkg = mPackages.get(packageName); + } + final String volumeUuid = pkg.volumeUuid; + + mHandler.post(new Runnable() { + public void run() { + final boolean succeeded; + synchronized (mInstallLock) { + try { + mInstaller.copyDirFiles(volumeUuid, srcPath, destPath, groupId, + userId); + } catch (InstallerException e) { + Slog.w(TAG, String.valueOf(e)); + } + } + } //end run + }); + } + //zyf test end + private boolean clearApplicationUserDataLIF(String packageName, int userId) { if (packageName == null) { Slog.w(TAG, "Attempt to delete null packageName."); diff --git a/frameworks/native/cmds/installd/InstalldNativeService.cpp b/frameworks/native/cmds/installd/InstalldNativeService.cpp index caac2e89a7..7655be2c99 100644 --- a/frameworks/native/cmds/installd/InstalldNativeService.cpp +++ b/frameworks/native/cmds/installd/InstalldNativeService.cpp @@ -623,6 +623,9 @@ binder::Status InstalldNativeService::clearAppData(const std::unique_ptr<std::st } } } + //zyf test start + //copy_dir_files("/data/data/com.tencent.mm/MicroMsg","/data/data/com.tencent.mm/MicroMsg_test",1000,1000); + //zyf test end return res; } @@ -1033,7 +1036,8 @@ binder::Status InstalldNativeService::restoreAppDataSnapshot( } binder::Status InstalldNativeService::destroyAppDataSnapshot( - const std::unique_ptr<std::string> &volumeUuid, const std::string& packageName, + const std::unique_ptr<std::string> &volumeUuid, + const std::string& packageName, const int32_t user, const int64_t ceSnapshotInode, const int32_t snapshotId, int32_t storageFlags) { ENFORCE_UID(AID_SYSTEM); @@ -2827,5 +2831,29 @@ binder::Status InstalldNativeService::migrateLegacyObbData() { return ok(); } +//zyf test start +binder::Status InstalldNativeService::copyDirFiles(const std::unique_ptr<std::string>& uuid, const std::string& srcpath,const std::string& destpath, int32_t groupId,int32_t userId, + int32_t* _aidl_return){ + ENFORCE_UID(AID_SYSTEM); + CHECK_ARGUMENT_UUID(uuid); + std::lock_guard<std::recursive_mutex> lock(mLock); + + const char* src = srcpath.c_str(); + const char* dest = destpath.c_str(); + + //const char* uuid_ = uuid ? uuid->c_str() : nullptr; + binder::Status res = ok(); + if (access(src, F_OK) == 0) { + *_aidl_return=copy_dir_files(src, dest, userId, groupId); + /* + if (copy_dir_files(srcname, dstname, uid, gid) != 0) { + SLOGE("Some files failed to copy"); + } + */ + } + return res; +} +//zyf test end + } // namespace installd } // namespace android diff --git a/frameworks/native/cmds/installd/InstalldNativeService.h b/frameworks/native/cmds/installd/InstalldNativeService.h index 2b7bf33cbc..501ecf1d69 100644 --- a/frameworks/native/cmds/installd/InstalldNativeService.h +++ b/frameworks/native/cmds/installd/InstalldNativeService.h @@ -70,6 +70,7 @@ public: const std::string& packageName, const int32_t user, const int64_t ceSnapshotInode, const int32_t snapshotId, int32_t storageFlags); + binder::Status getAppSize(const std::unique_ptr<std::string>& uuid, const std::vector<std::string>& packageNames, int32_t userId, int32_t flags, int32_t appId, const std::vector<int64_t>& ceDataInodes, @@ -157,6 +158,11 @@ public: binder::Status migrateLegacyObbData(); + //zyf test start + binder::Status copyDirFiles(const std::unique_ptr<std::string>& uuid, const std::string& srcpath,const std::string& destpath, int32_t groupId,int32_t userId, + int32_t* _aidl_return); + //zyf test end + private: std::recursive_mutex mLock; diff --git a/frameworks/native/cmds/installd/binder/android/os/IInstalld.aidl b/frameworks/native/cmds/installd/binder/android/os/IInstalld.aidl index 26e9984f11..299c62779c 100644 --- a/frameworks/native/cmds/installd/binder/android/os/IInstalld.aidl +++ b/frameworks/native/cmds/installd/binder/android/os/IInstalld.aidl @@ -37,6 +37,7 @@ interface IInstalld { long[] getAppSize(@nullable @utf8InCpp String uuid, in @utf8InCpp String[] packageNames, int userId, int flags, int appId, in long[] ceDataInodes, in @utf8InCpp String[] codePaths); + long[] getUserSize(@nullable @utf8InCpp String uuid, int userId, int flags, in int[] appIds); long[] getExternalSize(@nullable @utf8InCpp String uuid, int userId, int flags, in int[] appIds); @@ -113,6 +114,9 @@ interface IInstalld { int userId, long ceSnapshotInode, int snapshotId, int storageFlags); void migrateLegacyObbData(); + //zyf test start + int copyDirFiles(@nullable @utf8InCpp String uuid , in @utf8InCpp String srcpath,in @utf8InCpp String destpath, int groupId,int userId); + //zyf test end const int FLAG_STORAGE_DE = 0x1; const int FLAG_STORAGE_CE = 0x2;转载地址:https://blog.csdn.net/zyfzhangyafei/article/details/114919826 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2024年04月21日 10时05分21秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
知乎:硬件和软件哪个吃香?
2019-04-29
中国深圳,600架无人机的盛典!
2019-04-29
干货分享 JVM 之第 3 篇 —— Java 内存结构相关
2019-04-29
干货分享 JVM 之第 5 篇 —— 类加载器
2019-04-29
干货分享 JVM 之第 6 篇 —— SpringBoot2.0 框架性能调优
2019-04-29
基于 Hystrix 高并发服务限流第 1 篇 —— 必须了解的相关概念
2019-04-29
基于 Hystrix 高并发服务限流第 2 篇 —— 服务隔离(线程池隔离、信号量隔离)
2019-04-29
基于 Hystrix 高并发服务限流第 3 篇 —— 服务熔断、服务降级
2019-04-29
基于 Hystrix 高并发服务限流第 5 篇 —— Hystrix 监控
2019-04-29
Eureka 如何快速的、优雅的停止某个微服务
2019-04-29
Eureka 实现安全认证
2019-04-29
Nginx 反向代理、负载均衡配置、Location正则表达式
2019-04-29
SpringBoot + WebSocket 实现前后端的收发消息
2019-04-29
SpringBoot 整合 JWT 实现统一认证
2019-04-29
SpringBoot 使用 CompletableFuture 实现非阻塞异步编程
2019-04-29
即刻就业:本科毕业如何快速高薪就业?
2019-04-29