NativeScript Angular应用Android14崩溃:SecurityException问题求助
问题背景
你的NativeScript Angular应用在Android 14(API Level 34)之前运行正常,升级后崩溃并抛出以下错误:
ERROR Error: java.lang.SecurityException: Writable dex file '/data/user/0/xx.XxxxXxx.XXXX/code_cache/secondary-dexes/androidx.viewpager.widget.PagerAdapter_vendor_51348_28_CarouselPagerAdapterClassInner.jar' is not allowed.
尽管NativeScript 8.6.x宣称修复了该问题,但仍出现异常,以下是针对性解决方案:
具体解决步骤
确认核心依赖版本
确保@nativescript/core和@nativescript/android升级到8.6.3及以上版本(该版本完善了Android 14的dex权限适配),执行命令:npm install @nativescript/core@latest @nativescript/android@latest调整Android Gradle配置
在项目根目录的App_Resources/Android/app.gradle中添加/更新以下配置:android { compileSdkVersion 34 defaultConfig { targetSdkVersion 34 } packagingOptions { jniLibs { useLegacyPackaging = true } } dexOptions { preDexLibraries = false } } dependencies { implementation 'androidx.core:core-ktx:1.12.0' }清理项目缓存
删除旧构建文件与缓存,避免残留冲突:rm -rf node_modules platforms hooks .gradle npm install ns clean排查第三方插件兼容性
重点检查涉及ViewPager、动态类加载的插件(如报错中的CarouselPagerAdapter相关插件),确认插件已适配Android 14。若插件未维护,尝试替换为活跃维护的替代插件,或临时禁用插件验证问题来源。启用R8代码压缩(可选)
在app.gradle中启用R8优化dex结构,规避Android 14的权限限制:android { buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } }
内容的提问来源于stack exchange,提问作者Loralon

