Android NDK开发之最简单的As版本 hello world

时间:2022-07-16 07:32:13

前言

为了能让所有的童鞋都能写出hello world,博客中会详细说明配置的过程,虽然不麻烦,但是博主还是会写清楚的

demo流程

  • 新建一个项目
  • 在main目录下新建一个jni目录
  • 在其中编写c代码
  • 在activity中加载这个库,调用方法显示

首先我们新建一个项目

Android NDK开发之最简单的As版本 hello world

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

Android NDK开发之最简单的As版本 hello world

开头的时候不一定非要引用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文件并且打包

Android NDK开发之最简单的As版本 hello world

配置的地方我用红色框框圈出来了

最后运行成功了

Android NDK开发之最简单的As版本 hello world