原文:

http://www.jianshu.com/p/e689d0196a17

1.配置Anroid Studio(这步是关键)

使用[command+,] 打开Preferences,选择External Tools,点击加号框如下图:

 

点击+号之后,打开Macros 配置宏命令界面,如下图:

 

 

 

 

 

2.配置完成就可以使用javah 、ndk-build、ndk-build clean这三个命令了,那么在哪里使用这些命令,请看下图

 

3.配置完成,我们开始新建工程MyNdk,然后新建jni目录

 

4.修改app下的build.gradle文件, 如下图

ndk{
moduleName "MyLibrary"
}
sourceSets.main{
jni.srcDirs = []
jniLibs.srcDir "src/main/libs"
}

 

5.修改MyNdk下的gradle.properties文件(如果没有此文件,自己新建一个),如下图

android.useDeprecatedNdk=true

 

6.新建MyNdk.java

public class MyNdk {
static {
System.loadLibrary("MyLibrary");
}
public native String getString();
}

 

7.这步开始创建头文件,操作如下图(注意在MyNdk.java文件上点击右键)

 

8.执行完成后jni目录下就创建了com_zhangyp_higo_myndk_MyNdk.h文件,然后我们在jni目录下编写 MyLibrary.cpp、Android.mk、Application.mk这三个文件,代码如下:

 
com_zhangyp_higo_myndk_MyNdk.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_zhangyp_higo_myndk_MyNdk */ #ifndef _Included_com_zhangyp_higo_myndk_MyNdk
#define _Included_com_zhangyp_higo_myndk_MyNdk
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_zhangyp_higo_myndk_MyNdk
* Method: getString
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_zhangyp_higo_myndk_MyNdk_getString
(JNIEnv *, jobject); #ifdef __cplusplus
}
#endif
#endif

MyLibrary.cpp

#include "com_zhangyp_higo_myndk_MyNdk.h"

JNIEXPORT jstring JNICALL Java_com_zhangyp_higo_myndk_MyNdk_getString
(JNIEnv * env, jobject obj){
return (*env).NewStringUTF("This is mylibrary !!!");
}

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := MyLibrary
LOCAL_SRC_FILES =: MyLibrary.cpp
include $(BUILD_SHARED_LIBRARY)

Application.mk

APP_MODULES := MyLibrary
APP_ABI := all

9.如何执行ndk-build,请看下图:(注意在jni目录上点击右键)

 

10.得到so文件,如下图

 

12.在MainActivity中调用,代码如下

public class MainActivity extends AppCompatActivity {

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = (TextView) findViewById(R.id.tv); tv.setText(new MyNdk().getString()); }
}

12.大功告成,可以运行了,oh yet!

如果在执行javah命令时报xxx未找到,可能是没有生成相应的class文件,编译一下就好了

最新文章

  1. hdu 3236 二维背包
  2. 基于jQuery的AJAX和JSON的实例
  3. sqlserver cte递归向上统计
  4. NSOutputStream\NSInputStream
  5. C语言之利用递归将十进制转换为二进制
  6. 做为一个Java程序员,你需要哪些傍身的技能?
  7. .net 做工作流时,生成项目后工具箱里有关工作流的东西不显示解决方法
  8. Opengl4.5 中文手册—E
  9. APP端的网络优化(DNS优化,HTTP优化)
  10. 小白的Python之路 day1 数据类型,数据运算
  11. Android项目目录结构模板以及简单说明【简单版】
  12. SSM框架—环境搭建(MyEclipse+Tomcat+MAVEN+SVN)
  13. 论气机之&quot;左升右降&quot;
  14. asp.net 使用一般处理程序和ajax post实现登录以及记住密码
  15. 使用Spring 简化MyBatis
  16. STL其他--&lt;tuple&gt;用法【C11】
  17. Linux的telent服务
  18. flutter控件之CheckBox
  19. jquery 取消全选和全选功能 不全选
  20. table中的td等长(不随内容大小变化)

热门文章

  1. mysql体系结构和sql查询执行过程简析
  2. 10款 Mac 经典原型设计开发软件推荐
  3. Lock与synchronized的区别(浅谈)
  4. ansible基础-ansible角色的使用
  5. linux下查看主板内存槽与内存信息
  6. centos系统中php7安装memcached 扩展
  7. python mysql安装&amp;&amp;简单基础sql
  8. [C#]一个简易的、轻量级的方法并行执行线程辅助类
  9. http 动态路由
  10. Java - 网络编程完全总结