APK包名修改 请问如何修改APK包名

快乐的夜班出租

快乐的夜班出租

2016-02-19 11:24

在这个颜值当道,屌丝闪边的时代,拼不过颜值拼内涵,只有知识丰富才能提升一个人的内在气质和修养,所谓人丑就要多学习,今天图老师给大家分享APK包名修改 请问如何修改APK包名,希望可以对大家能有小小的帮助。

今天,想在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/questions/9218641/renaming-the-package-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:apkToolqq4这个目录下内容如下:

     

2、修改AndroidManifest.xml中的包名

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

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

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

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

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

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

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

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

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

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

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

4、将E:apkToolqq4重新打包为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个,预期目标达到了。

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

展开更多 50%)
分享

猜你喜欢

APK包名修改 请问如何修改APK包名

编程语言 网络编程
APK包名修改 请问如何修改APK包名

如何修改微信备注名?

手机软件 应用软件
如何修改微信备注名?

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

阿里旺旺如何修改显示名

电脑网络
阿里旺旺如何修改显示名

如何批量修改文件名

电脑 电脑入门
如何批量修改文件名

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

怎样修改QQ空间名

电脑入门
怎样修改QQ空间名

派派怎么修改备注名

手机软件 应用软件
派派怎么修改备注名

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Win10下WP恢复工具无法安装解决办法

Win10下WP恢复工具无法安装解决办法

Win10正式版七个不可忽略的缺点bug汇总

Win10正式版七个不可忽略的缺点bug汇总
下拉加载更多内容 ↓