问题描述
尝试使用Apktool重新打包Android应用并使用jarsigner
进行签名,但在安装时遇到了INSTALL_FAILED_INVALID_APK: Failed to extract native libraries, res=-2
和Targeting 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字节边界。以下是解决步骤:
- 使用
zipalign
对齐资源文件: - 确保已经解包应用,使用
apktool d your_app.apk
命令。 - 对齐资源文件,使用
zipalign -v 4 your_app-aligned.apk your_app-aligned-aligned.apk
命令。其中your_app-aligned.apk
是已经过apktool
解包的文件,your_app-aligned-aligned.apk
是最终输出的文件。 检查对齐后的文件,确保没有压缩资源,使用
unzip -l your_app-aligned-aligned.apk
查看文件列表。签名应用:
- 使用
jarsigner
对齐后的文件进行签名,例如:jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore your_keystore_file your_app-aligned-aligned.apk your_alias_name
。 确保使用的Keystore和Alias正确无误。
安装应用:
- 使用
adb install your_app-aligned-aligned.apk
命令安装应用。
方案2:禁用自动提取本地库
如果上述方法仍然无法解决问题,可以尝试在应用的AndroidManifest.xml
文件中添加android:extractNativeLibs="false"
标签,以防止系统自动提取本地库文件。具体步骤如下:
- 编辑
AndroidManifest.xml
文件: - 打开
AndroidManifest.xml
文件,找到应用的主Activity节点。 添加
android:extractNativeLibs="false"
标签,例如:
xml
<activity android:name=".MainActivity"
android:extractNativeLibs="false">
</activity>重新打包应用:
- 使用
apktool b your_app -o your_app_unsigned.apk
命令重新打包应用。 - 使用
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore your_keystore_file your_app_unsigned.apk your_alias_name
命令签名应用。 - 使用
zipalign -v 4 your_app_unsigned.apk your_app_final.apk
命令对齐资源文件。 - 使用
adb install your_app_final.apk
命令安装应用。
通过上述两种方法之一,应该可以解决应用在Android 11上安装失败的问题。请根据实际情况选择适合的方法进行操作。
正文完