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手动签名

    1. 手动签名可使用第三方工具,或使用 API >= 25 的 Build-Tools 中提供的 apksigner.jar
    1. apksigner.jarSDK/build-tools/XX.XX.XX(Build-Tools版本号)/lib/apksigner.jar,可复制到自定义路径下使用。需要确保 apksigner.jar 有执行权限:sudo chmod a+x apksigner.jar
    1. 签名需要 jks 格式的 Keystore,可通过 AndroidStudio 创建,注意保存 Store 密码、Key Alias、Key 密码
    1. 假设 apksigner.jar 和未前面的 Source.apk 以及 Key.jks(假设信息为:StorePassword: password, Alias: KeyAlias, KeyPassword: password2)均在:/Demo/ 下,且签名后输出在同一目录下的:Signed.apk
    1. 签名: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
    1. 检查签名:java -jar apksigner.jar verify -v Signed.apk
    1. 执行后会列出 3 种签名的状态,后面为 false 则表示对应项未签名,并且可能会有一些 WARNING:
1
2
3
4
Verifies
Verified using v1 scheme (JAR signing): true
Verified using v2 scheme (APK Signature Scheme v2): true
Verified using v3 scheme (APK Signature Scheme v3): true

生成APKKey

https://my.oschina.net/lijindou/blog/726169


APK加固


参考文献