本文属于自我复习
主要介绍ndk的使用入门,也就是最简单的helloworld!程序员最爱HelloWorld了!
在练手之前,确保你已经下载并配置好了android ndk开发的环境了,这里就不描述了。
一、简单练习项目结构
(1).如要求在项目根目录下创建jni文件夹,在创建我们的c文件:hellNDK.c
#include <jni.h> /* * 方法名称规定 : Java_完整包名类名_方法名() * JNIEnv 指针 * * 参数介绍 : * env : 代表Java环境, 通过这个环境可以调用Java中的方法 * thiz : 代表调用JNI方法的对象, 即MainActivity对象 */ jstring Java_org_jan_android_ndk_MainActivity_helloFromJNI(JNIEnv *env, jobject thiz) { /* * 调用 android-ndk-r9c\platforms\android-8\arch-arm\usr\include 中jni.h中的方法 * jni.h 中定义的方法 jstring (*NewStringUTF)(JNIEnv*, const char*); */ return (*env)->NewStringUTF(env, "hello world ndk!你好!"); }(2).编写Android.mk文件,这是个Makefile,我们需要了解一些常用的环境变量如下
LOCAL_PATH指定源码的目录,$(call my-dir),学过Linux Shell再熟悉不过了
LOCAL_MODULE编译生成的.so库
LOCAL_SRC_FILES指定加入编译的源文件
LOCAL_LALIBS指定其他库,-l + 库名
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := helloNDK LOCAL_SRC_FILES := helloNDK.c include $(BUILD_SHARED_LIBRARY)
(3).在项目路径下,执行命令:ndk-build
编译出已经命名的helloNDK.so
public class MainActivity extends Activity { static{ //加载静态库文件 System.loadLibrary("helloNDK"); } /* * 声明一个native方法 * 这个方法在Java中是没有实现的, 没有方法体 * 该方法需要使用C语言编写 */ public native String helloFromJNI(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); System.out.println(helloFromJNI()); } public void onClick(View view) { //点击按钮显示从jni调用得到的字符串信息 Toast.makeText(getApplicationContext(), helloFromJNI(), Toast.LENGTH_SHORT).show(); }