想在android手机上安装两个相同的应用,本以为可以安装不同版本的,试了几次,均相互覆盖了,于是,只能设法修改apk所对应的包名(package name)。

目的声明:本文只是为了满足DIY的需要,并不是为了成为打包党,窃取别人的劳动成果,本文所涉及的工具也均为开源的,仅供学习交流之用。

DIY前提:在国内的论坛里,搜索了一下,找到了各种解包,打包的技术内容,以及各种汉化、去广告的帖子,但这个并不是本文的目的。以前见过打包党不仅修改了别人apk的广告用来获利,还将别人apk的包名修改了,所以有人早就实现了,但未能找到相关的技术文章,本文涉及的知识都还是比较浅显的,没有深入的研究底层原因,也参考了网上几个帖子。

这个问题解决完了,也很简单,至少我这个比较简单,我是想多安装几个QQ浏览器,基本过程如下:

1、将apk解包成一个文件夹

2、修改AndroidManifest.xml中对应的包名

3、修改smali目录下中的包

4、将文件夹打包成apk

5、将apk重新签名

6、验证apk的签名

7、优化apk

8、安装apk,并测试

基本前提条件:

1、java的环境

2、Eclipse及android的开发环境(这个主要是用来进行调试)

3、text文本编辑器,本人用的是UEdit,也可以用类似的,主要是利用其查找及替换功能

这篇文章主要用来反编译apk得到源码,但google进行了反制,只能得到一些可读性不高的源码,这里主要是利用反编译apk生成程序的源代码和图片、XML配置、语言资源等文件.

参考文献里提到的apktool-1.0.0.tar.bz2和apktool-install-windows-2.1_r01-1.zip均可以从网上下载,下载好之后,将涉及的命令行目录及exe目录添加到电脑的path路径中,这样就便于操作了,如检测apktool是否可以,可以在命令行中输入apktool,如果可以识别就表示OK了。

参考了国内的技术文章后,有人发帖以上面的思路进行操作,但没有发技术文章,所以笔者只能去国外论坛中逛逛了,在Stack Overflow中,找到了相关的帖子,有老外留言"you can't do this",这个的确有违技术道德,但这里只做学习参考或交流。找到了一片帖子,这篇帖子的回答给了比较详细的步骤(如上),他的情况比这个还稍微复杂点,简化后就是我要的结果,我就是按照这个基本步骤来的,回答的英文比较好懂(很有可能是国人)。

下面就按照上面的步骤一步步操作:我是已QQ浏览器4.0版的apk来操作的。

1、我的apktool安装到了E盘下的apktool目录下,所以的操作也在这个目录下进行 E:\apkTool

将apk复制到E:\apkTool目录下,重命名为qq4.0.apk(这个没有要求,随意就好)

将apk解包 命令行下cd到E:\apkTool这个目录 apktool d qq4.o.apk qq4 将apk解包到qq4(这个也可以随意)这个目录

2、修改AndroidManifest.xml中的包名,

将package后面的包名com.tencent.qbx改为你想要的新包名,我改为了com.tianxiao.tencentweb

将涉及原包名的com.tencent.qbx的相关activity的声明中的包名均改为新包名com.tianxiao.tencentweb

至于intent-filter里面的action名中包含原包名的,则可以不改,如果改的话,代码中也要相应的改变

另外,如果有provider,provider的authorities也得改,这个在同一手机上必须唯一,否则安装会失败

3、在E:\apkTool\qq4\smali目录下,有很多子目录,子目录下的文件多以smali结尾,这中文件的语法有点类似于汇编语言,具体原理就不深究了。

将smali目录下的所有文件中的原包名的声明形式com/tencent/qbx改为新包名com/tianxiao/tencentweb

具体如下,用UEdit在文件中替换即可,将目标目录指向E:\apkTool\qq4\smali,这个将近1000条左右

如果之前改为action里面的包名,也要将字符串形式的包名com.tencent.qbx改为com.tianxiao.tencentweb

如果有provider也要讲原来的authorities值改为在AndroidManifest.xml中新改的authorities值。

4、将E:\apkTool\qq4重新打包为apk

apktool b qq4 newqq.apk

5、将新的newqq.apk 重新签名

签名的方法很多,一主要是手动生成签名,用命令行签名

我采用的现成的,下载了一个Auto-sign的文件夹,进行了签名,这个比较简单,网上帖子很多,就不赘述。

新签名后的apk名为 newqq4signed.apk

6、验证签名 是否正确

jarsigner -verify -verbose -certs newqq4signed.apk

一般来说,没问题,略过

7、优化apk

zipalign -v 4 newqq4signed.apk latestqq.apk 优化过的apk名为latestqq.apk

8、安装新的apk,验证是否成功

这个最好把Eclipse打开,手机连上,查看logcat的安装信息。

我尝试了3次才成功,主要是忘了 provider的authorities的处理,

出错信息如下: Can't install because provider name qbx_bookmarks (in package com.tianxiao.tencentweb) is already used by com.tencent.qbx

