前言为了能让所有的童鞋都能写出helloworld,博客中会详细说明配置的过程,虽然不麻烦,但是博主还是会写清楚的demo流程新建一个项目在main目录下新建一个jni目录在其中编写c代码在activity中加载这个库,调用方法显示首先我们新建一...
前言
为了能让所有的童鞋都能写出hello world,博客中会详细说明配置的过程,虽然不麻烦,但是博主还是会写清楚的
demo流程
- 新建一个项目
- 在main目录下新建一个jni目录
- 在其中编写c代码
- 在activity中加载这个库,调用方法显示
首先我们新建一个项目

然后在main目录下新建一个jni目录,里面有一个c文件源码

开头的时候不一定非要引用jni.h,但是如果不引用ide没有提示是一方面,另一方面是jni.h里面提供了大量方便开发人员开发的方法
#include jstring Java_com_move_demo_MainAct_getString(JNIEnv *env) { return(*env)->NewStringUTF(env, "hello world jin"); }
这里面代码的具体意思不需要现在就搞懂,只要知道这里返回了一个字符串,然后方法名字为什么这么长也是有规律的,因为这个方法名字必须是Java_开头的,然后后面是调用这个方法的java native方法的路径
package com.move.demo; publicclassMainActextendsAppCompatActivity {static { System.loadLibrary("hello"); } @OverrideprotectedvoidonCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.act_main); ((TextView) findViewById(R.id.tv)).setText(add); } privatestaticnative 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文件并且打包

配置的地方我用红色框框圈出来了
最后运行成功了
