后期-打包、上架相关

Android打包

Android打包流程图

官网最新的图

Android打包流程图

Gradle 与 Android 构建入门

查看apk签名

  • 法一:

    使用JDK命令行工具查看,直接对比证书指纹。命令:keytool -printcert -v -file XXX.RSA

    其中xxx.RSA可通过:用压缩软件打开apk,找到META-INF下的CERT.RSA即可

  • 法二:

    用压缩软件打开apk,拷贝CERT.RSA到本地,更改后缀后为 CERT.p7b,在windows上直接打开(选中“证书”,选择右侧证书文件,打开证书文件看详细信息)

查看签名文件keystore的SHA1、MD5

AS自带的debug.keystore

  • MAC的:

    1. cd到jdk的bin目录下

      1
      cd /Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/bin
    2. 输入以下语句获取(密钥:android)

      1
      keytool -v -list -keystore /Users/xxx/.android/debug.keystore
  • Windows的:

    1. cd到jdk的bin目录下

      1
      2
      3
        cd C:\Program Files\Java\jdk1.7.0_79\bin

      cd D:\dev\AS\jbr\bin
    2. 输入以下语句获取(密钥:android)

      1
      keytool -v -list -keystore  C:\Users\Administrator\.android\debug.keystore
1
2
3
keytool -list -v -keystore XXX.keystore
keytool -printcert -jarfile XXX.apk
keytool -printcert -file CERT.RSA 【解压apk,拿到 META-INF/CERT.RSA

上面的命令行以前可以看MD5,现在只有SHA1、SHA256

去掉冒号的js代码:”CD:B0:3E:73:53:2B:C2:A2:54:5D:2E:75:67:74:BB:92”.replace(/:/g,””)

现在取MD5:

  1. 法一:AS右侧Gradle:Tasks>android>signingReport,双击

  2. 法二:单独取md5,使用腾讯工具【忘记包了】,有另外的apk:“MD5签名生成器

命令行生成数字签名文件

1
keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore

360打包分包流程

360加固助手(版本3.6.2.0(8341));

  • 基础设置:只勾选“签名校验”
  • 注意:一个账号一天只能用两次
  1. 在“应用加固”页面:对release包进行加固
  2. 在“工具包”》“渠道打包”:对加固后的包进行分渠道包
  3. 在“工具包”》“签名APK”:对各渠道包进行签名(选择V3

命令行签名

前提:要把%JAVA_HOME%\bin设置到环境变量

jarsigner -verbose -keystore 你的签名绝对路径 -signedjar 你要生成apk的绝对路径(一定要绝对路径) 你要签名的空白apk 你签名的别名(aire)。希望大家少走歪路,分分钟解决问题,【】

例如:

1
jarsigner -verbose -keystore D:\mykey\my.jks -signedjar D:\mykey\signed.apk D:\mykey\aaa\myunsign.apk abc

底下是我用乐固在线加固过的apk,再自己用命令行签名

1
jarsigner -verbose -keystore D:\code\xm597-master\app\597app.jks -signedjar D:\xm597.apk D:\f9925a3675189afe9420945239c3cbde.20211203094803.apk 597app

注意:jarsigner签名的是v1。要v2签名的话用apksigner

apksigner sign –ks (签名地址) –ks-key-alias (别名) –out (签名后的apk地址) (待签名apk地址)
例子:

1
apksigner sign --ks D:\pack\597app.jks --ks-key-alias 597App --out "597Combine6.1.0_a0064(148)_610_jiagu_signed.apk" "597Combine6.1.0_a0064(148)_610_jiagu.apk" 

上架

  1. 先注册,比较主流的应用市场有近20家
    1. 360手机助手
    2. 百度手机助手
    3. 腾讯应用宝
    4. 豌豆荚
    5. 小米开放平台
    6. 联想乐商店
    7. 搜狗手机助手
    8. OPPO应用商店
    9. 华为应用市场
    10. 魅族应用中心
    11. 三星应用商店
    12. 应用汇
    13. 机锋市场
    14. 乐视应用市场
    15. 联通沃商店
    16. 易用汇
    17. 木蚂蚁
    18. 优亿市场
    19. 冒泡堂
    20. N多网
    21. 锤子应用商店
    22. 海信应用商店
    23. 网易应用中心
    24. PC6安卓网
  2. 准备的材料
    1. APK文件、名称、版本号
    2. APP的简介200字左右
    3. 一句话简介20字以内
    4. 软件截图4-5张
    5. icp备案、软著、安全评估报告、资质文件等

软件著作权

https://register.ccopyright.com.cn/query.html

软件安全评估报告

https://app.caict.ac.cn/#/login?redirect=%2Fsystem%2Fdetection

加固

加固原理

so加固

https://github.com/upx/upx

加壳步骤:

  1. 增加init函数:cpp文件添加 void my_init(){}
  2. Android.mk文件添加:LOCAL_LDFLAGS += -WI,-init=my_init
  3. 将编译好的so拷贝到 upx-3.96-win64 文件夹中
  4. 用命令行进入 upx-3.96-win64 目录中
  5. 输入命令:upx --android-shlib 文件名称.so
  6. 加壳后的so会替换原有的so

脱壳

AS library生成jar包和aar的方法总结

打包问题

:app:transformClassesAndResourcesWithR8ForRelease

问题:AS打包卡在app:transformClassesAndResourcesWithR8ForRelease

卡在app:transformClassesAndResourcesWithR8ForRelease很长时间一直不能生成包,有时候产生java.lang.OutOfMemoryError: GC overhead limit exceeded错误。而且编译打包时偶尔会报Error:java.lang.OutOfMemoryError

解决(在 gradle.properties中添加):

1
2
3
4
5
6
7
8
9
10
11
# 编译时使用守护进程
org.gradle.daemon=true
#JVM 最大允许分配的堆内存,按需分配
org.gradle.jvmargs=-Xmx16896m -XX:MaxPermSize=4096m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
# 使用并行编译
org.gradle.parallel=true
org.gradle.configureondemand=true
#启用新一代Dex编译器D8
android.enableD8=true
#启用gradle缓存
org.gradle.caching=true

运行时报警告:

1
2
3
WARNING: The following project options are deprecated and have been removed:
android.enableAapt2
This property has no effect, AAPT2 is now always used.

解决方案:
移除gradle.propertiesandroid.enableAapt2=true