NativeScript项目在Android 14上的Dex文件写入权限问题解析
问题背景
在Android 14(API Level 34)环境中运行NativeScript应用时,开发者遇到了一个关键性的崩溃问题。错误信息显示系统阻止了应用对Dex文件的写入操作,具体表现为抛出SecurityException异常,提示"Writable dex file is not allowed"。
错误现象
当应用尝试在Android 14设备或模拟器上运行时,会在启动阶段立即崩溃。错误日志中明确指出了问题的根源:系统不允许应用写入特定的Dex文件。这些文件通常位于应用的code_cache/secondary-dexes目录下,例如:
android.view.View_AccessibilityDelegate_vendor_75312_28_TNSAccessibilityDelegateImpl.jarjava.lang.Runnable-1726892219226-28.jar
技术原理分析
这个问题源于Android 14引入的更严格的安全限制。在Android运行时环境中,Dex文件是Dalvik可执行文件的格式,包含了应用的编译后代码。Android系统为了提高安全性和稳定性,对Dex文件的写入操作实施了更严格的管控。
具体来说,Android 14限制了应用对code_cache目录下文件的写入权限,特别是当应用尝试动态生成或修改Dex文件时。这种限制是为了防止潜在的代码注入攻击和恶意行为。
解决方案
根据开发者社区的反馈,这个问题可以通过以下方式解决:
-
升级NativeScript框架:将NativeScript核心框架更新到最新版本是最有效的解决方案。新版本已经针对Android 14的权限变更进行了适配。
-
更新相关依赖:同时更新项目中的运行环境(runtimes)、核心库(core)和构建工具(webpack)到最新版本,确保所有组件都兼容Android 14的新特性。
-
配置调整:对于无法立即升级的项目,可以尝试以下配置调整:
- 在
build.gradle中启用multiDexEnabled - 设置
enableDexingArtifactTransform标志 - 但这些方法在Android 14上可能效果有限
- 在
兼容性考虑
对于仍在使用NativeScript 6等旧版本维护老项目的开发者,这个问题尤为棘手。由于旧版本框架没有针对Android 14进行优化,开发者可能需要考虑以下方案:
- 评估升级到新版本NativeScript的可行性
- 如果必须使用旧版本,可能需要修改NativeScript的运行时实现,特别是处理Dex文件生成的逻辑
- 考虑对特定设备或Android版本进行条件化处理
最佳实践建议
-
及时更新框架:保持NativeScript及其相关依赖的最新状态,以获得最佳的兼容性和安全性。
-
测试策略:在支持Android 14时,建立全面的测试流程,特别是在涉及到动态代码生成和Dex操作的功能点。
-
权限处理:了解并遵循Android 14的新权限模型,合理设计应用的存储和缓存策略。
-
错误处理:在代码中添加适当的异常处理机制,优雅地处理可能出现的权限问题,提供有意义的用户反馈。
通过理解Android 14的安全机制变更并采取相应的适配措施,开发者可以确保NativeScript应用在新版Android系统上稳定运行。
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
xw-cli实现国产算力大模型零门槛部署,一键跑通 Qwen、GLM-4.7、Minimax-2.1、DeepSeek-OCR 等模型Go06
yuanrongopenYuanrong runtime:openYuanrong 多语言运行时提供函数分布式编程,支持 Python、Java、C++ 语言,实现类单机编程高性能分布式运行。Go051
MiniCPM-SALAMiniCPM-SALA 正式发布!这是首个有效融合稀疏注意力与线性注意力的大规模混合模型,专为百万级token上下文建模设计。00
ebook-to-mindmapepub、pdf 拆书 AI 总结TSX01