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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了APK包名修改 请问如何修改APK包名相关的知识,希望对你有一定的参考价值。

参考技术A 基本过程如下:
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:\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过程可以更好的了解执行过程。

[uiautomator篇] 如何获取apk的包名 博客模板

Android自动化学习笔记:获取APK包名的几种方法

----------------------------------------------------------------------------------------------------------------------------

小记:自学过程中,经常需要用得到一个APK的包名,总结一下得到包名的几种方式。

**********************

2017-16-23:初版

 

**********************

------------------------------------------------------------------------------------------------------------------------------

我们主要用的是adb shell命令

方法1. 通过adb shell进入到手机data/data目录下,查看包名(需要root)

adb shell

cd data/data

ls

方法2. 通过adb shell的pm命令,查看包名(不需要root)

adb shell pm list package -f
还可以加上过滤信息
adb shell pm list package -f |findstr antutu

方法3. 代码形式获取:

package com.example.apppackages;  
  
import android.graphics.drawable.Drawable;  
  
public class AppPackageInfo {  
  
    public String appName="";  
    public String packageName="";  
    public String versionName="";  
    public int versionCode=0;  
    public Drawable appIcon=null;  
      
}
  1.  ArrayList<AppPackageInfo> appList = new ArrayList<AppPackageInfo>();   
  2.  List<PackageInfo> packages = getPackageManager().getInstalledPackages(0);  
  3.    
  4.  for(int i=0;i<packages.size();i++) {   
  5.  PackageInfo packageInfo = packages.get(i);   
  6.  AppPackageInfo tmpInfo = new AppPackageInfo();   
  7.  tmpInfo.appName = packageInfo.applicationInfo.loadLabel(getPackageManager()).toString();   
  8.  tmpInfo.packageName = packageInfo.packageName;   
  9.  tmpInfo.versionName = packageInfo.versionName;   
  10.  tmpInfo.versionCode = packageInfo.versionCode;   
  11.  tmpInfo.appIcon = packageInfo.applicationInfo.loadIcon(getPackageManager());  
  12.  appList.add(tmpInfo);  
  13.  Log.i("tag", tmpInfo.packageName);  
  14.    
  15. }
 

4 使用android/sdk 在SDK的build-tools目录下. 该工具可以查看, 创建, 更新ZIP格式的文档附件(zip, jar, apk)

aapt dump badging (apk path)|findstr package

  C:\\Users\\Administrator\\AppData\\Local\\Android\\Sdk\\build-tools\\25.0.3>aapt dump badging  E:\\uitest\\testcase\\CaseDemo\\testcase\\antutu\\Antutu3D.apk  | findstr package

 
 package: name=\'com.antutu.benchmark.full\' versionCode=\'6000302\' versionName=\'6.0
 .3\' platformBuildVersionName=\'6.0-2438415\'

 

 

以上是关于APK包名修改 请问如何修改APK包名的主要内容,如果未能解决你的问题,请参考以下文章

eclipse修改android项目的apk包名类名

android 怎么修改应用包名

请教如何使用android studio同时打包多个apk

怎么修改apk的应用名称

MyEclipse怎么修改包名

怎样更改vc++编辑器的语法高亮