使用360加固保加固apk,报错‘自动签名失败:align error’

2,504 阅读6分钟

前提:

使用AndroidStudio Build一个未签名的APK,交付给上线部门使用360加固保进行自动签名打包,报错“自动签名失败:align error”

原因:

360加固保在进行加固时检测到apk文件未进行 zipAlign 对齐处理,提示用户使用zipAlign工具处理apk

360加固保使用流程:

360官网下载对应版本的zip文件(https://jiagu.360.cn/#/global/download),解压zip文件。

Mac 无法直接启动解压之后文件夹中的360加固助手,参照解压文件中的解决办法,启动360加固保。

加固流程相关问题:
  1. 配置正确的签名文件

  2. 点击添加应用,选择对应的未签名的unSign.apk文件,360加固保开始进行自动签名加固流程

  3. 提示报错信息:“自动签名失败:align error”

  4. 但是360加固保仍旧会生成一个加固后的unSign_stemp.apk文件,只是该apk文件没有使用zipalign工具进行对齐

  5. 点击360加固保的“工具包”功能,使用签名apk功能,对unSign_stemp.apk文件进行签名,得到已签名的apk文件unSign_stemp_signed.apk

  6. 最后生成的apk文件是可以正常安装使用的

备注:

  1. 360加固保客服,反馈遇到该情况时的处理方法是:
align error是指您的app没有做zipalign对齐,用zipalign对齐工具对齐一下

如果是v1签名,加固-签名-zipalign对齐
如果是v2签名,加固-zipalign对齐-签名
  1. 直接将未签名的apk文件进行自动打包签名是否可以?

因为360加固保在处理apk时,会将apk中的签名信息清除,在使用配置的签名文件重新进行签名,所以怀疑过未签名的apk需要先签名才能进行加固。

360加固保的客服回复是:未签名的apk不能直接进行加固。

实际:只要配置了签名文件,是可以直接进行加固并且自动签名的。360加固保会自动回apk进行预签名,具体原因可以查询详细博客学习一下。

zipAlign的原理及使用:

原理:

zipalign优化的最根本目的是帮助操作系统更高效率的根据请求索引资源,将resource-handling code统一将Data structure alignment(数据结构对齐标准:DSA)限定为4-byte boundaries。如果第一次接触有关Data structurealignment的内容,强烈建议搜索更多与其相关的内容来充分理解这样做的最终目的,这也是理解zipalign工作原理的关键。 如果不采取对齐的标准,处理器无法准确和快速的在内存地址中定位相关资源。

目前的系统中使用fallbackmechanism机制处理那些没有应用DSA标准的应用程序,这的确大大的方便了普通开发者无需关注繁琐的内存操作问题。但是相反,对于这样的应用程序将给普通用户带来一定的麻烦,不但影响程序的运行的效率,而且使系统的整体执行效率下降和占用大量不必要的内存资源,甚至消耗一定的电池资源(battery life)。

使用:

1、对infile.apk进行对齐并且保存为outfile.apk

zipalign [-f] [-v] <alignment> infile.apk outfile.apk

2、检查apk是否进行了对齐

zipalign - c - v <alignment> existing.apk

infile.apk表示需要存档对齐的apk
outfile.apk表示存档对齐后的apk
alignment:表示指定的对应字节数,是一个整数且必须指定为4.

zipalign官网地址:

developer.android.com/studio/comm…

developer.android.com/studio/comm…

小结:

使用上述方法即可解决该问题,因为Google官方推荐对应用进行zipalign初始,可以是App加载更快速,目前看来是一种趋势。

More问题:

因为zipalign只对签名后的apk生效,我TMD没有正式签名文件不能build正常签名的apk,我自己进行zipalign对齐的方案失败。

然后让上线部门同事进行zipalign对齐,结果因为要改变他们之前的上线流程,他们需要开会讨论,流程要很久,再次挂掉。

直接忽略360加固保报错信息,不进行zipalign对齐,貌似可能背锅。。。

其他解决方案:

在Android SDK中提供了三种应用Align操作的方法:

- 1、使用ADT:

 从ADT 0.9.3版本开始,可以通过export wizard自动对发布的applicationpackages执行align操作。设置方法:鼠标右键点击Project,然后选择”Android Tools” > “ExportSigned Application Package…”。或者可以直接在AndroidManifest.xml中设置。
1
- 2、使用Ant:
- 对于API Level 大于等于4的Application Packages可以直接通过Ant build script来Align优化。但对于API Level小于4的情况,只能采取手动Align优化。
- 默认下应用Ant build script运行Debug packages(API Level >= 4)时,将自动执行Align优化。
- 针对Release packages。当使用Ant build script执行Align优化时,首先需要拥有足够的信息来Sign packages。当完成Signing之后, 才能执行Align优化。通过官方文档了解如何Sign Packages。

3、手动执行Align优化:
利用tools文件夹下的zipalign工具。首先调出cmd命令行,然后执行:zipalign -v 4 source.apk androidres.apk。这个方法不受API Level的限制,可以对任何版本的APK执行Align优化。
同时可以利用zipalign工具检查当前APK是否已经执行过Align优化。命令:zipalign -c -v 4 androidres.apk

结论:第二种方案没有尝试,第三种没有*.keystore资源

第一种方案:Android Tools -> “ExportSigned Application Package…”没找到。。。

直接在AndroidManifest.xml文件中配置:

<application    
    ....  
    android:extractNativeLibs="true"    
    ....
>

该属性值为true,则会对本地库进行压缩,不会对其进行align操作。 该属性默认值就是true,但是当Androidstudio的版本升级到3.6.0及以上时。Androidstudio会默认更改这个默认值为false,所以需要手动设置为true。


android:extractNativeLibs
Whether or not the package installer extracts native libraries from the APK to the filesystem. 
If set to "false", then your native libraries must be page aligned and stored uncompressed in 
the APK. Although your APK might be larger, your application should load faster because the 
libraries are directly loaded from the APK at runtime. On the other hand, if set to "true", 
native libraries in the APK can be compressed. During installation, the installer decompresses 
the libraries, and the linker loads the decompressed libraries at runtime; in this case, the 
APK would be smaller, but installation time might be slightly longer.
The default value is "true" if extractNativeLibs is not configured in AndroidManifest.xml. 
However, when building your app using Android Gradle plugin 3.6.0 or higher, this property is 
reset to "false" if it is NOT configured in AndroidManifest.xml; so if your native libraries in
 the APK are compressed, you must explicitly set it to "true" in AndroidManifest.xml.

参考地址:
developer.android.com/guide/topic…

参考文章:
blog.csdn.net/fulushan/ar…

AndroidStudio中build.gradle配置文件详解:
www.androidchina.net/8250.html