Android studio 3.0 and sd报错Error: Flag android.useDeprecatedNdk is no longer supported and will be r

本文介绍了在使用NDK开发过程中遇到的一个错误:Flag android.useDeprecatedNdk不再受支持,并提供了解决方案。建议更新到CMake或ndk-build集成,或者在gradle.properties中设置android.deprecatedNdkCompileLease继续使用过时的NDK编译。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天学习用NDK进行开发,运行到手机上报了个错,先把错误日志贴上:

Error: Flag android.useDeprecatedNdk is no longer supported and will be removed in the next version of Android Studio.  Please switch to a supported build system.
  Consider using CMake or ndk-build integration. For more information, go to:
   https://d.android.com/r/studio-ui/add-native-code.html#ndkCompile
   To get started, you can use the sample ndk-build script the Android
   plugin generated for you at:
   E:\SwimmingSpace\ndktest\build\intermediates\ndk\debug\Android.mk
  Alternatively, you can use the experimental plugin:
   https://developer.android.com/r/tools/experimental-plugin.html
  To continue using the deprecated NDK compile for another 60 days, set 
  android.deprecatedNdkCompileLease=1515138691572 in gradle.properties

刚开始开这个错误日志有点懵了,但是我们仔细看一下会发现android.useDeprecatedNdk不在被支持了,但是在日志后面给了我们一个解决办法To continue using the deprecated NDK compile for another 60 days, set 

  android.deprecatedNdkCompileLease=1515138691572 in gradle.properties大概意思是想要继续使用已弃用的NDK编译60天,在gradle.properties文件里把android.useDeprecatedNdk去掉换成android.deprecatedNdkCompileLease=1515138691572就行了,我猜有肯能每个人错误日志里得到android.deprecatedNdkCompileLease=1515138691572不一定一样,所以尽量使用自己错日志里的进行运行。

