Android Studio 2.2 ndk开发环境 gradle配置
来源:互联网 发布:麦夸特算法 编辑:程序博客网 时间:2024/05/22 01:33
AndroidStudio2.2中
对于ndk/jni 建议使用cmake进行编译
而对于纯粹的android程序员来说,cmake不是经常接触的方案,我在遇到jni相关时也遇到了一些问题,这里抛砖引玉吧
开发环境:
Android SDK/NDK
Android Studio 2.2
友情提示:更新请科学上网
准备工作
其实demo永远是最好的老师
我们直接自己创建一个Project
好在AS对于对于ndk的支持越来越友好
选中c++支持,这样创建出来的gradle文件就会自动创建相关的,有助于我们学习
自动生成的核心文件
build.gradle
MainActivity.java
native-lib.cpp
CMakelists.txt
MainActivity.java
MainActivity.java
System.loadLibrary("native-lib"); //加载native-lib库 ... public native String stringFromJNI();//指向cpp文件中的方法
左边有一个箭头,这个点击可以直接跳到cpp文件中的方法
gradle
project级别的和传统没有差别
看module级的
apply plugin: 'com.android.application'android { ... externalNativeBuild { cmake { cppFlags "" } } } ... externalNativeBuild { cmake { path "CMakeLists.txt" } } ndk{ abiFilters 'armeabi' //打包的cpu方案 }}dependencies { ...}
看到核心差别就是这几句
cppFlags 先不去管
这里有一个path "CMakeLists.txt"
这个指向了一个txt文件
打开这个文件
CmakeLists.txt
总体语法是 #为单行注释
指定最低版本号
添加库文件
找到指定的库
连接目标库
通过观察这里有native-lib的地方就是指定的几处
创建自己的library
接下来模仿这个语法来写个自己的库
在cpp文件夹下,添加一个
math-lib.cpp
math-lib.h
接着修改cmake
...cmake_minimum_required(VERSION 3.4.1)#最低版本号...add_library( ... native-lib #库的名称 ... SHARED #是否设置为共享库 ... src/main/cpp/native-lib.cpp #库文件的指向 )add_library(#这里是我自定义的demo库 math-lib SHARED src/main/cpp/math-lib.cpp src/main/cpp/math-lib.h )...find_library( # Sets the name of the path variable. log-lib... log )...target_link_libraries( # Specifies the target library. native-lib math-lib ... ${log-lib} )
在native-lib的位置填写自己的library名称,和文件位置
接着在MainActivity中写一个native方法 private native int add(int a,int b);
在静态代码块中 加载库
库的名称是math-lib
static{ System.loadLibrary("math-lib"); }
修改cpp文件
#include <jni.h>#include <string>//// Created by kikt on 2016/10/21.//#include "math-lib.h"extern "C"JNIEXPORT jint JNICALLJava_com_kikt_ndkdemo1_MainActivity_add(JNIEnv *env, jobject instance, jint a, jint b) { return a+b;}
这里比较简单,返回a+b的返回值就可以了
不会写JNI的c方法名的朋友,AS现在已经可以通过提示自动生成的,好方便!
当然我们还是需要知道下如何自己生成,万一哪天AS抽风了呢
这里推荐一个我很久前看到的blog使用Javah 生成C/C++头文件的误区
这里有一个特别要注意的地方,因为这个是cpp文件 和c文件不同的是 必须加上extern “C” 防止编译器将方法改名,否则会造成natvie方法调用不到,抛出异常
后记
会写这个文章是因为头一阵研究视频编解码的时候引入了一个第三方库GPUImage的时候遇到了编译不通过,无奈换回AS2.1的问题正常编译运行的问题
因为AndroidStudio 2.2正式版刚刚开放加载一段时间,有一些朋友在ndk开发时可能会遇到各种问题,这里仅做一个入门的参考
欢迎留言交流
- Android Studio 2.2 ndk开发环境 gradle配置
- Android Studio利用Gradle配置NDK-JNI开发环境
- Android开发——Android Studio使用新的Gradle构建工具配置NDK环境
- Android开发——Android Studio使用新的Gradle构建工具配置NDK环境
- 【Android】Android Studio配置ndk开发环境
- Android Studio开发配置NDK环境
- android-studio(1):配置NDK开发环境
- Android studio之配置NDK开发环境
- Android Studio NDK开发环境配置
- android studio配置ndk开发环境
- android studio NDK开发环境配置
- 环境配置之Android Studio开发NDK
- Android Studio 配置NDK开发环境
- 环境配置之Android Studio开发NDK
- Android Studio NDK开发-环境配置
- Android studio配置NDK开发环境
- Android studio开发NDK环境配置
- android studio 2.2.2配置NDK开发环境
- Hibernate高级特性的随堂笔记
- ab 模拟测试秒杀存在的问题
- 一球从M米高度自由下落,每次落地后返回原高度的一半,再落下。它在第N次落地时反弹多高?共经过多少米?保留两位小数
- Windows批处理 - 获取目录结构
- Hadoop HA高可用集群搭建(2.7.2)
- Android Studio 2.2 ndk开发环境 gradle配置
- OPENCV资料总结
- 最小的k个数
- ShareSDK 分享
- 【操作系统-Windows】在文件右键菜单 发送 中添加自定义的目标文件夹
- 获取未来几天的日期
- 《Procedure Call Standard for the ARM® Architecture》之(5.1)
- JavaScript个人笔记:js模块化开发seajs实战拖拽
- openstack网络(neutron)模式之GRE的基本原理