Android Jni編寫

Android經常會調用到jni庫,作爲廠商經常需要提供jni庫給用戶,一方面是對客戶提供接口,方便客戶操作。

另一方面,算法或者設備操作細節不方便對客戶公開,對我們代碼起到保密作用。

以建立一個Pwm爲例,以下分幾步介紹jni創建,示例打印log,不具體操作設備文件。

文章分爲5步:1、NDK環境配置 2、創建jni文件 3、激活NDK 4、Java編寫 5、運行演示結果

1、NDK環境配置

eclipse基本配置就不描述了.NDK是編譯jni的工具,可以理解成google修改過的可以編譯Makefile的工具。

Window->Preferences->Android->NDK,配置NDK路徑如下圖。

2、創建jni文件

創建jni目錄

創建pwm.c文件在新建的jni目錄下.函數命名規則Java_包名_類名_函數名(...),必須和java包名類名一樣,如果不一致,運行時候會報加載庫錯誤。(參考“4、Java編寫”的包名和類名)

#include <jni.h>
#include <android/log.h>
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, "pwm", __VA_ARGS__)
JNIEXPORT int JNICALL Java_com_oo_pwm_Pwm_open(JNIEnv * env, jobject jobj)
{
	LOGD("pwm open\n");//打印Log
	return 0;
}

編寫Android.mk文件在新建的jni目錄下

LOCAL_PATH:= $(call my-dir)  
include $(CLEAR_VARS)  

LOCAL_MODULE:= libpwm   #庫名
LOCAL_SRC_FILES:= pwm.c #源文件
LOCAL_LDLIBS :=-llog    #打印Log需要的庫
include $(BUILD_SHARED_LIBRARY) #生成共享庫

注意這部分代碼,不能直接複製到你的工程,否則eclipse識別錯誤。需要自己手動輸入。


3、激活NDK

Android Tools->Add Native Support

Project->Build Project,編譯生成pwm.so

C:\jre\android-ndk-r8e\ndk-build.cmd all 
"Compile thumb : pwm <= pwm.c
SharedLibrary  : libpwm.so
Install        : libpwm.so => libs/armeabi/libpwm.so<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">	</span>

4、Java編寫

建立Pwm類到com.oo.pwm包下,請注意這裏的包名和類名。

Pwm.java代碼

建立Pwm接口

package com.oo.pwm;

public class Pwm {
	static {
		System.loadLibrary("pwm");//lib不用寫
	}
	public native int open();

}
MainActivity.java代碼

調用Pwm接口

package com.oo.pwm;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends Activity {

	private Pwm mPwm;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		mPwm = new Pwm();
		mPwm.open();
	}	
}

5、運行演示結果

提示"pwm open",成功執行到jni open函數



錯誤處理:

找不到include文件

Project->Properties->C/C++ General->Path and Symbols

點擊Add,加入ndk的include路徑

點擊Export

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章