Android Studio NDK开发

1 在AS的设置中找到SDK Tools中找到ndk选择 点击apply 按照提示安装好


Android Studio NDK开发_第1张图片

2在需要用到C的类中进行声明native方法
如:

private nativeStringinit(String deviceInfo);

并且加入以下代码

static{
     System.loadLibrary("file-watch");//加载so文件 该步骤可以放到最后,该名称为类库的别名
}

3切换到项目的mian目录 使用javah命令生成头文件
先对项目进行clean project命令 然后在rebuild project
cd 到项目的main目录下 在terminal输入该指令

javah  -d jni -classpath /Users/DevilMayCry/Android-SDK/extras/android/m2repository/com/android/support/appcompat-v7/23.2.1/appcompat-v7-23.2.1-sources.jar:/Users/DevilMayCry/Android-SDK/platforms/android-19/android.jar:/Users/DevilMayCry/Android-SDK/extras/android/m2repository/com/android/support/support-v4/23.2.1/support-v4-23.2.1-sources.jar:../../build/intermediates/classes/debug  com.qp.weirdnews.activity.MainActivity

javah:生成jni的头文件
-d:jni文件生成指定目录(也可以右键手动生成new--folder--jni folder)
-classpath:环境变量(我是这么理解的,没有具体去查),如我用到c的类继承了AppCompatActivity类,该类在v7的包中的support-v4-23.2.1-sources.jar,所以需要在classpath中加入该jar包的路径,通常android.jar包也会用到,所以也也加入该路径。中间用:冒号隔开(在window中需要用分号;隔开请注意) 最后到../../build/intermediates/classes/debug中用权限类名访问需要用到jni的类。
这样就会在jni文件中生成头文件如图

Android Studio NDK开发_第2张图片

4根据javah产生的头文件进行修改并实现c源代码的文件
在相应的头文件中找到这样的方法(这种方法是根据用到的类的类名加方法名还有一些规则组成)

JNIEXPORTjstringJNICALLJava_com_qp_weirdnews_activity_MainActivity_init
(JNIEnv*,jobject,jstring);

然后在jni中创建一个c文件

#include
#include
#include
#include"com_qp_weirdnews_activity_MainActivity.h"
JNIEXPORTjstringJNICALLJava_com_qp_weirdnews_activity_MainActivity_init
(JNIEnv* env,jobject obj,jstring string){
return(*env)->NewStringUTF(env,"my jni");
}

5 设置android.mk与application.mk文件

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := file-watch//该c库的别名
LOCAL_SRC_FILES := file-watch.c//c文件的文件名
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog
include $(BUILD_SHARED_LIBRARY)

上面是android.mk文件(其实就是一个文本文件)
application.mak文件内容可以是空

6在gradle properties文件中加入
在文件的最后一行加入:

android.useDeprecatedNdk=true

7然后在app文件下得build.gradle ->defaultConfig括号内添加如下代码

ndk {
moduleName "file-watch"//该类库的别名
}

还有别忘了在用到jni的类中加入

static{
System.loadLibrary("file-watch");//加载so文件 该名称为类库的别名
}

8编译

cd 到jni目录下 运行ndk-build 命令 如果没有问题 那就可以跑程序了。

9兼容
如果android studio版本为2.2运用了cmake
则需在在app文件下得build.gradle ->android下面加入代码

externalNativeBuild {    
    ndkBuild {     
       path file("src\\main\\jni\\Android.mk")    
     }
}

你可能感兴趣的:(Android Studio NDK开发)