安装APK失败,错误代码:INSTALL_FAILED_INVALID_APK 解决方案

本文介绍了一种解决Android应用在复制项目后安装失败的方法。通过禁用Android Studio的Instant Run功能,可以避免安装过程中出现INSTALL_FAILED_INVALID_APK的错误。
部署运行你感兴趣的模型镜像

开发环境:Android Studio

在复制了一个项目之后,修改了程序包名,修改了应用程序ID,对程序做了进一步开发之后,发现无法安装到手机上,错误代码:installation failed with message failed to finalize session:INSTALL_FAILED_INVALID_APK,具体如下图所示:



非常之头疼,原来复制项目再运行的时候是不会出现错误的(在Android Studio中复制项目并做修改,可以参考:http://blog.youkuaiyun.com/Lone1yCode/article/details/79087495


疯狂Baidu之后发现了一个非常有效的办法,如下图所示:



如上图所示,在Android Studio上,点击File\Settings\Build,Execution,Deployment\Debugger\Instant Run,取消对勾后再尝试安装,成功!!

Instant run的作用就是加速构建、重构,第一次运行程序的时候,与正常速度一样,但是在对程序作出很多修改后,再次运行程序,Android Studio会飞速的完成构建,相比于第一次运行程序快上不少。自行Baidu,可以了解更多。

另外,我只有复制了项目之后,运行程序会出现这个错误提示,如果编辑的项目而不是复制来的,建议还是开启Instant run吧。


您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

<think>我们遇到的问题是安装APK失败,错误信息是:'INSTALL_FAILED_INVALID_APK: Failed to extract native libraries, res=-2' 这个错误通常发生在Android应用安装过程中,系统无法正确提取APK中的原生库(native libraries)时。 原因分析: 1. **APK中缺少原生库**:在构建APK时,如果没有正确配置包含原生库(.so文件),或者原生库的放置路径不正确,可能导致安装失败。 2. **AndroidManifest.xml配置问题**:在AndroidManifest.xml中,如果设置了`android:extractNativeLibs="false"`,则要求APK中的原生库必须是未压缩的,以便系统直接映射。如果原生库被压缩了,就会导致这个错误。 3. **APK签名问题**:如果APK签名损坏或者不正确,也可能导致无法正确提取库。 4. **设备存储空间不足**:在安装过程中,如果设备存储空间不足,无法解压原生库,也会导致此错误。 解决方案: 1. **确保原生库正确打包**: 在build.gradle中,确保已经正确配置了NDK和ABI过滤器(如果需要)。例如: ```groovy android { defaultConfig { ndk { abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' } } } ``` 同时,检查jniLibs目录下是否有对应的.so文件。 2. **设置extractNativeLibs属性**: 在AndroidManifest.xml中,检查是否有`android:extractNativeLibs`属性。如果设置为`false`,则必须确保APK中的原生库是未经压缩的(在打包时设置)。 有两种解决方法: - 方法一:在AndroidManifest.xml中设置`android:extractNativeLibs="true"`(默认值为true,所以也可以直接删除该属性)。 示例: ```xml <application ... android:extractNativeLibs="true"> ... </application> ``` - 方法二:如果希望保持`extractNativeLibs="false"`(这样可以减少安装时间并节省磁盘空间),则需要在构建APK时不对原生库进行压缩。在build.gradle中添加: ```groovy android { packagingOptions { doNotStrip '**/*.so' // 如果已经这样做了,那么需要确保.so文件没有被压缩 // 同时,需要禁用对.so文件的压缩 jniLibs { useLegacyPackaging true // 对于旧版Gradle插件可能需要这个 } } } ``` 另外,在Android Gradle插件3.6.0及以上版本中,可以通过以下方式禁用压缩: ```groovy android { packagingOptions { jniLibs { useLegacyPackaging = true } } } ``` 3. **检查APK签名**: 确保APK已经正确签名。可以使用命令行工具`jarsigner`验证签名: ``` jarsigner -verify -verbose my_app.apk ``` 如果签名无效,重新签名APK。 4. **清理和重建项目**: 在Android Studio中,执行`Build -> Clean Project`,然后重新构建APK。 5. **检查设备存储空间**: 确保设备有足够的存储空间来安装应用。 6. **更新Android Gradle插件**: 有时,这个问题可能是由于Gradle插件的bug引起的。尝试更新到最新版本的Android Gradle插件。 7. **检查APK文件完整性**: 下载或传输的APK文件可能已损坏。重新生成APK并重试。 8. **使用Android App Bundle(AAB)**: 如果问题持续存在,可以考虑发布Android App Bundle,让Google Play处理APK的生成。 代码示例(build.gradle配置): 以下是一个配置示例,确保原生库不被压缩(当extractNativeLibs=false时): ```groovy android { defaultConfig { // ... 其他配置 } packagingOptions { jniLibs { useLegacyPackaging true // 禁用对.so文件的压缩 } } } ``` 如果上述方法不能解决问题,请检查构建日志以查看是否有关于原生库打包的警告或错误。 §§相关问题§§: 1. 在Android开发中,如何正确配置原生库(.so文件)? 2. AndroidManifest.xml中的`android:extractNativeLibs`属性有什么作用? 3. 如何验证APK文件的签名是否有效? 4. 在构建APK时,如何避免压缩原生库? </think>### 错误分析:`INSTALL_FAILED_INVALID_APK: Failed to extract native libraries` 这个错误发生在Android应用安装过程中,系统无法提取APK中的原生库(Native Libraries)。以下是原因和解决方案: --- #### **主要原因** 1. **ABI兼容性问题** APK包含的设备不支持的CPU架构(如x86库安装在ARM设备上) 2. **压缩库配置错误** 在`AndroidManifest.xml`中设置了`android:extractNativeLibs="false"`但未正确配置打包选项 3. **Gradle插件版本冲突** 旧版Gradle插件(<3.6.0)对未压缩库支持不完善 4. **APK签名问题** 签名损坏或不完整导致库文件验证失败 5. **资源文件冲突** `res/raw`或`assets`目录包含与原生库同名的无效文件 --- #### **解决方案** ##### 1. 检查ABI兼容性 在`build.gradle`中明确指定支持的CPU架构: ```groovy android { defaultConfig { ndk { abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' } } } ``` ##### 2. 修复库压缩配置 **选项A**:允许系统自动提取库(推荐常规方案) ```xml <!-- AndroidManifest.xml --> <application android:extractNativeLibs="true" ...> ``` **选项B**:配置未压缩库的正确打包方式 ```groovy // build.gradle android { packagingOptions { jniLibs { useLegacyPackaging = true // 兼容旧设备 } } } ``` ##### 3. 升级Gradle插件 在`build.gradle`中更新Android Gradle插件版本: ```groovy // 项目级 build.gradle dependencies { classpath 'com.android.tools.build:gradle:7.2.2' // 或更高版本 } ``` ##### 4. 清理签名文件 删除`app/build`目录后重新生成签名APK: ```bash rm -rf app/build ./gradlew clean assembleRelease ``` ##### 5. 检查资源冲突 检查`res/raw`和`assets`目录,移除或重命名疑似库文件(如`.so`后缀文件)。 --- #### **完整修复方案** 1. **临时解决方案**(快速验证): ```bash adb install --abi armeabi-v7a your_app.apk # 指定设备支持的ABI ``` 2. **永久解决方案流程**: ```gradle // 1. 更新项目级 build.gradle buildscript { dependencies { classpath 'com.android.tools.build:gradle:7.4.2' } } // 2. 修改模块级 build.gradle android { defaultConfig { ndk.abiFilters 'arm64-v8a' // 只打包主流架构 } packagingOptions { jniLibs.useLegacyPackaging true } } ``` --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值