<think>好的,我现在需要帮助用户解决两个Android开发中的问题:INSTALL_FAILED_INVALID_APK错误和android:dataExtractionRules属性未找到的错误。首先,我得回忆一下之前用户提到的关于INSTALL_FAILED_INVALID_APK的解决方案,并结合新的引用内容来调整回答。同时,用户现在提到了另一个错误,dataExtractionRules属性未找到,我需要同时处理这两个问题。 首先,针对INSTALL_FAILED_INVALID_APK错误,用户之前已经得到了一些解决方案,包括设置extractNativeLibs为false,使用zipalign对齐,以及正确的签名方法。现在用户提供的引用[1]中提到了ApkBuilder的步骤,包括添加native库和sealApk的过程。这可能涉及到构建APK时的库文件处理是否正确。我需要确认在构建过程中native库是否被正确添加,并且没有压缩。此外,引用[2]提到了System.loadLibrary的加载过程,可能需要确保库文件在APK中的路径正确,避免加载失败。 然后是dataExtractionRules属性未找到的错误。这个属性可能和Android的新特性有关,比如数据提取规则,可能在某些配置文件中需要声明。用户可能在AndroidManifest.xml中引用了这个属性,但对应的配置缺失或者版本不支持。我需要检查这个属性的使用条件,比如是否需要特定的Gradle插件版本或Android SDK版本,或者在哪个版本的Android中引入的。 接下来,我需要结合之前的解决方案和新的引用内容。比如,在引用[1]中的ApkBuilder步骤中,添加native库时是否使用了正确的压缩方式,是否在sealApk之前确保库文件未压缩。此外,用户提到的jarsigner步骤是否正确执行,签名是否使用了V2或更高版本,这可能影响APK的安装。 对于dataExtractionRules属性,可能需要检查AndroidManifest.xml中的命名空间是否正确,或者是否需要更新构建工具。例如,这个属性可能属于AndroidX库或特定的Jetpack组件,用户可能没有正确添加依赖项。或者,这个属性是在较新的Android版本中引入的,而用户的项目配置的targetSdkVersion较低,导致无法识别该属性。 我需要分步骤回答这两个问题,确保每个问题都有对应的解决方案,并且引用用户提供的参考资料中的相关内容,比如构建过程中的native库处理,以及加载库文件的机制。同时,可能需要指导用户如何正确配置dataExtractionRules属性,或者移除不必要的属性声明,如果该属性确实不存在于他们的项目配置中。 最后,生成相关问题时要围绕这两个错误,可能涉及构建过程、库文件处理、属性配置、Gradle设置等,确保用户能进一步了解如何避免类似问题。</think>### 综合解决方案:INSTALL_FAILED_INVALID_APK 与 dataExtractionRules 报错 --- #### 一、INSTALL_FAILED_INVALID_APK: Failed to extract native libraries ##### 1. 核心原因验证 根据引用[1]中描述的APK打包流程,**SO文件在APK中的存储模式**直接影响安装结果: - 若 `extractNativeLibs="false"`,要求SO文件必须 **未压缩存储(ZIP_STORED)** 且满足 **4KB页面对齐** - 若 `extractNativeLibs="true"`(默认值),允许压缩但需保证ZIP格式规范 ##### 2. 修复步骤(结合ApkBuilder流程) **步骤1:强制禁用SO压缩** 修改 `AndroidManifest.xml`: ```xml <application android:extractNativeLibs="false" ...> ``` *注意:需与构建工具配置同步(如Gradle的 `packagingOptions`)[^1]* **步骤2:验证SO压缩状态** 通过以下命令检查APK内SO文件是否未压缩: ```bash # 检查ZIP压缩类型(第9字节为00表示未压缩) unzip -lv your.apk | grep -E &#39;lib/.*\.so&#39; | awk &#39;{print $6, $9}&#39; ``` **步骤3:手动对齐与签名** ```bash # 使用zipalign对齐(必须4字节对齐) zipalign -v 4 input.apk aligned.apk # V2+签名(引用[1]中提到的jarsigner需结合新方案) apksigner sign --ks keystore.jks --v2-signing-enabled true aligned.apk ``` ##### 3. 构建工具适配(关键) 在 `build.gradle` 中添加配置,确保构建流程与 `extractNativeLibs` 设置兼容: ```groovy android { packagingOptions { jniLibs.useLegacyPackaging = true // 禁用压缩优化 doNotStrip &#39;**/*.so&#39; // 保留ELF调试信息(引用[2]加载需要) } } ``` --- #### 二、android:dataExtractionRules 属性未找到 ##### 1. 错误根源分析 `dataExtractionRules` 是Android 11+引入的 **数据访问规则配置**,需满足以下条件: - `compileSdkVersion` ≥ 30 - 使用AndroidX库的 `androidx.appcompat:appcompat` ≥ 1.3.0 - 正确声明命名空间(`xmlns:android`) ##### 2. 具体修复方案 **方案A:升级开发环境** ```groovy // build.gradle android { compileSdkVersion 34 defaultConfig { targetSdkVersion 34 } } dependencies { implementation &#39;androidx.appcompat:appcompat:1.6.1&#39; } ``` **方案B:移除冗余配置** 若未使用备份/自动填充功能,可直接删除 `android:dataExtractionRules` 属性: ```xml <!-- AndroidManifest.xml --> <application ~~android:dataExtractionRules="@xml/data_extraction_rules"~~ ...> ``` **方案C:创建规则文件** 若需保留功能,在 `res/xml/` 下创建 `data_extraction_rules.xml`: ```xml <data-extraction-rules> <cloud-backup> <exclude domain="root" path="androidx.credentials"/> </cloud-backup> </data-extraction-rules> ``` --- #### 三、深度关联调试技巧 1. **SO加载失败诊断** 通过引用[2]中 `System.loadLibrary` 的加载逻辑,添加调试代码定位问题: ```java try { System.loadLibrary("mylib"); } catch (UnsatisfiedLinkError e) { Log.e("NativeLoad", "ABI兼容性检查失败: " + Build.SUPPORTED_ABIS); e.printStackTrace(); } ``` 2. **Native进程调试** 引用[3]提到的SIGRTMAX-17信号可用于捕获Native层崩溃: ```bash adb shell kill -SIGRTMAX-17 [PID] # 生成堆dump文件 adb pull /data/local/tmp/backtrace_head.**PID**.txt ``` --- ### 关键原理总结 | 问题 | 技术要点 | 关联引用 | |------|---------|---------| | INSTALL_FAILED_INVALID_APK | SO文件需满足内存映射对齐要求(页大小对齐+未压缩) | [^1][^2] | | dataExtractionRules缺失 | AndroidX兼容性配置与SDK版本强相关 | - | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值