APK反编译、修改、重打包、签名
1、反编译:
java -jar apktool_2.0.0.jar d TestSMSDemo.apk
默认反编译到TestSMSDemo文件夹下,apktool下载请点击这里
2、修改AndroidManifest.xml
<application android:icon="@drawable/icon" android:label="@string/app_name" android:name=".VideoApplication" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:uiOptions="splitActionBarWhenNarrow" android:debuggable="true"> <!-- 主要添加debuggable,为以后调试apk做准备-->
3、重新打包:
java -jar apktool_2.0.0.jar b TestSMSDemo(之前反编译生成的文件夹名,如果是out请写out)
默认会将文件重新打包到TestSMSDemo/dist目录下
4、签名:
1)生成keystore。可以使用命令行生成keystore,也可以使用Eclipse签名一个demo生成keystore,记住保存位置就好了。
-
使用命令行生成:
keytool -genkey -v -keystore mykeystore(可以任意名字) -alias linlin(别名,可以任意,但是在后面会用到这个别名,所以要记清楚) -keyalg RSA -validity 20000
然后根据提示输入需要的内容。
-
使用Eclipse生成就不用说了,签名apk的时候都用到,记住生成keystore保存位置。简单易行。
2)签名apk
jarsigner -verbose -keystore mykeystore -signedjar android_signed.apk(目标名字) TestSMSDemo.apk(要签名的apk) linlin(这个地方就是上面说要记住的别名 -alias,看有些例子上面这个地方字符串用‘ ’号引起来是错误的,直接写字符串就好了)
附:
() 里面是说明文字,在使用命令时请忽视
为了方便记忆可以将-alias和keystore的名字一致。如果-alias跟keystore名字不一致,又忘记了写的什么,可以使用Eclipse查看。具体方法就是打包程序,然后选择该keystore,输入密码后会自动显示alias的名字。如下图所示:
usage:apktool
-advance,--advanced prints advance information.
-version,--version prints the version then exits
usage: apktool if|install-framework [options] <framework.apk>
-p,--frame-path <dir> Stores framework files into <dir>.
-t,--tag <tag> Tag frameworks using <tag>.
usage: apktool d[ecode] [options] <file_apk>
-f,--force Force delete destination directory.
-o,--output <dir> The name of folder that gets written. Default is apk.out
-p,--frame-path <dir> Uses framework files located in <dir>.
-r,--no-res Do not decode resources.
-s,--no-src Do not decode sources.
-t,--frame-tag <tag> Uses framework files tagged by <tag>.
usage: apktool b[uild] [options] <app_path>
-f,--force-all Skip changes detection and build all files.
-o,--output <dir> The name of apk that gets written. Default is dist/name.apk
-p,--frame-path <dir> Uses framework files located in <dir>.
For additional info, see: http://code.google.com/p/android-apktool/
For smali/baksmali info, see: http://code.google.com/p/smali/ 用于Odex-dex后面说这个的使用
error:
jarsigner: 找不到xxx的证书链。xxx必须引用包含私有密钥和相应的公共 密钥证书链的有效密钥库密钥条目。
出现类型提示是因为alias没有填写正确。
使用aiqiyi客户端测试,重新打包签名后正常运行没问题。