Android Studio中使用NDK/JNI
之前试过用eclipse配置过NDK/JNI,现在基本开发用Android Studio了,所有现在也用AS配置下。
1. 下载NDK,配置NDK。
从网上下载NDK包,解压,放到自己喜欢的位置。我是放到sdk目录下了。
打开AS,先随便打开个项目,依次点击:File ->ProjectStructure,然后如下图,选择ndk到你解压的路径。
这样第一步就好了。
2. 创建项目。
先新建一个项目,按照正常方式就好。
我建的项目名叫ndkDemo 。
然后一路next .
稍微修改下布局,便于后面显示
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.administrator.ndkdemo.MainActivity">
<TextView
android:id="@+id/tv_msg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
</LinearLayout>
然后再看主MainActivity代码
这里,我们加上个native的方法,这个方法就是我们要调用的C++方法,用于获取个字符串。
public native String getStringFromNative();
然后下面两个是调用。
System.out.println(getStringFromNative());
Toast.makeText(this, getStringFromNative(), Toast.LENGTH_LONG).show();
3. 编译出中间代码
这时我们Make Project一下项目
这里Make Project一下,是为了生成.calss下的文件。
然后就要用到我们的命令行了。
进来后默认是指向当前的工程目录,接下来输入命令:cd app\src\main 回车,切换到main目录下:如图:
然后运行javah命令 :javah -d jni -classpath D:\code\sdk\platforms\android-22\android.jar;….\build\intermediates\classes\debug com.example.administrator.ndkdemo.MainActivity
其中
运行后,再看我们的项目结构,就会发现对了些代码
打开发现已经有了中间代码
4. 编写C++代码
创建jni文件夹下创建jni.c文件
写入代码
#include "com_example_administrator_ndkdemo_MainActivity.h"
JNIEXPORT jstring JNICALL
Java_com_example_administrator_ndkdemo_MainActivity_getStringFromNative
(JNIEnv * env, jobject obj){
return (*env)->NewStringUTF(env,"NDK 测试成功");
}
其中
Java_com_example_administrator_ndkdemo_MainActivity_getStringFromNative方法要和头文件中的一致。
最后在运行前要配置下gradle文件
ndk{
moduleName “MyJni”
ldLibs “log”
abiFilters “armeabi”, “armeabi-v7a”, “x86”
}
然后看下gradle.properties中是否加入了下面这句话
android.useDeprecatedNdk=true
5. 运行
哈哈,看到弹出的提示了吧,这个字符串就是来自C++的。