由于工作中需要用到这些东西,自己琢磨了半天,将流程记录下来,文采不好,望见谅。
如果要修改AndroidManifest.xml,如果直接拿到原apk文件进行修改,想想就算了不可能滴。
要修改AndroidManifest.xml需要将原apk进行反编译,编译出来之后则可以修改。
反编译和回编译需要使用到的工具有:
1 、apktool 2.0 和 apktool-install-windows-r04-brut1.tar.bz2(两个包缺一不可啊)
2、签名apk文件需要用到jdk环境,所以前提先安装jdk。
签名文件需要用到keytool.exe和jarsigner.exe,这两个文件都在jdk的bin目录下:
步骤以及用到的一些指令:
将1中的两个包解压到同一个文件夹下,总共会有三个文件:aapt.exe,apktool.bat,apktool.jar
在命令行下定位到apktool.bat文件夹,输入以下命令:使用命令行apktool d -f
,如下图:
另外,可能会出现如下错误:
问题1:WARNING:Could not write to (C:\Users\****\AppData\Local\apktool\framework), using C:\Users\WBB53E~1.WAN\AppData\Local\Temp\ instead...
解决办法:在C:\Users\****\AppData\Local自己创建\apktool\framework这个文件夹即可;
问题2:
Exception in thread “main” java.lang.NullPointerException
解决办法:删除C:\Users\Administrator\apktool\framework\1.apk的apk文件即可
问题3:Exception in thread "main" brut.androlib.AndrolibException: Could not decode ars
c file
解决办法:apktool.jar的版本太低,如果使用高版本不会出现异常
反编译基本结束,然后你可以随心所欲修改里面的内容了,别改过分了
--------------------------------------------------------------------------------------------------------
开始回编译
特别注意:你要反编译的文件尽量要放在C盘的根目录里
使用命令行apktool b
打包apk后的文件在目录C:\HelloAndroid下,生成了两个文件夹:
build
dist
其中,打包生成的HelloAndroid.apk,在上面的dist文件夹下,回编译OK,但是你现在去安装回编译的apk是不行的,会显示安装包损坏,安装失败,因为没有签名。。。
--------------------------------------------------------------------------------------------------------------
在2中已经提到连个工具就是利用jdk环境签名apk文件,在jdk中的bin运行cmd,直接敲入:
keytool -genkey -alias key.keystore -keyalg RSA -validity 30000 -keystore key.keystore
命令解释:
Keytool 选项 描述
-genkey 产生一个键值对(公钥和私钥)
-v 允许动作输出
-alias 键的别名。只有前八位字符有效。
-keyalg 产生键的加密算法。支持DSA和RSA。
-keysize 产生键的长度。如果不支持,keytool用默认值1024 bits.通常我们用2048 bits 或更长的key。
-dname 专有名称,描述谁创建的密钥。该值被用作自签名证书的颁发者和主题字段。注意你可以不在命令行指定。如果没有指定keytool会提示你(CN,
OU, and so on)。
-keypass 键的密码。 主要为了安全起见,如果没提供,keytool会提示你输入。
-validity 键的有效期,单位:天
-keystore.keystore 用于存储私钥的文件。
-storepass 私钥存储文件的密码。 主要为了安全起见,如果没提供,keytool会提示你输入。这个密码不会存储在你的shell历史记录中。
回车后会让你输入一些东西,看着填就行了:
最后输入y确定。
在当前目录下回生成一个key.keystore文件,就是所需要的签名。
现在签名和apk已经有了,接下来就是要合并了,用到2中的另外一个工具:jarsigner
命令如下:
jarsigner -verbose -keystore key.keystore -signedjar (原apk).apk (目标apk名字).apk key.keystore
注意空格!
命令行解释:
Jarsigner 选项 描述
-keystore.keystore 包含你私钥的存储文件
-verbose 显示输出动作。
-sigalg 签名算法,用 SHA1withRSA.
-digestalg 消息摘要算法,用 SHA1.
-storepass 存储文件的密码。 主要为了安全起见,如果没提供,jarsigner会提示你输入。这个密码不会存储在你的shell历史记录中。
-keypass 私钥的密码。 主要为了安全起见,如果没提供,jarsigner会提示你输入。这个密码不会存储在你的shell历史记录中。
最后回车,输入之前设置的密码,回车,就签名完毕了:
OK,基本已经完工,修改后的apk就可以成功安装到设备上了。