关于apk程序的双开

所谓技术参观,指写给技术玩家观看和互相交流的文章。本文是关于同一个apk程序实现“双开”(实际是伪双开)的一些想法和实现。

一、关于apk程序的双开

  今天查邮件看到有人发邮件问我android下的阿里旺旺怎么双开。经过我的中外查证,貌视同个apk程序没有办法运行多个实例,也就是同一个程序不能实现双开;同时同个程序也不能被安装二次,更进一步扼杀了双开的可能。于是那我唯一能想到的是:改apk,让android系统认不出原版和改版是同一个程序。那么关键在哪里?android又是凭什么说这二个程序是相同的或不同的呢?网上一找无果。不过,以前捣鼓的时候有注意一个问题,在 /data/data 文件夹下,这个地方会存在安装的程序数据,每个文件夹是这个程序的包名,换句话说,android之所以能区分二个程序是不是相同或不同就是看它们的包名(PS:包是java中的一个编程概念)。

  按照这种思路,要实现同一个apk程序的“双开”,我们可以把原程序的“包”给它改一下。比如,原包是com.z4mod.z4root 是z4root程序的包名,那我们就把它改成 net.z4mod.z4root 这样原版和改版就不在同一个包下了,android就会认为它俩可没关系,是二个程序,这样就能同时安装这二个程序,就能同时运行,就能实现“双开”(这种当然只能算是伪双开)。

  好吧,下面我就用我刚发布的 SD2Flash.apk 来演示这个“双开”功能(至于你想挂多个QQ、旺旺,我表示我不会再去深入研究“双开”的问题,参考我这篇文章或许会有点启发)。先帖个图吧。

 
  有人说了,你这二个SD2Flash名字都不一样,不会是写了二个程序来晃点人吧?这个我表示绝对不是,这个任务名称也可以直接改,不过单改这种名称是实现不了“双开”的。详细修改教程参考下文。

二、修改过程(仅供参考)

  这里用我的SD2Flash作为修改源,这个程序比较简单,不过万丈高楼平地起,我这个人又懒,我就在这里只打个地基了,其它程序可能会复杂点,比如包含多个包,那改起来有够麻烦的:

  (同样的不厚道,同样的只请技术玩家观看)

1、用Apktool反编译SD2Flash.apk,假设得到反编译目录 SD2Flash 
2、编辑 SD2Flash\AndroidManifest.xml,将:
  1. package="mandarava.android"
复制代码

改成:
  1. package="mandaravb.android"
复制代码

这样一改主要是为了让改版程序的包名与原版程序的包名不一致,android系统就会认为是二个程序,这样就可以同时安装原版和改版,实现“双开”。(改的时候注意只稍微改个字母就行了,不要用添加或删除字母的方式,这样特别是针对.so的二进制修改有好处) 
3、编辑 SD2Flash\res\values\strings.xml,将:
  1. <string name="app_name">SD2Flash</string>
复制代码

改成:
  1. <string name="app_name">SD2Flash2</string>
复制代码

这个是改程序名称。这样一改主要是为了让改版创建的桌面图标不会覆盖原版,因为如果快捷图标的名称相同后装的会覆盖先装的。 

4、接下来要将smali中所有包含有“mandarava/android/”的路径全部改成“mandaravb/android/”,这样与前面的改后的包名“mandaravb.android”相对应。这个用查找替换的方式,可以使用apk改之理快速替换。  
另外,有些时候源代码文件中还会出现类似 mandarava.android 的包名情况,这些也要注意修改得与 mandaravb.android 一致。不过,SD2Flash 没这么复杂,没有这种情况;还有是有些程序带有.so文件的,如果也出现包关联的话,也要注意修改。 

5、最后将 SD2Flash\mandarava 文件夹改名为:mandaravb ,这样与包名“mandaravb.android”也是保持一致。 
改完成之后编译签名安装,会在桌面生成SD2Flash、SD2Flash2二个快捷图标,分别运行它们就可以实现伪“双开”。

  我用的这个示例apk程序是很简单的,所以改起来没什么麻烦,不过如果其它的程序可能会遇到其它更多情况,比如可能包含.so文件,再比如程序有多个包名的情况等等,我比较懒,我只抛砖引玉;我也不知道哪位想改阿里旺旺,我不去试了,如果你想改可以参考我这边的方法自己研究一下。不过我表示,这会挺麻烦,改的时候要细心!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值