android一键换机功能实现,Android 手机克隆/一键换机原理初探

Android 手机克隆/一键换机原理初探

前言

最近换了一个表,错了换了一个手机。大家都知道换手机是一个很开心的事情,但是在换手机过程中原来手机App信息,多媒体信息等切换时一件很麻烦和耗时的事情。偶然发现手机自带了手机克隆功能,这个非常方便的解决了我们上述的痛点今天我们初步研究一下怎么实现上述的功能。

一. 具体实现

我们知道手机需要迁移的数据一般是多媒体和App数据,那么我们就分别从这两个方面入手。至于两个手机怎么建立WIFI连接和蓝牙连接这个不在本篇的考虑范围之内。

1.1 原理

手机克隆和一键换机的原理大概如下:

0a514141af65f0c8ee00d9787c110c5e.png

上面这两种方案都大同小异,主要都是将数据从旧的终端迁移到新的终端上面去。只是传输中介有点不一样。

1.2 迁移音视频数据

下面我们以第二种方案来说民给,这个比较简单,我们可以在旧手机端遍历多媒体数据库,然后建立网络连接将数据拷贝到新手机端,这样就完成了多媒体数据的迁移。

1.3 App及App数据的迁移

多媒体的迁移是比较简单的,有难度的是App以及App数据的迁移。下面我们以一个简单的例子来说明。就是我们久手机里面有一个应用叫做ServiceHost.ServiceHost的应用,需要将其迁移到另外一台手机。

前期准备:两台Android终端

1.3.1 旧的Android终端

需要将数据拷贝出来,可以执行如下脚本,当然这些脚本的功能,手机厂家一般会预置一个App和相关服务来执行实施。这段脚本的作用主要是将App和App的数据拷贝出来,大家只要理解了这个原理,就可以在App里面通过代码执行类似操作

adb root

adb remount

adb shell setenforce 0

:: 拷贝App

adb shell "tar cf /data/app/ServiceHost.ServiceHost-ZDfEk43pd0Efyd-118aF4A==.zip /data/app/ServiceHost.ServiceHost-ZDfEk43pd0Efyd-118aF4A=="

adb pull /data/app/ServiceHost.ServiceHost-ZDfEk43pd0Efyd-118aF4A==.zip

:: 拷贝App数据

adb shell "tar cf /data/data/ServiceHost.ServiceHost.zip /data/data/ServiceHost.ServiceHost"

adb pull /data/data/ServiceHost.ServiceHost.zip

pause

运行脚本:

C:\Users\XXX\>adb root

adbd is already running as root

C:\Users\XXX\>adb remount

remount succeeded

C:\Users\XXX\>adb shell setenforce 0

C:\Users\XXX\>adb shell "tar cf /data/app/ServiceHost.ServiceHost-ZDfEk43pd0Efyd-118aF4A==.zip /data/app/ServiceHost.ServiceHost-ZDfEk43pd0Efyd-118aF4A=="

removing leading '/' from member names

C:\Users\XXX\>adb pull /data/app/ServiceHost.ServiceHost-ZDfEk43pd0Efyd-118aF4A==.zip

8362 KB/s (99507712 bytes in 11.620s)

C:\Users\XXX\>adb shell "tar cf /data/data/ServiceHost.ServiceHost.zip /data/data/ServiceHost.ServiceHost"

removing leading '/' from member names

C:\Users\XXX\>adb pull /data/data/ServiceHost.ServiceHost.zip

8421 KB/s (110715904 bytes in 12.838s)

C:\Users\XXX\>>pause

请按任意键继续. . .

执行结果:

168ea4951b8d78039ba36c4ac99b28db.png

1.3.2 旧的Android终端新的Android终端

这里需要是执行应用安装和数据的拷贝,这个只是一个演示脚本,可以通过App内执行类似代码片段进而执行。

adb remount

adb shell setenforce 0

adb push ServiceHost.ServiceHost-CZtGOt1HDc-lSyYEWeVbbg==.zip /data/app/

adb shell " cd /data/app/ && tar xf ServiceHost.ServiceHost-CZtGOt1HDc-lSyYEWeVbbg==.zip ServiceHost.ServiceHost-CZtGOt1HDc-lSyYEWeVbbg== "

adb shell " chmod 777 -R /data/app/ServiceHost.ServiceHost-CZtGOt1HDc-lSyYEWeVbbg== "

adb shell " pm install -r /data/app/ServiceHost.ServiceHost-CZtGOt1HDc-lSyYEWeVbbg==/base.apk "

adb push ServiceHost.ServiceHost.zip /data/data/

adb shell " cd /data/data && tar xf ServiceHost.ServiceHost.zip ServiceHost.ServiceHost "

adb shell " chmod 777 -R /data/data/ServiceHost.ServiceHost "

adb shell sync

adb shell stop zygote

adb shell start zygote

ping -n 50 127.0.0.1>nul

adb shell am start -n ServiceHost.ServiceHost/md5bd7813ef94204169d60c7bafe7bcc17a.ServiceHostView

pause

运行脚本:

C:\Users\XXX\>adb remount

remount succeeded

C:\Users\XXX\>>adb shell setenforce 0

C:\Users\XXX\>>adb push ServiceHost.ServiceHost-CZtGOt1HDc-lSyYEWeVbbg==.zip /data/app/

7063 KB/s (99532800 bytes in 13.760s)

C:\Users\XXX\>>adb shell " cd /data/app/ && tar xf ServiceHost.ServiceHost-CZtGOt1HDc-lSyYEWeVbbg==.zip ServiceHost.ServiceHost-CZtGOt1HDc-lSyYEWeVbbg== "

C:\Users\XXX\>>adb shell " chmod 777 -R /data/app/ServiceHost.ServiceHost-CZtGOt1HDc-lSyYEWeVbbg== "

C:\Users\XXX\>>adb shell " pm install -r /data/app/ServiceHost.ServiceHost-CZtGOt1HDc-lSyYEWeVbbg==/base.apk "

Error: Could not access the Package Manager. Is the system running?

C:\Users\XXX\>>adb push ServiceHost.ServiceHost.zip /data/data/

7298 KB/s (103127040 bytes in 13.798s)

C:\Users\XXX\>>adb shell " cd /data/data && tar xf ServiceHost.ServiceHost.zip ServiceHost.ServiceHost "

C:\Users\XXX\>>adb shell " chmod 777 -R /data/data/ServiceHost.ServiceHost "

C:\Users\XXX\>>adb shell sync

C:\Users\XXX\>>adb shell stop zygote

C:\Users\XXX\>>adb shell start zygote

C:\Users\XXX\>>ping -n 50 127.0.0.1 1>nul

执行结果:

235debfe42fe3e5fb512aaf2df713675.png

1.3.3 原理分析

好了,下面我么分析一下原理,主要是将旧终端的App应用数据拷贝出来,然后安装到新的终端下面从而完成App已经App数据的迁移。大家get到了吗。

总结

关于手机克隆,现在来总结一下:

对于多媒体的拷贝比较简单,主要是通过遍历多媒体数据库然后将遍历的资源从久的Android终端拷贝到新的Android终端即可。

对于App的克隆过程要复杂一点,需要将/data/app下面的App应用拷贝,并且需要将/data/data下面的App数据也进行相关的拷贝。

写在最后

本篇只是一个大概的原理讲解,如果真的要实现可能会有其它的问题。但是原理有了,我相信实现起来至少有了思路了,最终的实现只是时间问题了。

本文分享 CSDN - IT先森。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值