HBuilderX打包apk,加固并重新加签

993 阅读5分钟

1、apk安卓打包

  • 打包前需要修改文件

constants.js

//访问接口URL,正式环境
const BASE_URL = "http://www.llsydn.com"

1.1、HBuilderX打包

工具栏:

发行-->原生App-云打包(P)

image.png

包名:com.llsydn.pro

证书别名:llsydn

证书密码:111111

证书文件:D:/llsydn.keystore文件

打包成功后的apk在这个目录下面:

image.png

1.2、llsydn证书制作

Android平台打包发布apk应用,需要使用数字证书(.keystore文件)进行签名,用于表明开发者身份。

可以使用JRE环境中的keytool命令生成。以下是windows平台生成证书的方法:

  • 安装JRE(JAVA)环境(推荐使用JRE8环境,如已有可跳过)

这里就不做过多说明,可参考:JAVA环境变量配置

  • 生成签名证书

使用keytool -genkey命令生成证书:

keytool -genkey -alias llsydn -keyalg RSA -keysize 2048 -validity 36500 -keystore llsydn.keystore

-alias llsydn:是证书别名,可修改为自己想设置的字符,建议使用英文字母和数字

llsydn.keystore:是证书文件名称,可修改为自己想设置的文件名称,也可以指定完整文件路径

-validity 36500:是证书的有效期,表示100年有效期,单位天,建议时间设置长一点,避免证书过期

回车后会提示:

Enter keystore password:  //输入证书文件密码,输入完成回车  
Re-enter new password:   //再次输入证书文件密码,输入完成回车  
What is your first and last name?  
  [Unknown]:  //输入名字和姓氏,输入完成回车  
What is the name of your organizational unit?  
  [Unknown]:  //输入组织单位名称,输入完成回车  
What is the name of your organization?  
  [Unknown]:  //输入组织名称,输入完成回车  
What is the name of your City or Locality?  
  [Unknown]:  //输入城市或区域名称,输入完成回车  
What is the name of your State or Province?  
  [Unknown]:  //输入省/市/自治区名称,输入完成回车  
What is the two-letter country code for this unit?  
  [Unknown]:  //输入国家/地区代号(两个字母),中国为CN,输入完成回车  
Is CN=XX, OU=XX, O=XX, L=XX, ST=XX, C=XX correct?  
  [no]:  //确认上面输入的内容是否正确,输入y,回车  
Enter key password for <testalias>  
        (RETURN if same as keystore password):  //确认证书密码与证书文件密码一样(HBuilder|HBuilderX要求这两个密码一致),直接回车就可以

以上命令运行完成后就会生成证书,路径为“D:\llsydn.keystore”。

注意:上述信息填写要规范,乱填有可能会影响应用上架应用市场。

  • 查看证书信息

可以使用以下命令查看:

keytool -list -v -keystore llsydn.keystore  
Enter keystore password: //输入密码,回车

会输出以下格式信息:

Keystore type: PKCS12    
Keystore provider: SUN    

Your keystore contains 1 entry    

Alias name: llsydn    
Creation date: 2023-6-1   
Entry type: PrivateKeyEntry    
Certificate chain length: 1    
Certificate[1]:    
Owner: CN=xxxx, OU=xxxx, O=xxxx, L=xx, ST=xx, C=xx    
Issuer: CN=xxxx, OU=xxxx, O=xxxx, L=xx, ST=xx, C=xx    
Serial number: 7dd12840    
Certificate fingerprints:    
         MD5:  xx:xx:xx:xxx   
         SHA1: xx:xx:xx:xxx   
         SHA256: xx:xx:xx:xxx   
Version: 3

其中证书指纹信息(Certificate fingerprints):

  • MD5 证书的MD5指纹信息(安全码MD5)
  • SHA1 证书的SHA1指纹信息(安全码SHA1)
  • SHA256 证书的SHA256指纹信息(安全码SHA245)

1.3、apk加固加签

这里使用360加固保

工具下载地址:windows下载

下载完成后,可以直接解压使用。360jiagubao_windows_64.zip

image-20230421162948970.png

自己注册账号,即可使用。

账号一: 177****9547/123456

账号二: 135****4606/123456

image-20230421163111424.png

注意:未实名认证,每天加固的次数有限,这里建议谨慎使用,以免次数用完,导致当天无法加固。

image.png

添加应用,即可帮我们进行apk的加固。

由于加固的过程中,会将原来apk的签名删了,所以这里加固完成后,需要重新加签。

方式一:jarsigner

jarsigner 是 JDK 提供的针对 jar 包签名的工具,如果你本地已经安装了 Java 环境,会自带 jarsigner 。

jarsigner 只支持v1 签名。(有些应用市场上架需要v1、v2的话,需要使用方式二)

jarsigner -verbose -keystore llsydn.keystore -signedjar llsydn-jiagu-pre.apk llsydn-jiagu-next.apk llsydn

-keystore jupiter.jks:原来apk的证书文件

-signedjar 加固后.apk 加固前.apk:需要加固的apk和输出的apk目录

jupiter:证书别名

方式二:apksigner

apksigner 默认同时支持 v1 和 v2 签名。

apksigner 不是内部或外部命令,也不是可运行的程序

如果没有apksigner,这里提供一个下载地址:apksigner加签工具

使用v1、v2、v3进行签名

apksigner.bat sign --v1-signing-enabled true --v2-signing-enabled true --v3-signing-enabled true --ks llsydn.keystore --ks-key-alias llsydn llsydn-jiagu-next.apk

apksigner.bat: apksigner加签工具

--ks jupiter.jks:证书文件

--ks-key-alias jupiter:证书别名

llsydn-jiagu-next.apk:需要签名apk,最后输出的也是这个(覆盖)

会发现多了一个后辍名为 .idsig 的,这个可以不用处理,直接删掉也没问题。

除了这个外,你会发现并没有新生成一个 Apk 文件,这是因为 apksigner 是直接对未签名的 Apk 包进行签名。

我们用 apksigner verify -verbose -print-certs 命令查看 llsydn-jiagu-next.apk 是否有签名

apksigner verify -verbose -print-certs llsydn-jiagu-next.apk

image.png

可以看到已经使用了v1、v2、v3签名成功。

查看apk的签名信息?

keytool -printcert -jarfile llsydn-jiagu-next.apk

image.png

对比加固后apk签名是否一致即可。

1.4、apk其他说明

  • ApkToolkit安卓反编译工具测试。

ApkToolkit安卓反编译工具android反编译apk常用工具判断apk是否加固或混淆

  • 计算apk的md5

文件md5在线计算

  • 小米技术支持

应用签名文档

乐固、360加固在android 11 上报错,无法安装

将目标SDK修改的低于30 即可

我这边是修改成29,来处理了这个问题;

image.png

cpu类型

image.png

小米应用市场,需要提交32位,64位的apk包,这里打包做个兼容即可,同时支持32位,和64位,就不需要打两个apk包了。

  • armeabi-v7a
    第7代及以上的ARM处理器(ARM32位),市面上大多数手机使用此CPU类型。
  • arm64-v8a
    第8代、64位ARM处理器(ARM64位),最近两年新发的设备使用此CPU类型,可以兼容使用armeabi-v7a的so库。

好了,以上就是我个人的实操了。可能有些不对,大家伙,轻点喷!!!

个人理解,可能也不够全面,班门弄斧了。

好了,今天就先到这里了!!!^_^

如果觉得有收获的,帮忙点赞、评论、收藏一下,再走呗!!!

image.png