作者 : 韩曙亮
转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/52088039
最近在移植一个 JNI 项目, 比较纠结, Android Studio 中 NDK 到底怎么配置啊... Android 官方的示例总是不稳定, 这两个月都改变了好几次了, Gradle 插件之前支持的后来也不支持了, 遇到各种问题, 最后还是用命令行编译, 然后将 so 库导入到 Android Studio 项目中;
1. NDK 开发遇到的问题NDK 开发遇到的问题 :
-- 之前使用的 Gradle 插件版本 : classpath 'com.android.tools.build:gradle:2.2.0-alpha4' ;
-- 之前使用的 Gradle 版本 : distributionUrl=https\://services.gradle.org/distributions/gradle-2.14-all.zip;
-- 这个版本使用 ndk 使用的配置是 : 在 Moudle 中的 build.gradle 中 的 android 中的 defaultConfig 中 如下配置, 即可编译 jni 代码;
externalNativeBuild{
ndkBuild{
path 'src/main/jni/Android.mk'
}
}
-- 插件版本低错误 : 昨天用的好好的, 今天打开居然编译不通过, 应该是更新了最新的 Android Studio 导致的, 报出如下错误 :
Error:(1, 0) Plugin is too old, please update to a more recent version, or set ANDROID_DAILY_OVERRIDE environment variable to "dad44248ed636c3b2fa21c7dea26e2d05b0d650b"
-- 错误原因 : 经过检查发现是 gradle 插件 和 工具 版本太低, 查询最新的工具版本;
-- 查询 Gradle 插件最新版本 : 查询地址 https://jcenter.bintray.com/com/android/tools/build/gradle/, 经查询 最新版本是 2.2.0-alpha6;
-- 查询 Gradle 工具最新版本 : 查询地址 http://services.gradle.org/distributions, 最新版本是 gradle-2.14.1-all.zip;
-- gradle-wrapper.properties 配置 :
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
-- Gradle 插件配置 :
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.0-alpha6'
//classpath 'com.android.tools.build:gradle:2.1.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
-- 插件不支持 : 居然不支持 ndk path 设置 Android.mk 了, 居然不支持了 ... 无语了;
Gradle sync failed: Could not find method path() for arguments [src/main/jni/Android.mk] on object of type com.android.build.gradle.internal.dsl.ExternalNativeNdkBuildOptions.
Consult IDE log for more details (Help | Show Log)
--
其它问题 : 不仅如此, C 项目的代码跳转 查看 功能也不能使用了, 代码也不让好好看了, 不稳定版本各种问题;
2. 暂时方案 Android 工程直接使用 命令行编译好的 so 库
暂时的方案 :
-- 使用命令行 ndk-build 生成 so 库, 然后 Android 项目中直接使用 so 库;
-- 编译项目 : 进入 c 语言项目, 直接使用 ndk-build 编译, 确保你的 Android.mk 是正确的;
bogon:jni octopus$ ndk-build
[armeabi] Compile thumb : fluidsynth-android
关注
打赏
- 【Android Gradle 插件】Gradle 自定义 Plugin 插件 ③ ( 自定义插件作用 | Android Gradle 插件的扩展 | 自定义 Extension 扩展 )
- 【Android Gradle 插件】Gradle 构建生命周期 ③ ( BuildListener 构建监听器 | TaskExecutionGraphListener 任务执行图监听器 )
- 【Android Gradle 插件】Gradle 构建生命周期 ② ( Gradle 类的添加构建生命周期监听器函数 | Gradle#addListener 函数 )
- 【Android Gradle 插件】Gradle 构建生命周期 ① ( 分析构建脚本 | 执行初始化配置 | 执行 Gradle 任务 | Project#beforeEvaluate 函数 )
- 【Android Gradle 插件】自定义 Gradle 任务 ⑨ ( 控制 Gradle 执行任务顺序 | Task#finalizedBy 函数 | 控制 Gradle 执行任务顺序示例分析 )
- 【Android Gradle 插件】自定义 Gradle 任务 ⑧ ( 控制 Gradle 执行任务顺序 | Task#shouldRunAfter 函数 | 三个函数使用场景对比 )
- 【Android Gradle 插件】自定义 Gradle 任务 ⑦ ( 控制 Gradle 执行任务顺序 | Task#dependsOn 函数 | Task#mustRunAfter 函数 )
- 【数学分析】集合 ① ( 集合概念 | 集合表示 | 常用的数集合 | 集合的表示 )
- 【数学分析】学科简介 ( 初等数学缺陷 | 微分与积分 | 学习数学分析的目的 | 数学分析与高等数学对比 )
- 【Android Gradle 插件】自定义 Gradle 任务 ③ ( Gradle 自定义任务创建方法 Project#task 函数 | Task#doFirst 函数用法 )