参考资料
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。
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目录
- 剪切com_tgf_studyjni_MainActivity.h并拷贝出com_tgf_studyjni_MainActivity.c
- com_tgf_studyjni_MainActivity.c中完成逻辑代码
#include <com_tgf_studyjni_MainActivity.h>
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模块
-
我们可以看到已生成的so
-
我们尝试我们的jni目录删除,然后在main目录下新建jniLibs目录,将我们的so文件拷贝到jniLibs目录中,
2)在其他程序中使用so
- 拷贝so相关文件包至jniLibs目录中
- 新建创建so时的类名,注意包名和类名的一致