Android双系统实现

1. 前言:

 

刷机,似乎是安卓手机用户的一项专利,但是,会刷机的用户一般都是喜新厌旧的角色,

 

一个系统用久了,就想换到另一个系统,或者觉得没有原来的好,或者又觉得要换回去,这样又要重刷。

 

但是刷来刷去都麻烦啊,并且每次刷机也不是没有风险的,一不小心就可能造成重要数据的丢失。

 

没有解决办法吗?有!双系统!甚至三系统,四系统!!

 

本文就是解决这个问题的,并且用本文中的方法,完全可以实现一键安装,一键卸载系统的功能,把系统的安装和卸载变成apk的安装和卸载一样简单。

 

(说明下,下面的方法以三星i93xx系列的手机为例的)

 

2. 先来简单介绍下安卓系统的启动过程:

 

在手机上电时,最先执行的集成到CPU芯片上的一段rom里的程序

 

这段程序负责加载nand flash或者sd卡上的引导程序,引导程序一般来讲都是uboot

 

uboot会完成一些设备的初始化,这里很重要的部分就是nand flash,以便将linux内核加载读到内存里并运行。

 

加载的内核根据情况,有可能是boot分区里的内核,也有可能是recovery分区里的内核。

 

内核跑起来之后,首先会挂载ramdisk到"/"根目录,然后执行/init创建第一个进程

 

init读取/init.rc,进行进一步的初始化,完成如创建目录,设置权限,挂载data,system,cache分区,启动一系列的service,包括重要的zygote进程

 

zygote进程又会创建system_server进程以完成进一步的初始化工作,并加载一系列的apk进程。

 

3. 接下来看下,一个安卓系统所需的分区:

 

一个uboot分区,负责引导内核

 

一个内核分区

 

一个system分区,用于存放安卓的系统程序和文件

 

一个data分区,用于存放系统的数据,apk程序,以及apk程序的数据等等。

 

一个cache分区,一般用于升级之用,用于保存ota升级包,升级日志等等。

 

4. 再按下来看下双系统的实现方案:

 

4.1 内核的引导问题

这是一个比较头痛的问题,上面讲到,内核是由uboot通过boot分区或者recovery分区加载进来的

如果还要加载其它分区的内核,就要考虑修改uboot的配置参数或者代码了

uboot的代码我们肯定是没有 的,

虽然一般来讲uboot的配置参数往往也是保存在某个分区里的,但一般都是加密的,所以也改不了。

所以我们只能考虑利用己有的分区了。

最简单的方法就是覆盖boot分区,将第二个安卓的boot.img写到boot分区,

然后写一个apk,当要启动哪个系统时,就把哪个系统的boot.img写到boot分区。

这种方式的缺点是切换麻烦,每次切换都要先启动其中的一个系统,然后运行apk进行切换。

然后,我们把贪婪的目光瞄向了recovery分区。 

大家知道,recovery分区一般在系统升级或者恢复出厂设置的时候才会用到,所以我们考虑对recovery分区进行下手。

最简单的方法是把第二个安卓系统boot.img放到recovery分区里,这样可以实现触发进recovery来引导第二个安卓系统了。 

当然,也可以在recovery分区里再放一个定制的uboot,从而实现更加灵活的加载方式,如可以显示引导菜单等等,再如从SD卡里加载内核等等。

但是这还是要有uboot的源码才行。

当然,在使用recovery分区之前,要对recovery分区作下备份。

使用recovery分区作为第二个系统的linux引导分区还有个好处就是一般手机都有开机进recovery的快捷键,

如三星的手机一般是在开机时同时按下:音量加,HOME,POWER三个按键就可以进recovery.

从而实现方便的系统切换。

 

4.2 system,data分区的创建问题:

 

解决了引导的问题,再来看下system和data分区的创建问题。

 

因为cache分区只在升级的时候会用到,所以两个系统可以共用,不用再创建了。

 

1)重新分区法:

也就是为每个系统建立不同的分区,这种方法需要对存储空间进行重新划分,显然比较麻烦,风险也比较高,可行性比较低。

2)使用虚拟磁盘的方案 

大家一定对ubuntu能够在windows下直接安装的方式印象十分深刻

实际上ubuntu能够在不重新分区的情况下实现安装真是利用的虚拟磁盘实现的。

相对于第一种方案,避免了重新分区的麻烦。

虚拟磁盘是linux下很早内核就已经支持了,是很成熟的技术了。

所以这里虚拟磁盘是最好的选择,并且借助于虚拟磁盘,我们不仅可以实现双系统,还可以实现三系统,四系统,这完全取决于存储空间。

 

5. 理论讲清楚了,接下来,看下具体如何干吧。 

首先,我们要创建一个system虚拟磁盘,这里有两种方法:

 

一种是从img直接生成虚拟磁盘,另一种方法是要将一个ota升级包中的system分区写到虚拟磁盘中。

 

第一种方法比较简单,只要执行一条命令即可:

 

simg2img system.img system.disk

  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
要在Android系统上实现通话双向录音,需要对系统进行root,然后使用合适的应用程序来记录通话。下面是一种常见的方法: 首先需要root手机。Root是一种获取管理员权限的过程,它允许您对系统进行更深入的操作。root手机的步骤因不同手机品牌和型号而异,您可以在互联网上找到相关教程。 当手机完成root后,可以在Google Play商店或其他安卓应用市场中搜索并下载适合的通话录音应用程序。有很多免费和付费的应用可供选择,例如“自动录音机”、“通话录音”等。 安装和打开所选择的应用后,您需要为应用授予电话和麦克风权限。这通常在应用初次运行时或在设置中完成。 一些录音应用在录音开始前会要求您开启“扬声器”模式。这是因为通话录音需要通过扬声器和麦克风进行录制。打开扬声器模式后,您的对话将通过扬声器播放并被麦克风录制。 接下来,您可以根据应用的说明或设置自定义录音格式、保存位置和其他选项。有些应用也提供了自动录音、通话筛选和其他高级功能。 完成设置后,您可以打开通话录音应用,并在通话开始时点击“录音”按钮或根据应用的设置自动开始录音。 需要注意的是,通话录音的合法性因地区而异。在某些地方,未经通话方的明确同意,录制通话可能是非法的。在使用通话录音应用前,请确保了解当地的法律规定,并且始终确保在合法和道德的方式下使用该功能。 对于非root手机,实现通话双向录音较为困难,因为这需要访问系统级别的权限。一些应用声称可以在非root手机上实现通话录音,但它们的功能和兼容性不如root手机。因此,如果您需要稳定和可靠的通话录音功能,建议进行root处理。 总之,要在Android系统上实现通话双向录音,需要root手机,下载并安装适当的通话录音应用程序,授予所需权限,并按照应用的设置进行录音。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值