前言
为了能让所有的童鞋都能写出hello world,博客中会详细说明配置的过程,虽然不麻烦,但是博主还是会写清楚的
demo流程
- 新建一个项目
- 在main目录下新建一个jni目录
- 在其中编写c代码
- 在activity中加载这个库,调用方法显示
首先我们新建一个项目
然后在main目录下新建一个jni目录,里面有一个c文件源码
开头的时候不一定非要引用jni.h,但是如果不引用ide没有提示是一方面,另一方面是jni.h里面提供了大量方便开发人员开发的方法
#include <jni.h>
jstring Java_com_move_demo_MainAct_getString(JNIEnv *env) {
return (*env)->NewStringUTF(env, "hello world jin");
}
这里面代码的具体意思不需要现在就搞懂,只要知道这里返回了一个字符串,然后方法名字为什么这么长也是有规律的,因为这个方法名字必须是Java_开头的,然后后面是调用这个方法的java native方法的路径
package com.move.demo;
public class MainAct extends AppCompatActivity {
static {
System.loadLibrary("hello");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.act_main);
((TextView) findViewById(R.id.tv)).setText(add());
}
private static native String getString();
}
看到了吧,那个c语言中的方法就是activity中这个getString方法的路径
然后我们静态初始化的时候加载了库,然后就可以使用了
描述库的Android.mk文件
上面我们可以看到有一个Android.mk文件,这里我们也不详细说明,只要先能跑出Hello World就行,里面的内容是
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello
LOCAL_SRC_FILES := hello.c
include $(BUILD_SHARED_LIBRARY)
表示c的源文件的是hello.c,编译成的库的名字是hello,这也就是我们在Activity中加载的那个库,不可以写错哦,不然运行肯定失败的
最后一点
build文件中让ide去编译c文件并且打包
配置的地方我用红色框框圈出来了
最后运行成功了