出bug很烦 2025-07-17 18:41 采纳率: 18.2%
浏览 13

升级NDK版本为26后打不出包

谷歌要升级为35
升级Android Studio版本后
升级NDK版本为26后打不出包
报错相关代码如下

img

  • 写回答

5条回答 默认 最新

  • 檀越@新空间 2025-07-17 18:57
    关注

    晚上好🌙🌙🌙
    本答案参考通义千问

    你提到在升级 NDK 版本为 26 后无法打包,同时提到 谷歌要升级为 35,这可能意味着你在尝试将项目适配到更高版本的 Android SDK 或 NDK。下面我将详细分析可能出现的问题,并提供解决方案。


    🔧 一、问题原因分析

    1. NDK 26 与旧代码或依赖不兼容

      • NDK 26 可能引入了新的编译器行为或 ABI 支持变化。
      • 某些 C/C++ 代码可能在新 NDK 下出现编译错误。
    2. Android Studio 升级后配置未更新

      • 升级 AS 后,gradle.propertiesbuild.gradle 中的 NDK 配置可能未同步。
      • 项目中可能仍引用了旧版 NDK 的路径或配置。
    3. SDK 和 NDK 版本不匹配

      • 如果你计划使用 Android SDK 35(即 API 35),但 NDK 26 不支持该版本,可能导致构建失败。
      • 注意:目前官方尚未发布支持 Android SDK 35 的 NDK 版本。
    4. CMake 或 ndk-build 配置问题

      • CMakeLists.txtAndroid.mk 文件可能没有适配 NDK 26 的语法或特性。

    🛠️ 二、解决步骤

    1. 确认 NDK 和 SDK 兼容性

    • 检查 NDK 官方文档

      • NDK 26 发布说明
      • 当前 NDK 26 不支持 Android SDK 35(API 35)。
      • 若你需要支持 API 35,请等待 NDK 27 或更高版本发布。
    • 查看当前 Android SDK 版本

      sdkmanager --list | grep "platforms"
      
    • 建议:

      • 如果你必须使用 API 35,可以暂时使用 NDK 25 或更早版本
      • 或者,等待 NDK 27 发布后再进行升级。

    2. 更新 Gradle 和 Android Studio 配置

    ✅ 修改 gradle.properties

    android.useAndroidX=true
    android.enableJetifier=true
    android.ndkVersion=26.0.10200975
    

    注意: 确保 ndkVersion 与你安装的 NDK 版本一致。

    ✅ 修改 build.gradle (Module-level)

    android {
        namespace 'com.example.yourapp'
        compileSdk 34 // 使用 API 34,而不是 35
    
        defaultConfig {
            applicationId "com.example.yourapp"
            minSdk 21
            targetSdk 34
            versionCode 1
            versionName "1.0"
        }
    
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
        }
    
        externalNativeBuild {
            cmake {
                version "3.22.1"
            }
        }
    }
    

    重点:
    不要使用 compileSdk 35,因为目前 NDK 26 不支持它。
    应使用 compileSdk 34 或更低版本。


    3. 清理并重建项目

    ./gradlew clean
    ./gradlew assembleDebug
    

    如果仍然报错,尝试以下操作:

    • 删除 .idea 文件夹和 build 文件夹
    • 重新导入项目

    4. 检查 Native 代码兼容性

    如果你使用了 C/C++ 代码,确保它们兼容 NDK 26:

    • 更新 CMakeLists.txt
    • 检查 C++ 标准是否设置正确
    • 确保所有依赖库已更新至支持 NDK 26 的版本

    示例 CMakeLists.txt

    cmake_minimum_required(VERSION 3.10.2)
    project(MyNativeLibrary)
    
    add_library(
        native-lib
        SHARED
        src/main/cpp/native-lib.cpp
    )
    
    find_package(Android REQUIRED)
    include_directories(${ANDROID_NDK}/sources/cxx-stl/llvm-libc++/include)
    

    5. 使用正确的 NDK 路径

    确保 Android Studio 使用的是你指定的 NDK 版本:

    • 打开 File > Project Structure > SDK Location
    • Android NDK location 中选择你安装的 NDK 26 路径

    🚨 常见错误及修复方法

    | 错误信息 | 解决方案 | |----------|----------| | Could not find method android() in class org.gradle.api.Project | 确保 gradle-wrapper.properties 中的 distributionUrl 是最新版本 | | Failed to resolve: com.android.tools.build:gradle:x.x.x | 更新 Android Studio 并重新下载 Gradle | | error: unknown type name ‘__int128’ | 升级 NDK 到 26 或更高版本,或调整 CMake 编译器选项 |


    📦 三、推荐版本组合

    | Android SDK | NDK | Android Studio | |-------------|---------|----------------| | 34 (API 34) | 26.0.10200975 | 2023.1.1+ | | 33 (API 33) | 25.2.9001952 | 2022.1.1+ |

    建议: 目前 NDK 26 最佳搭配是 Android SDK 34。


    ✅ 四、总结

    • 不要使用 NDK 26 + SDK 35(API 35),目前不兼容。
    • 更新 gradle.propertiesbuild.gradle 配置
    • 清理项目并重新构建
    • 检查 Native 代码是否兼容 NDK 26
    • 保持 NDK 和 SDK 版本匹配

    如有具体的报错信息(如日志截图或错误文本),欢迎补充,我可以帮你进一步定位问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 7月17日