Android sdk 更新后编译不过,【Could not find com.android.sdklib.build.ApkBuilderMain】

本文介绍了解决Android SDK更新后导致的编译错误的方法。主要问题在于sdk/tool/lib目录下的sdklib.jar文件缺失或命名问题。解决方案是检查并重命名sdklib-25.*.*.jar为sdklib.jar。

最近更新了Android sdk,发现编译不过了

 

解决方案:

进入 sdk/tool/lib/ 目录下,看看有没有 sdklib.jar 这个文件,如果没有看看有没有sdklib-25.*.*.jar,例如sdklib-25.3.2.jar,如果有,就将sdklib-25.3.2.jar重新命名为sdklib.jar

 

转载于:https://www.cnblogs.com/larack/p/7359952.html

在 Gradle 6.x 中配置 CMake 构建 `arm64-v8a` 架构时,如果遇到 `Could not find method targets()` 的错误,通常是因为在 `externalNativeBuild.cmake` 块中误用了不支持的方法或语法。Gradle 6.x 对 CMake 配置的支持方式与后续版本(如 Gradle 7+)存在差异,部分 API 可能尚未引入或命名不同。 ### 正确的 Gradle 6.x 下 CMake 配置方式 在 Gradle 6.x 中,`targets` 方法并不可用,因此不能直接使用该方法指定构建架构。取而代之的是通过设置 `arguments` 来传递目标 ABI 参数。具体做法如下: ```groovy android { ... externalNativeBuild { cmake { path "src/main/cpp/CMakeLists.txt" arguments "-DANDROID_ABI=arm64-v8a", "-DANDROID_PLATFORM=android-21" } } } ``` 上述配置中: - `-DANDROID_ABI=arm64-v8a` 指定了当前构建的目标 ABI。 - `-DANDROID_PLATFORM=android-21` 设置了 Android SDK 版本,确保兼容性[^5]。 此方法可以替代 `targets` 的功能,并正确引导 CMake 编译 `arm64-v8a` 架构的二进制文件。 ### 同时限制 Gradle 构建的 ABI 范围 为了进一步确保 Gradle 不会尝试构建其他架构的 native 库,还需要在 `splits.abi` 中进行限制: ```groovy android { ... splits { abi { reset() include 'arm64-v8a' universalApk false } } } ``` 这样可以防止构建过程中出现多个相同路径的 `.so` 文件冲突问题,例如 `lib/arm64-v8a/libc++_shared.so` 的重复引用错误[^1]。 ### 完整配置示例 以下是一个完整的模块级 `build.gradle` 示例片段,适用于 Gradle 6.x 环境下仅构建 `arm64-v8a` 架构的 native 项目: ```groovy apply plugin: 'com.android.application' android { namespace 'com.example.myapp' compileSdk 30 defaultConfig { applicationId "com.example.myapp" minSdk 21 targetSdk 30 versionCode 1 versionName "1.0" externalNativeBuild { cmake { arguments "-DANDROID_ABI=arm64-v8a", "-DANDROID_PLATFORM=android-21" } } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } externalNativeBuild { cmake { path "src/main/cpp/CMakeLists.txt" } } splits { abi { reset() include 'arm64-v8a' universalApk false } } } ``` ### 注意事项 - **避免多依赖冲突**:若多个依赖库都包含 `libc++_shared.so` 或其他 native 库,建议统一使用 CMake 导入目标(imported targets),而不是将 `.so` 文件放入 `jniLibs` 目录,以避免合并任务中的冲突[^3]。 - **Gradle 升级提示**:如果未来升级到 Gradle 7.x 或更高版本,`targets` 方法将可用,并可简化为 `targets 'arm64-v8a'` 形式[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值