Mac电脑AndroidStudio2.2使用NDK开发JNI
2016-12-13 00:00
429 查看
好久没有搞JNI了,听说AndroidStudio可以调试C++了,今天把JNI开发再熟悉下。
在AndroidStudio中可以直接下载JNI开发的相关NDK和工具,不需要单独下载NDK了。
这样,编译JNI有两种方式,ndk-build和CMake
一、ndk-build方式
1. 新建Project
2. 创建Java类,添加本地方法
3. 选择[build]->[Make Project]生成class
4. 使用javah命令生成.h文件
5. 生成的com_outman_myjni_HelloJni.h文件如下
默认有2个参数,重点说下第二个参数
jclass java代码方法,是static类型的,则生成的是jclass类型参数
jobject java代码方法,是非static类型的,则生成的是jobject类型参数
6. 在jni文件夹中创建cpp文件
7. 在jni文件夹创建Android.mk文件
8. [build]->[Make Project]编译工程
如果未安装XCode,会弹窗要求安装,安装即可
9. 配置gradle支持
有种简单方法,就是通过AndroidStudio Link C++功能
选中Android.mk -> File -> Link C++ 选择ndk-build,并选择工程中的Android.mk文件
10. 完成后,会在build.gradle中生成ndk支持
11. gradle.properties中添加支持
12. 完成以上,build工程即可生成.so文件
不过要注意,so没有生成在lib下,而是在
app->build->intermediates->ndkBuild
但不影响使用
二、CMake方式
1. 下载完成插件后,新建Project时,选中Include C++ Support即可
2. 生成的Project会自动生成Demo,就不详细介绍了。
三、ndk-build和CMake的一点区别
主要是配置的不同,不再详细描述,可以参考另一篇转载的文章。
https://my.oschina.net/android520/blog/805249
在AndroidStudio中可以直接下载JNI开发的相关NDK和工具,不需要单独下载NDK了。
这样,编译JNI有两种方式,ndk-build和CMake
一、ndk-build方式
1. 新建Project
2. 创建Java类,添加本地方法
public class HelloJni { static { System.loadLibrary("hello-jni"); } public static native String getJniString(); }
3. 选择[build]->[Make Project]生成class
4. 使用javah命令生成.h文件
// 命令行进入 cd app/src/main // 在src/main下生成jin文件夹和.h文件 javah -d jni -classpath ./java com.outman.myjni.HelloJni
5. 生成的com_outman_myjni_HelloJni.h文件如下
默认有2个参数,重点说下第二个参数
jclass java代码方法,是static类型的,则生成的是jclass类型参数
jobject java代码方法,是非static类型的,则生成的是jobject类型参数
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_outman_myjni_HelloJni */ #ifndef _Included_com_outman_myjni_HelloJni #define _Included_com_outman_myjni_HelloJni #ifdef __cplusplus extern "C" { #endif /* * Class: com_outman_myjni_HelloJni * Method: getJniString * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_outman_myjni_HelloJni_getJniString (JNIEnv *, jclass); #ifdef __cplusplus } #endif #endif
6. 在jni文件夹中创建cpp文件
#include <jni.h> #include <com_outman_myjni_HelloJni.h> JNIEXPORT jstring JNICALL Java_com_outman_myjni_HelloJni_getJniString (JNIEnv *env, jclass obj) { char *result = "this is call from JNI C++"; jstring jstr = env->NewStringUTF(result); return jstr; }
7. 在jni文件夹创建Android.mk文件
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := hello-jni LOCAL_C_INCLUDES+= $(LOCAL_PATH) SRC_FILES := $(wildcard $(LOCAL_PATH)/*.cpp) SRC_FILES := $(SRC_FILES:$(LOCAL_PATH)/%=%) LOCAL_SRC_FILES := $(SRC_FILES) #LOCAL_LDLIBS := -llog -landroid LOCAL_LDLIBS := -llog include $(BUILD_SHARED_LIBRARY)
8. [build]->[Make Project]编译工程
如果未安装XCode,会弹窗要求安装,安装即可
9. 配置gradle支持
有种简单方法,就是通过AndroidStudio Link C++功能
选中Android.mk -> File -> Link C++ 选择ndk-build,并选择工程中的Android.mk文件
10. 完成后,会在build.gradle中生成ndk支持
android { defaultConfig { ndk{ moduleName "hello-jni" abiFilters "armeabi" } } externalNativeBuild { ndkBuild { path 'src/main/jni/Android.mk' } } }
11. gradle.properties中添加支持
android.useDeprecatedNdk=true
12. 完成以上,build工程即可生成.so文件
不过要注意,so没有生成在lib下,而是在
app->build->intermediates->ndkBuild
但不影响使用
二、CMake方式
1. 下载完成插件后,新建Project时,选中Include C++ Support即可
2. 生成的Project会自动生成Demo,就不详细介绍了。
三、ndk-build和CMake的一点区别
主要是配置的不同,不再详细描述,可以参考另一篇转载的文章。
https://my.oschina.net/android520/blog/805249
相关文章推荐
- AS2.2使用CMake方式进行JNI/NDK开发
- AS2.2使用CMake方式进行JNI/NDK开发
- AndroidStudio2.2 Preview3中NDK开发之CMake和传统 JNI在目录结构和配置文件上的区别(转载)
- 自从AndroidStudio更新到2.2,就有了CMake和传统JNI两种开发NDK的方法,主要就是在目录结构和build.gradle上的区别,下面我们将分别介绍目录区别和build.gr
- AndroidStudio2.2 Preview3中NDK开发之CMake和传统 JNI在目录结构和配置文件上的区别
- AndroidStudio2.2 Preview3中NDK开发之CMake和传统 JNI在目录结构和配置文件上的区别
- 关于使用androidstudio2.2通过CMake,NDK开发OpengGL程序中出现的extern “C”问题
- AndroidStudio 进行 JNI / NDK 开发:初步配置及使用
- AS2.2使用CMake方式进行JNI/NDK开发
- AndroidStudio中NDK开发环境配置和jni的简单使用(HelloWord)
- JNI和NDK编程-使用AndroidStudio进行NDK开发
- AndroidStudio2.2 Preview3中NDK开发之CMake和传统 JNI在目录结构和配置文件上的区别
- 不使用Cygwin,在eclipse中快速开发JNI,一键生成C头文件.h,以及一键使用NDK交叉编译
- Android Studio上面使用Ndk JNI 开发工程
- 不使用Cygwin,在eclipse中快速开发JNI,一键生成C头文件.h,以及一键使用NDK交叉编译
- Android-使用Android studio 进行NDK-JNI开发实例(一)
- JNI开发第二步:20130726 NDK_JNI使用
- Android中使用NDK环境开发JNI程序例子
- AndroidStudio如何配置NDK/JNI开发环境
- Android(安卓)开发通过NDK调用JNI,使用opencv做本地c++代码开发配置方法实现边缘检测代码(2)