安卓反编译后可以使用原签名签名吗

2025-02-23 13:19:37
推荐回答(1个)
回答1:

首先,了解一下为什么需要反编译apk 大部分情况下,是由于想本地化一款优秀的应用,才需要做这事儿;又或者进行少量的smali修改以达到想要的效果(如添加归属地,使3G版Nexus 7支持Wi-Fi热点)。 下面先准备运行环境和工具 建立工作目录,如.\workspace\apktoolbox (下面同样以此路径为例) 必不可少的JDK:Oracle Java下载,安装完成后把\bin添加到$PATH环境变量中 反编译和重编译工具apktool:Google Code下载,按平台下载(一个apktool-install---tar.bz2,一个apktool.tar.bz2,下载完成后解压至.\workspace\apktoolbox\bin 密钥文件,共4组。test/shared/media/platform,从android source中获取,分别对应不同共享用户ID时签名所需(查看应用AndroidManifest.xml第二行android:sharedUserId项 ),放到.\workspace\apktoolbox\bin下 test - 无android:sharedUserId项 shared - android:sharedUserId=android.uid.shared media - android:sharedUserId=android.uid.media platform - android:sharedUserId=android.uid.system 签名工具signapk.jar,放到.\workspace\apktoolbox\bin下 对齐优化工具zipalign(从android sdk中获取,在tools目录下),放到.\workspace\apktoolbox\bin下 准备工作完成 接下来就要开始工作了(以本地化工作为例) 把待反编译的apk放到.\workspace\apktoolbox\apks下 在命令行模式下进入.\workspace\apktoolbox\bin目录,输入以下命令进行解包(反编译) apktool d ..\apks\.apk ..\apks\ .\workspace\apktoolbox\apks\\res下的values目录(英文原版)和values-r目录(本地化)就是需要的对象。 本地化工作完成后,在命令行中输入以下命令进行重新打包(重新编译) apktool b ..\apks\ .\workspace\apktoolbox\apks\\dist目录下会生成重新打包后的apk(未签名,未对齐优化) 重新打包完成后,在命令行中输入以下命令进行签名(根据实际情况选用密钥,这里以test密钥为例) java -jar signapk.jar testkey.x509.pem testkey.pk8 ..\apks\\dist\.apk ..\apks\_signed.apk 签名完成后,在命令行中输入以下命令进行对齐优化 zipalign -f -v 4 ..\apks\_signed.apk ..\apks\_zipaligned.apk _zipaligned.apk就是最终需要的apk了。 完成 部分apk需要系统框架资源,没有的话在重新打包时会报错,这种情况下只需要先安装一下对应系统框架即可(从目标ROM中把/system/framework/framework-res.apk提取出,放到.\workspace\apktoolbox\apks下)。在命令行中输入以下命令进行安装 apktool if ..\apks\framework-res.apk