之前试过用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++的。
源代码地址:http://download.csdn.net/detail/jfzl123/9703140