java native interface (JNI)学习
java和C/C++各有优缺点,有时用C/C++实现更好,所以需要调用native方法
首先下载好NDK
NDK下载
下面步骤:
1:先创建一个类,其中有native方法
(System.loadLibrary("JniTest");JniTest:引入的库名)

public class MyJNI {    public static native String getString();    static {        System.loadLibrary("JniTest");    }}

2,使用javac生成.class文件
根据你的目录和包名执行下面命令
D:\develop\JniTest>cd D:\develop\JniTest\app\src\main\java\han\jnitest\

D:\develop\JniTest\app\src\main\java\han\jnitest>javac MyJNI.java

如图你会生成一个class文件

3,使用javah生成.h文件
执行(javah -jni 你的包名加类名)
javah -jni han.jnitest.MyJNI

切换到java目录(我也不知道为啥,不切换就找不到文件)

所以正确如图

这个时候就生成了.h文件,我的就在java目录下

/* DO NOT EDIT THIS FILE - it is machine generated */#include/* Header for class han_jnitest_MyJNI */#ifndef_Included_han_jnitest_MyJNI#define_Included_han_jnitest_MyJNI#ifdef__cplusplusextern"C"{#endif/** Class:    han_jnitest_MyJNI* Method:    getString* Signature: ()Ljava/lang/String;*/JNIEXPORT jstring JNICALL Java_han_jnitest_MyJNI_getString(JNIEnv *, jclass);#ifdef__cplusplus}#endif#endif

这个时候我们要对其修改

/* DO NOT EDIT THIS FILE - it is machine generated */#include/* Header for class han_jnitest_MyJNI */#ifndef_Included_han_jnitest_MyJNI#define_Included_han_jnitest_MyJNI#ifdef__cplusplusextern"C"{#endif/** Class:    han_jnitest_MyJNI* Method:    getString* Signature: ()Ljava/lang/String;*/JNIEXPORT jstring JNICALL Java_han_jnitest_MyJNI_getString(JNIEnv *env, jclass jobj){return(*env)->NewStringUTF(env,"JNI Test");}#ifdef__cplusplus}#endif#endif

4,添加配置
main目录下创建jni目录
创建一个.c文件名字随意(我的是JniTest.c)把han_jnitest_MyJNI.h修改后的内容复制进来
再创建一个util.c空文件(没有会报空,也不知道为啥,好像其他名字也行..)
gradle.properties文件配置

android.useDeprecatedNdk=true

local.properties文件配置ndk路径(你自己的路径)

ndk.dir=D\:\\sdk\\ndk\\android-ndk-r10b

build.gradle文件配置

ndk {//JniTest生成的so名字moduleName"JniTest"abiFilters"armeabi","armeabi-v7a","x86"}

一切都完成之后rebulid project一下

生成的so文件路径XXXXX\JniTest\app\build\intermediates\ndk\debug\lib

main下创建一个jniLibs目录 把生成的文件复制然后调用

效果如下

第一次使用添加代码怪怪的,
有什么疑惑或者不懂的 可在下面留言一起学习哈
如有错误也请指出留言谢谢

更多相关文章

  1. Android(安卓)字体大小怎么自适应不同分辨率
  2. android 混淆 gson
  3. 使用apktool工具遇到could not decode arsc file的解决办法
  4. HAL层,.sensors.h 头文件分析
  5. framework
  6. Android(安卓)Studio与Eclipse SDK无法更新解决方案
  7. Android学习--《数据的保存》
  8. apk反编译和再编译
  9. Android的配置

随机推荐

  1. EditText设置不自动弹出键盘
  2. android桌面快捷方式添加 删除 更新 自动
  3. MediaScannerReceiver
  4. 2011.07.18——— android AlphaBitmap
  5. android:gravity的值可以使用|连接多个属
  6. Android——AppWidgetProvider应用
  7. Android获取当前WiFi的MAC地址-适配所有
  8. Android 中ListView的应用
  9. Android休眠唤醒机制简介(一)
  10. Android屏幕横屏竖屏设置技巧