原因很清楚,所以debug还是相当给力的,原来不喜欢debug,看debug过程可以更好的了解执行过程。

文章来源:http://www.163ns.com,转载请注明!

如何在Android手机上安装两个相同的应用相关推荐

  1. 安卓4安装Linux,如何在 Android 手机上安装 Ubuntu 13.04

    在农村,一切都是相对的. 长话短说,我已经厌倦了我们在农村做的一个小小的突破. 我本该去放松,读了一大堆东西涉及到自然语言的处理.但是因为我这些天一直在修改LXC和chroot的时候,我决定将我的An ...

  2. 如何在 Android 手机上实现抓包?

    如何在 Android 手机上实现抓包? http://www.zhihu.com/question/20467503 我想知道某个应用究竟在数据提交到哪里,提交了什么. 网上的教程太复杂,不想麻烦. ...

  3. 用Linux Deploy在Android手机上安装Linux

    每小时进行5分钟的活动,能降低患上许多致命疾病的风险.--<程序员健康指南> 简介 使用Linux Deploy唯一的好处就是可以充分利用废弃的手机,而且手机具有省电,便捷的特点.安装了L ...

  4. android手机进行android开发,如何在Android手机上进行自动化测试(上)

    版权声明:允许转载,但转载必须保留原链接:请勿用作商业或者非法用途 前言 通过阅读本节教程,你将了解到以下内容: 如何在脚本代码中.运行脚本时指定手机 如何填写--device Android:/// ...

  5. Android 手机上安装并运行 Ubuntu 12.04

    Android 手机上安装并运行 Ubuntu 12.04 2012 年 8 月 16 日  by  DawnDIY in  Android |  7 Comments Android 是基于Linu ...

  6. android h 游戏下载地址,Android h游戏_如何在Android手机上玩游戏

    最近人们喜欢在手机上玩游戏. 除了一些手机游戏(Android H游戏)之外安卓才可以玩的h,越来越多的朋友开始寻找Android手机游戏. 但是,有些人已经搜索了很长时间,还没有找到合适的游戏来玩. ...

  7. 小程序影藏溢出的gif_如何在Android手机上快速实现视频转GIF动图呢?

    毫无疑问,Android是目前使用最广泛的手机系统.GIF很有趣,并且比视频占用更少的存储容量.本文将向您介绍如何在Android手机上快速转GIF动图的多种方法. [官网]万兴优转 - 顶尖音视频格 ...

  8. csv短信回复到android,如何在Android手机上恢复已删除的短信?

    原标题:如何在Android手机上恢复已删除的短信? 文本消息在我们的交流中变得越来越重要.如果您丢失或意外删除了Android手机中的短信,该如何恢复呢?许多Android用户认为无法检索已删除的消 ...

  9. 如何在Android手机上进行Google Map的开发。

    1.题记 提起谷歌Map相信大家都不会陌生,那进入我们今天的话题,如何在Android手机上进行Google Map的开发. 2.Map应用程序的开发 2.1 准备工作 2.1.1 申请Android ...

最新文章

  1. window10 系统上 ecplise 环境搭建
  2. 基于 Nginx+lua+Memcache 实现灰度发布
  3. 判断一个where条件的对错php,sql – IN子查询的WHERE条件影响主查询 – 这是一个功能还是一个错误?...
  4. 【Android】动态更新Icon
  5. 最接近原点的 k 个点_第K个最接近原点的位置
  6. c语言cis,c语言小白学习历程第五篇
  7. 对于内向、不善于社交的人来说,如何建立人脉?
  8. SDN环境搭建(mininet,OVS,ryu安装及命令)
  9. qtqpixmap不出现图片_亚马逊对产品图片有哪些基本要求
  10. Pydev 的覆盖率测试python coverage以及其他使用
  11. 题解 P2146 【[NOI2015]软件包管理器】
  12. Linux c学习--进程基础学习
  13. Json API接口数据生成
  14. pip和pip3 换源
  15. PS 在线 圆角 矩形 图片 裁剪 生成
  16. 面试官:为什么选择做测试?我对测试特别感兴趣,我喜欢软件测试
  17. c语言中的inv是什么缩写,INV(inv是什么的缩写)
  18. MIUI9系统怎么卡刷开发版获取ROOT超级权限
  19. java coap_分布式项目(三)CoAp client and server
  20. HA+LVS 高可用集群

热门文章

  1. 是面试官放水,还是公司实在是太缺人?这都没挂,京东原来这么容易进...
  2. 机器学习之SVM(算法详细推导)
  3. 提交APP到三星应用市场一直提示不符合 Galaxy特色体验的类别条件
  4. Monitors是什么
  5. Vscode编辑器使用教程
  6. tp6实现(首页 某个分类下的列表 某个分类下的列表的id详情)接口开发
  7. 计算机专业同学综合自我评估,计算机专业学生的自我评价
  8. 访谈报告计算机辅导员,职业访谈の大学辅导员
  9. 5G基站需要隔多远建一个?
  10. 猫和老鼠手游如何用电脑玩 猫和老鼠PC电脑版玩法教程