Android-编译、打包、安装
Android-编译、打包、安装
编译
6. MultiDex
(1)为什么方法数不能超过 65535?
Android 编译时会将字节码生成 Dex 文件,而用于优化 Dex 的工具 DexOpt 会给每个方法编号检索,但是编号用的是 short,只有 2 字节,所以最高只能表示 2^16 - 1 = 65535
(2)方法数超 65535 怎么办?
使用 MultiDex,将不同类和不同方法编译到不同的 Dex 中,保证每一个 Dex 中的方法数小于 65535。
(3)MultiDex 是哪个版本开始支持的?之前的版本不支持,如何加载 Dex 文件?
混淆
APK手动签名
- 手动签名可使用第三方工具,或使用 API >= 25 的 Build-Tools 中提供的
apksigner.jar
- 手动签名可使用第三方工具,或使用 API >= 25 的 Build-Tools 中提供的
apksigner.jar
在SDK/build-tools/XX.XX.XX(Build-Tools版本号)/lib/apksigner.jar
,可复制到自定义路径下使用。需要确保apksigner.jar
有执行权限:sudo chmod a+x apksigner.jar
- 签名需要 jks 格式的 Keystore,可通过 AndroidStudio 创建,注意保存 Store 密码、Key Alias、Key 密码
- 假设
apksigner.jar
和未前面的Source.apk
以及Key.jks(假设信息为:StorePassword: password, Alias: KeyAlias, KeyPassword: password2)
均在:/Demo/
下,且签名后输出在同一目录下的:Signed.apk
- 假设
- 签名:
java -jar apksigner.jar sign --ks Demo/Key.jks --ks-key-alias KeyAlias --ks-pass pass:password --key-pass pass:password2 --out /Demo/Signed.apk /Demo/Source.apk
- 签名:
- 检查签名:
java -jar apksigner.jar verify -v Signed.apk
- 检查签名:
- 执行后会列出 3 种签名的状态,后面为 false 则表示对应项未签名,并且可能会有一些 WARNING:
1 | Verifies |
生成APKKey
https://my.oschina.net/lijindou/blog/726169