Android打包
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的:
cd到jdk的bin目录下
1
cd /Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/bin
输入以下语句获取(密钥:android)
1
keytool -v -list -keystore /Users/xxx/.android/debug.keystore
Windows的:
cd到jdk的bin目录下
1
2
3cd C:\Program Files\Java\jdk1.7.0_79\bin
cd D:\dev\AS\jbr\bin输入以下语句获取(密钥:android)
1
keytool -v -list -keystore C:\Users\Administrator\.android\debug.keystore
1 | keytool -list -v -keystore XXX.keystore |
上面的命令行以前可以看MD5,现在只有SHA1、SHA256
去掉冒号的js代码:
"CD:B0:3E:73:53:2B:C2:A2:54:5D:2E:75:67:74:BB:92".replace(/\:/g,"")
【新版Chrome不让用了。那就直接用文本的全局替换】
现在取MD5:【AS配置的jdk11生成的签名文件】
- 法一:AS右侧
Gradle:Tasks>android>signingReport
,双击
【报Algorithm HmacPBESHA256 not available,只更改AS的jdk为自带的jbr路径(jdk17)】 - 法二:单独取md5,使用腾讯工具【忘记包了】,有另外的apk:“MD5签名生成器”
【报Algorithm HmacPBESHA256 not available,更改环境变量为AS的jbr路径】
命令行生成数字签名文件
1 | keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore |
360打包分包流程
360加固助手(版本3.6.2.0(8341));
- 基础设置:只勾选“签名校验”
- 注意:一个账号一天只能用两次
- 在“应用加固”页面:对release包进行加固
- 在“工具包”》“渠道打包”:对加固后的包进行分渠道包
- 在“工具包”》“签名APK”:对各渠道包进行签名(选择V3)
多渠道分包:GitHub - mcxiaoke/packer-ng-plugin: 下一代Android打包工具(对Gradle 7.x的支持,欢迎提PR),对加固过未签名的apk进行多渠道分包
命令行签名
前提:要把%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" |
上架
- 先注册,比较主流的应用市场有近20家
- 360手机助手
- 百度手机助手
- 腾讯应用宝
- 豌豆荚
- 小米开放平台
- 联想乐商店
- 搜狗手机助手
- OPPO应用商店
- 华为应用市场
- 魅族应用中心
- 三星应用商店
- 应用汇
- 机锋市场
- 乐视应用市场
- 联通沃商店
- 易用汇
- 木蚂蚁
- 优亿市场
- 冒泡堂
- N多网
- 锤子应用商店
- 海信应用商店
- 网易应用中心
- PC6安卓网
- 准备的材料
- APK文件、名称、版本号
- APP的简介200字左右
- 一句话简介20字以内
- 软件截图4-5张
- icp备案、软著、安全评估报告、资质文件等
软件著作权
https://register.ccopyright.com.cn/query.html
软件安全评估报告
https://app.caict.ac.cn/#/login?redirect=%2Fsystem%2Fdetection
加固
so加固
加壳步骤:
- 增加init函数:
cpp
文件添加void my_init(){}
Android.mk
文件添加:LOCAL_LDFLAGS += -WI,-init=my_init
- 将编译好的
so
拷贝到upx-3.96-win64
文件夹中 - 用命令行进入
upx-3.96-win64
目录中 - 输入命令:
upx --android-shlib 文件名称.so
- 加壳后的
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 | # 编译时使用守护进程 |
运行时报警告:
1 | WARNING: The following project options are deprecated and have been removed: |
解决方案:
移除gradle.properties
中android.enableAapt2=true