Loading... ## 0、缘起 换了台电脑竟然忘了怎么打包,还好有笔记,用软件打包也挺好,但是我感觉用 **命令行** 更有操作感,分享下。 ## 1、下载并配置apktool(放在C://Windows无需配置环境变量,需要java环境) [https://apktool.org/docs/install/](https://apktool.org/docs/install/) ![lou2cc67.png](http://flt-pan.58heshihu.com/blog/typecho/lou2cc67.png) 需要安装java环境的--> [https://www.cnblogs.com/qc-id-01/p/10396089.html](https://www.cnblogs.com/qc-id-01/p/10396089.html) ## 2、反编译:apktool d xx.apk ```java apktool d xx.apk ``` 反编译后会多出一个xx文件夹 ## 3、回编译:apktool b xx ```java apktool b xx ``` 回编译后的xx(文件夹)多出一个dist文件夹,文件夹下有不可安装的未签名的xx.apk ## 4、签名 ### 第一步生成签名文件: ```java keytool -genkey -keystore F:\code\apktool\dev.keystore -alias test -keyalg RSA -validity 10000 ``` **命令解释:** > Keytool 选项 描述 > -genkey 产生一个键值对(公钥和私钥) > -v 允许动作输出 > -alias 键的别名。只有前八位字符有效。 > -keyalg 产生键的加密算法。支持DSA和RSA。 > -keysize 产生键的长度。如果不支持,keytool用默认值1024 bits.通常我们用2048 bits 或更长的key。 > -dname 专有名称,描述谁创建的密钥。该值被用作自签名证书的颁发者和主题字段。注意你可以不在命令行指定。如果没有指定keytool会提示你(CN, > OU, and so on)。 > -keypass 键的密码。 主要为了安全起见,如果没提供,keytool会提示你输入。 > -validity 键的有效期,单位:天 > -keystore.keystore 用于存储私钥的文件。 ### 第二步为你的apk签名: ```java jarsigner -verbose -keystore F:\code\apktool\dev.keystore -signedjar F:\code\apktool\mytest\MD\dist\signatureMD.apk F:\code\apktool\mytest\MD\dist\MD.apk test ``` 命令分为 **3部分** : 第一部分:C:\Users\Administrator\Desktop\apktool\bm.keystore 你的签名文件地址。 第二部分:C:\Users\Administrator\Desktop\apktool\haha.apk 目标apk输出地址 第三部分:C:\Users\Administrator\Desktop\apktool\haha.apk bm 源apk地址 **例子:** jarsigner -verbose -keystore F:\code\apktool\dev.keystore -signedjar F:\code\apktool\mytest\game2_shennzhilu\signaturegame2_shennzhilu.apk F:\code\apktool\mytest\game2_shennzhilu\dist\game2_shennzhilu.apk test > PS:回编译时有两点需要注意,即回编译的文件夹名不能为中文和该文件夹下盘符内存是否足够,否则会报错。 最后修改:2023 年 11 月 11 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