反编译

apktool d xxx.apk -o test
-f :如果目标文件夹已存在,则强制删除现有文件夹(默认如果目标文件夹已存在,则解码失败)
-o :指定解码目标文件夹的名称(默认使用 APK 文件的名字来命名目标文件夹)
-s :不反编译dex文件,也就是说 classes.dex 文件会被保留(默认会将 dex 文件解码成 smali 文件)
-r :不反编译资源文件,也就是说 resources.arsc 文件会被保留(默认会将 resources.arsc 解码成具体的资源文件)

如果出现Exception in thread "main" org.jf.dexlib2.dexbacked.DexBackedDexFile$NotADexFile: Not a valid dex magic value: cf 77 4c c7 9b 21 01 cd表示被加密,使用以下命令

apktool --only-main-classes d -f xxx.apk -o test

打包

apktool b test -o test.apk

生成签名文件

keytool -genkey -alias test -keyalg RSA -keysize 2048 -validity 36500 -keystore test.keystore
注意-alias参数alias为test

apk签名

apksigner sign -verbose --ks D:/xxx/test.keystore --v1-signing-enabled false --v2-signing-enabled true --ks-key-alias test --out D:/xxx/test.apk D:/xxx/test1.apk

apksigner在Android SDK/build-tools/版本号/

签名后安装异常

Exception occurred while executing 'install-incremental':
java.lang.IllegalArgumentException: Incremental installation not allowed.

使用zipalign对齐

zipalign -p -f -v 4 D:/xxx/test1.apk D:/xxx/output_unsigned.apk

然后重新签名安装