JNI&NDK

参考资料

Android Studio JNI开发入门教程
android studio之jni(上)生成so文件
编写so库,并在其他工程里使用


目录

  • 1)JNI&NDK
  • 2)在其他程序中使用so

1)JNI&NDK()

  • JNI(Java Native Interface):JNI是java语言提供的Java和C/C++相互沟通的机制,Java可以通过JNI调用本地的C/C++代码,本地的C/C++的代码也可以调用java代码。JNI 是本地编程接口,Java和C/C++互相通过的接口。
  • NDK下载地址是一系列工具的集合。它提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。
JNI&NDK_第1张图片
屏幕快照 2017-08-11 下午3.19.20.png
public class MainActivity extends AppCompatActivity {
    public static native String helloJni();
    public static native int addCalc(int a ,int b);
    static {
        System.loadLibrary("hello_jni");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView txt1 = (TextView) findViewById(R.id.txt1);
        TextView txt2 = (TextView) findViewById(R.id.txt2);
        txt1.setText(helloJni());
        txt2.setText(String.valueOf(addCalc(10,10)));
    }
}
  • 利用javah命令生成JAVA所对应的JNI头文件,1、打开终端,2、将目录定位到java目录下,3、通过javah产生头文件。


    JNI&NDK_第2张图片
    屏幕快照 2017-08-11 下午2.47.44.png
  • 创建JNI目录
JNI&NDK_第3张图片
屏幕快照 2017-08-11 下午3.20.33.png
  • 剪切com_tgf_studyjni_MainActivity.h并拷贝出com_tgf_studyjni_MainActivity.c
JNI&NDK_第4张图片
屏幕快照 2017-08-11 下午3.21.52.png
  • com_tgf_studyjni_MainActivity.c中完成逻辑代码
#include 
JNIEXPORT jstring JNICALL Java_com_tgf_studyjni_MainActivity_helloJni
  (JNIEnv *env, jclass jobj) {
    return (*env)->NewStringUTF(env,"Hello JNI!");
}

JNIEXPORT jint JNICALL Java_com_tgf_studyjni_MainActivity_addCalc
  (JNIEnv *env, jclass jobj, jint ja, jint jb) {
  return ja + jb;
}
  • 添加一个名为hello_jni的jni模块


    JNI&NDK_第5张图片
    添加ndk
  • 我们可以看到已生成的so


    JNI&NDK_第6张图片
    屏幕快照 2017-08-11 下午3.26.24.png
  • 我们尝试我们的jni目录删除,然后在main目录下新建jniLibs目录,将我们的so文件拷贝到jniLibs目录中,


    JNI&NDK_第7张图片
    屏幕快照 2017-08-11 下午3.44.09.png

2)在其他程序中使用so

JNI&NDK_第8张图片
在其他程序中使用so
  • 拷贝so相关文件包至jniLibs目录中
  • 新建创建so时的类名,注意包名和类名的一致

你可能感兴趣的:(JNI&NDK)