针对 SDK Android Q 导致无法完成会话:INSTALL_FAILED_INVALID_APK: 无法提取本机库,res=-2

Posted

技术标签:

【中文标题】针对 SDK Android Q 导致无法完成会话:INSTALL_FAILED_INVALID_APK: 无法提取本机库,res=-2【英文标题】:Targeting SDK Android Q results in Failed to finalize session : INSTALL_FAILED_INVALID_APK: Failed to extract native libraries, res=-2 【发布时间】:2019-08-05 23:12:08 【问题描述】:

一旦我将目标 api 切换为“Q”,我就无法在 android Q Emulator 上安装 APK。我得到错误:

未能完成会话:INSTALL_FAILED_INVALID_APK:未能完成 提取原生库,res=-2

Android Studio (v3.3.2) 建议我先卸载 apk。我尝试卸载apk,但仍然遇到相同的错误。如果我将目标 api 降级到 28,应用程序工作。

【问题讨论】:

真实设备上的相同问题(运行 Q) 我的像素 2 出现同样的错误 【参考方案1】:

这是因为 zipalign 的问题,请参阅 - https://issuetracker.google.com/issues/37045367。您需要在 AndroidManifest.xml 的 Application Tag 中设置 extractNativeLibs

<application
        android:allowBackup="false"
        android:label="@string/app_name"
        android:extractNativeLibs="true"
...
>

如果您使用adb 安装apk,请尝试添加-t 标志

adb install -t <path-to-apk>

【讨论】:

试过了,没用 adb install -t apk-free.apk Performing Streamed Install adb: failed to install apk-free.apk: Failure [INSTALL_FAILED_INVALID_APK: 无法提取原生库,res=-2] 尝试将以下内容添加到 app/build.gradle 文件中的 defaultConfig ` PackagingOptions doNotStrip "/armeabi/.so" doNotStrip "/armeabi-v7a/.so" doNotStrip "/x86/.so" ` 还要确保卸载任何旧版本的apk 你能分享你的 app/build.gradle 和 Manifest 的相关摘录吗?【参考方案2】:

如果您想要android:extractNativeLibs="false",请使用带有-p 键的zipalign,以便在ZIP 中对ELF 进行页面对齐:

zipalign -p 4 app.apk app-aligned.apk

【讨论】:

【参考方案3】:

我在 AWS Device Farm 中也遇到了这个错误。原来他们安装了 sdk 版本 21,我的 minSdkVersion 设置为 24。将我的 minSdkVersion 降低到 21 解决了这个问题。尝试在测试设备上安装 apk 时返回此错误。希望这对其他在 android 上设置设备场的人有所帮助。

【讨论】:

以上是关于针对 SDK Android Q 导致无法完成会话:INSTALL_FAILED_INVALID_APK: 无法提取本机库,res=-2的主要内容,如果未能解决你的问题,请参考以下文章

如何在最新的 Facebook Android SDK 4.6.0 中获取会话类

FFMPEG命令在设置项目的目标SDK版本29(Android Q问题)时不起作用

《科学计算机——环境搭建》

iPhone SDK 3.0 针对 2.2.1 SDK

Facebook android SDK重新打开会话

Android SDK Manager 无法下载Android8.1.0(API 27) SDK Platform