天天看点

MAC使用APKTool反编译apk修改版本号后重新打包

目录

一、APKTool简介

二、APKTool安装

三、反编译apk并修改版本号

四、修改版本号

五、重新打包

六、重新签名

一、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" "[email protected]"
           

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为签名后的目标文件