目录
一、APKTool简介
APKTool是GOOGLE提供的APK编译工具,能够反编译及回编译apk,同时安装反编译系统apk所需要的framework-res框架,清理上次反编译文件夹等功能。需要java支持
二、APKTool安装
1.安装APKTool需要两个文件,分别是apktool和apktool.jar
apktool官方下载地址
apktool.jar下载地址
apptool官方下载地址可能由于网络原因下载失败,不过没关系其本质就是一个Unix可执行文件,我们可以自己创建一个
控制台进入你想要创建apktool的文件目录下通过命令行输入touch apktool会创建一个apktool文件
打开该文件后输入以下内容
#!/bin/bash
#
# Copyright (C) 2007 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# This script is a wrapper for smali.jar, so you can simply call "smali",
# instead of java -jar smali.jar. It is heavily based on the "dx" script
# from the Android SDK
# Set up prog to be the path of this script, including following symlinks,
# and set up progdir to be the fully-qualified pathname of its directory.
prog="$0"
while [ -h "${prog}" ]; do
newProg=`/bin/ls -ld "${prog}"`
newProg=`expr "${newProg}" : ".* -> \(.*\)$"`
if expr "x${newProg}" : 'x/' >/dev/null; then
prog="${newProg}"
else
progdir=`dirname "${prog}"`
prog="${progdir}/${newProg}"
fi
done
oldwd=`pwd`
progdir=`dirname "${prog}"`
cd "${progdir}"
progdir=`pwd`
prog="${progdir}"/`basename "${prog}"`
cd "${oldwd}"
jarfile=apktool.jar
libdir="$progdir"
if [ ! -r "$libdir/$jarfile" ]
then
echo `basename "$prog"`": can't find $jarfile"
exit 1
fi
javaOpts=""
# If you want DX to have more memory when executing, uncomment the following
# line and adjust the value accordingly. Use "java -X" for a list of options
# you can pass here.
#
javaOpts="-Xmx512M -Dfile.encoding=utf-8"
# Alternatively, this will extract any parameter "-Jxxx" from the command line
# and pass them to Java (instead of to dx). This makes it possible for you to
# add a command-line parameter such as "-JXmx256M" in your ant scripts, for
# example.
while expr "x$1" : 'x-J' >/dev/null; do
opt=`expr "$1" : '-J\(.*\)'`
javaOpts="${javaOpts} -${opt}"
shift
done
if [ "$OSTYPE" = "cygwin" ] ; then
jarpath=`cygpath -w "$libdir/$jarfile"`
else
jarpath="$libdir/$jarfile"
fi
# add current location to path for aapt
PATH=$PATH:`pwd`;
export PATH;
exec java $javaOpts -Djava.awt.headless=true -jar "$jarpath" "$@"
2.然后将apktool和apktool.jar都复制到/usr/local/bin目录下
复制命令参考如下
cp apktool.jar /usr/local/bin
cp apktool /usr/local/bin
3.复制好后进行安装
chmod +x /usr/local/bin apktool.jar apktool
4.安装完成后控制台输入apktool和apktool -version进行验证
三、反编译apk并修改版本号
在apk所在目录控制台输入下面指令,即可将文件名为source的apk反编译到outDir目录中
apktool d -o outDir source.apk
四、修改版本号
打开输入目录outDir找到apktool.yml文件,编辑修改versionCode
五、重新打包
通过以下命令就可以将目录outDir中的文件重新打包为no_sign_result.apk
apktool b -o no_sign_result.apk outDir
六、重新签名
使用如下命令进行签名
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore demostore.jks -signedjar result-signed.apk no_sign_result.apk yourkey
注:demostore.jks为签名文件、yourkey为签名的key、no_sign_result.apk为要签名的源文件、result-signed.apk为签名后的目标文件