飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 5191|回复: 9

[Android] 『 转载 』apk的包名修改

[复制链接]

该用户从未签到

发表于 2015-1-31 11:07:19 | 显示全部楼层 |阅读模式
欢迎转载,同时请附上原文链接:http://www.cnblogs.com/tianxiaoz ... k_package_name.html

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

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

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

  PS:在国内论坛上,找一篇原创的帖子很难,基本都是转载的,还不附原文链接,引入了的很多错误,想找到原文都很难,真是很悲剧。国内论坛里,热心人还是少了点,很多问题都死了,无人回答,笔者尝试在CSDN、ITEYE、EOE发过几个帖子,但很少能解决问题,于是只能求助于国外论坛,这也是一个悲剧。

  这个问题解决完了,也很简单,至少我这个比较简单,我是想多安装几个QQ浏览器(有IT屌丝安装了10个微信的,这个我表示很汗),基本过程如下:

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均可以从http//code.google.com/p/android-apktool/上下载,下载好之后,将涉及的命令行目录及exe目录添加到电脑的path路径中,这样就便于操作了,如检测apktool是否可以,可以在命令行中输入apktool,如果可以识别就表示OK了。

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

  下面就按照上面的步骤一步步操作:我是已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(这个也可以随意)这个目录

     E:\apkTool\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过程可以更好的了解执行过程。



  在进行了测试后,笔者有多次重复了2-8这几个步骤,共得到了4个新的apk,安装后的结果如下图:



  如图,QQ4.0的浏览器,原装的装了一个,重新打包的有4个,预期目标达到了。

      本次尝试成功了,花了不少时间查资料,基本原理相当的清楚,本文中笔者尽可能不产生歧义,欢迎各位交流和批评。

  欢迎转载,同时请附上原文链接:http://www.cnblogs.com/tianxiaoz ... k_package_name.html
PYG19周年生日快乐!
  • TA的每日心情
    开心
    5 小时前
  • 签到天数: 959 天

    [LV.10]以坛为家III

    发表于 2015-1-31 14:31:12 | 显示全部楼层

    感谢楼主分享!
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2024-4-13 20:08
  • 签到天数: 2046 天

    [LV.Master]伴坛终老

    发表于 2015-1-31 17:13:10 | 显示全部楼层
    看上去好复杂呀。。。。还是谢谢分享呀。。。。。
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2019-3-17 22:44
  • 签到天数: 132 天

    [LV.7]常住居民III

    发表于 2015-1-31 20:10:19 | 显示全部楼层
    本帖最后由 tree_fly 于 2015-1-31 20:59 编辑

    楼主热心发帖,辛苦了。 关于多开APP这个问题,安卓好像有个更直接的解决方案,在不修改安装包情况下多开程序。网络上有人做到这点了。
    但是不清楚他实现的原理。我搜索时发现。这里可以看看,http://www.xunzai.com/android/zixun/5271.html
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2021-7-17 13:00
  • 签到天数: 975 天

    [LV.10]以坛为家III

    发表于 2015-1-31 22:38:45 | 显示全部楼层
    感谢分享了,支持楼主
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-3-18 10:12
  • 签到天数: 66 天

    [LV.6]常住居民II

    发表于 2015-2-1 15:47:22 | 显示全部楼层
    非常感谢楼主的分享{:soso_e113:}
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-3-22 23:57
  • 签到天数: 174 天

    [LV.7]常住居民III

    发表于 2019-2-28 17:06:56 | 显示全部楼层
    感谢楼主分享,学习了~
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-6-4 08:49
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2019-6-8 14:54:48 | 显示全部楼层
    非常感谢楼主的分享
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2024-4-1 10:55
  • 签到天数: 280 天

    [LV.8]以坛为家I

    发表于 2020-5-1 15:20:51 | 显示全部楼层
    王者荣耀摇身一变,变成了学习软件
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表