初步使用NDK
在windows平台,需要下载Cygwin工具才能编译C文件,长期写JAVA,突然写C程序感觉挺爽的,O(∩_∩)O~
然后到Android官方下载Android NDK.
首先创建一个简单Android Project
编写一个JNI.java类,主要放置native方法
package com.birds.android.ndk; /** * @author gaofeng * @2013-10-25 * */ public class JNI { public native String getString(String str); }
非常简单就是打印一个字符串
编译Eclipse工程,然后cmd进入project到bin/classes目录下,生成一个头文件
输入命令 javah -d ../../jni com.birds.android.ndk.JNI -d是输出到指定目录
在jni目录下建一个jni.c文件,头文件是刚刚生成的 com_birds_android_ndk_JNI.h
开始实现函数体内容
#include "com_birds_android_ndk_JNI.h" JNIEXPORT jstring JNICALL Java_com_birds_android_ndk_JNI_getString (JNIEnv *env, jobject job, jstring jstr) { const char* s1 = "I got a string"; return (*env)->NewStringUTF(env,s1); }
编写一个mk配置文件 用来编译生成so模块
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := first-jni -- 这个是自己起的模块名字
LOCAL_SRC_FILES := jni.c -- 要编译的c源文件
include $(BUILD_SHARED_LIBRARY)
进入工程下面输入ndk-build命令
自动会在项目的libs目录里面生成so模块文件
在Activity里面调用
static { System.loadLibrary("first-jni"); //这地方写模块名字 } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.btn1).setOnClickListener(this); } @Override public void onClick(View v) { if (v.getId() == R.id.btn1) { String s = new JNI().getString(""); Toast.makeText(this, s, Toast.LENGTH_SHORT).show(); } }