一、关于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,将:
package="mandarava.android"
改成:
package="mandaravb.android"
这样一改主要是为了让改版程序的包名与原版程序的包名不一致,android系统就会认为是二个程序,这样就可以同时安装原版和改版,实现“双开”。(改的时候注意只稍微改个字母就行了,不要用添加或删除字母的方式,这样特别是针对.so的二进制修改有好处)
3、编辑 SD2Flash\res\values\strings.xml,将:
<string name="app_name">SD2Flash</string>
改成:
<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文件,再比如程序有多个
包名的情况等等,我比较懒,我只抛砖引玉;我也不知道哪位想改阿里旺旺,我不去试了,如果你想改可以参考我这边的方法自己研究一下。不过我表示,这会挺麻
烦,改的时候要细心!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)