Android Exception: Build failed,unaligned.apks 拒绝访问

本文介绍了解决Android Studio在Build过程中出现的错误方法。主要问题是由于无法创建或删除未对齐的APK文件导致的。解决方案包括重启计算机或者使用文件粉碎功能来清理残留文件。

Question

Android Studio中,Build时报错,Execution failed for task ‘:app:packageDebug’,详见如下:

:app:mergeDebugJniLibFolders
:app:transformNative_libsWithMergeJniLibsForDebug
:app:processDebugJavaRes UP-TO-DATE
:app:transformResourcesWithMergeJavaResForDebug
:app:validateDebugSigning
:app:packageDebug FAILED
Error:Execution failed for task ':app:packageDebug'.
> Failed to create 'D:\...\app\build\outputs\apk\app-debug-unaligned.apks': 拒绝访问。
Information:BUILD FAILED
Information:Total time: 24.975 secs
Information:1 error

发生报错后,若直接去该目录下删除文件,发现无法删除,即便是用管理员权限也无法删除apks文件。

Solution

重启Windows操作系统。重启后,再次Build后成功。
这里写图片描述

另外,据说使用电脑管家等防护软件的文件粉碎功能,对apk文件夹进行粉碎,然后重新编译也同样有效。

Extension

What is an aligned apk

Aligned APKs are optimized for RAM usage so they will consume less RAM in the devices.

Zipalign is an archive alignment tool that provides important optimization to Android application (.apk) files.....
The benefit is a reduction in the amount of RAM consumed when running the application.
Why unaligned?

通过Gradle构建后,在app/build/apk文件夹下会先生成app-debug-unaligned.apks,然后再从unaligned APK变为aligned,并生成aligned APK。
The unaligned(signed) APK is needed because the signing an aligned apk will undo the alignment.
app-debug-unaligned.apk = Unaligned Signed APK
app-debug.apk = Aligned Signed APK (RAM optimized using zipalign)

APP的构建过程

这里写图片描述
官方文档解释:

Caution: zipalign must only be performed after the .apk file has been signed with your private key. 
If you perform zipalign before signing, then the signing procedure will undo the alignment.
### 常见原因分析 编译错误 `error: asm/unaligned.h: No such file or directory` 通常出现在编译某些与硬件驱动或底层操作相关的源代码时,例如 `ch341.c` 这类涉及 USB 芯片通信的驱动文件。该错误表明编译器在头文件搜索路径中找不到 `asm/unaligned.h` 文件。 #### 1. 头文件路径缺失或架构不匹配 Linux 内核开发中,`asm/unaligned.h` 是一个与架构相关的头文件,通常位于内核源码树中的 `arch/<architecture>/include/asm/unaligned.h`。如果系统中未安装完整的内核头文件包,或者当前编译环境未正确配置头文件路径,则会导致该错误[^3]。 #### 2. 内核版本不兼容 不同版本的 Linux 内核中,头文件的组织方式和路径可能发生变化。如果源文件 `ch341.c` 是为特定内核版本编写的,而当前系统使用的内核版本不同,则可能导致头文件路径不一致,进而出现找不到 `asm/unaligned.h` 的错误[^4]。 #### 3. 缺少必要的开发包 在某些情况下,系统可能未安装用于开发的内核头文件包(如 `linux-headers-generic`),导致编译器无法找到与硬件架构相关的头文件。此时应安装相应的开发包以提供完整的头文件支持[^3]。 --- ### 解决方案 #### 1. 安装内核头文件包 确保系统中安装了与当前运行内核版本匹配的头文件包。可以使用以下命令安装: ```bash sudo apt-get install linux-headers-$(uname -r) ``` 这将安装当前内核对应的头文件,通常包含 `asm/unaligned.h` 等关键文件。 #### 2. 检查头文件路径配置 如果使用了自定义的编译脚本或 Makefile,应确保 `CFLAGS` 或 `INCLUDE` 路径中包含了内核头文件的目录。例如: ```makefile CFLAGS += -I/usr/src/linux-headers-$(shell uname -r)/include ``` 这样可以确保编译器在正确的路径下查找 `asm/unaligned.h`。 #### 3. 替换为通用头文件(可选) 在某些情况下,`asm/unaligned.h` 可能被其他通用头文件替代。例如,可以尝试在源文件中将: ```c #include <asm/unaligned.h> ``` 替换为: ```c #include <linux/unaligned.h> ``` 这是 Linux 内核提供的一个通用接口,通常在安装了完整的内核开发包后可用[^3]。 --- ### 示例代码修改 原始代码: ```c #include <asm/unaligned.h> ``` 修改后: ```c #include <linux/unaligned.h> ``` --- ### 其他注意事项 - 如果使用的是交叉编译环境,需确保目标架构的头文件路径已正确配置。 - 某些老旧的驱动代码可能依赖特定内核版本的结构,建议查阅项目文档以确认兼容性要求。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pierre_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值