使用Apktool重新打包应用并签名时遇到的问题解决指南

4次阅读
没有评论

问题描述

尝试使用Apktool重新打包Android应用并使用jarsigner进行签名,但在安装时遇到了INSTALL_FAILED_INVALID_APK: Failed to extract native libraries, res=-2Targeting R+ (version 30 and above) requires the resources.arsc of installed APKs to be stored uncompressed and aligned on a 4-byte boundary等错误。

解决方案

方案1:确保资源文件未压缩且对齐

根据错误信息,resources.arsc文件需要未压缩且对齐到4字节边界。以下是解决步骤:

  1. 使用zipalign对齐资源文件
  2. 确保已经解包应用,使用apktool d your_app.apk命令。
  3. 对齐资源文件,使用zipalign -v 4 your_app-aligned.apk your_app-aligned-aligned.apk命令。其中your_app-aligned.apk是已经过apktool解包的文件,your_app-aligned-aligned.apk是最终输出的文件。
  4. 检查对齐后的文件,确保没有压缩资源,使用unzip -l your_app-aligned-aligned.apk查看文件列表。

  5. 签名应用

  6. 使用jarsigner对齐后的文件进行签名,例如:jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore your_keystore_file your_app-aligned-aligned.apk your_alias_name
  7. 确保使用的Keystore和Alias正确无误。

  8. 安装应用

  9. 使用adb install your_app-aligned-aligned.apk命令安装应用。

方案2:禁用自动提取本地库

如果上述方法仍然无法解决问题,可以尝试在应用的AndroidManifest.xml文件中添加android:extractNativeLibs="false"标签,以防止系统自动提取本地库文件。具体步骤如下:

  1. 编辑AndroidManifest.xml文件
  2. 打开AndroidManifest.xml文件,找到应用的主Activity节点。
  3. 添加android:extractNativeLibs="false"标签,例如:
    xml
    <activity android:name=".MainActivity"
    android:extractNativeLibs="false">
    </activity>

  4. 重新打包应用

  5. 使用apktool b your_app -o your_app_unsigned.apk命令重新打包应用。
  6. 使用jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore your_keystore_file your_app_unsigned.apk your_alias_name命令签名应用。
  7. 使用zipalign -v 4 your_app_unsigned.apk your_app_final.apk命令对齐资源文件。
  8. 使用adb install your_app_final.apk命令安装应用。

通过上述两种方法之一,应该可以解决应用在Android 11上安装失败的问题。请根据实际情况选择适合的方法进行操作。

正文完