Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android NDk開發系列(Hello JNI)

Android NDk開發系列(Hello JNI)

編輯:關於Android編程

前言

本篇博客主要記錄NDK開發之入門小demo,雖說NDK開發包裡面有hellojni的項目,但是博主還是記錄一下學習的過程吧.AS2.2現在對NDK支持的已經很好了,但是博主學習NDK還是采用eclipse作為工具,學的是一個思路,工具只是使用方式不同,所以不用糾結工具的事情了哦

1.首先創建一個普通的Android項目

\

\

創建好我們的工程之後呢,我們需要先書寫一個本地方法來使用JNI

xml布局

Activity代碼

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

	// 按鈕的點擊事件處理
	public void bt_click(View v) {
		Button bt = (Button) v;
		bt.setText(getString());
	}

	/**
	 * 調用c代碼返回一個字符串
	 * 
	 * @return
	 */
	private native String getString();

}

可以看到我們的代碼很簡單,點擊按鈕觸發bt_click事件,然後獲取本地方法返回的字符串,然後顯示在按鈕上,這時候我們的app層面的代碼已經寫好了,本地方法是需要我們使用c代碼去實現的

添加本地的支持

\

右鍵項目添加本地支持

\

這個是幫你創建的動態鏈接庫的名稱,也就是我們經常使用的第三方sdk中經常看到的.so文件,點擊確定

確定以後你會發現在項目中多了一個文件夾jni,裡面還有一個.cpp的文件,還有個Android.mk文件

\

我們更改.cpp後綴為.c,然後打開這個文件

\

裡面沒有任何的代碼,這是需要我們自己去寫Activity中那個本地方法的實現的

實現本地方法

使用javah命令生成頭文件

右鍵項目拿到項目的目錄

\

來到項目的目錄下面,並且進入src目錄

\

使用cmd進入該目錄

\

生成頭文件

\

後面的是你的activity的包名+Activity名稱

成功就是不提示任何信息,如果你的activity中有中文會失敗,提示不可映射的字符

成功之後在src目錄中生成了一個頭文件

\

我們打開它,復制其中的實現方法

\

紅色框框裡面的就是我們需要復制的代碼,然後我們復制到我們的.c文件中,去掉最後的封號,加上一對花括號,然後在括號中加上變量的名字,然後我們返回一個字符串

#include 


JNIEXPORT jstring JNICALL Java_com_xiaojinzi_jnidemo_MainActivity_getString
  (JNIEnv * env, jobject jb){

	return (*env) ->NewStringUTF(env,"welcome to JNI world");

}

實現方法必須是以下的格式:Java_包名_類名_方法名

NewStringUTF是一個JNI中的函數,現在可以先不管,知道他能返回一個字符串就行了,內容是後面的

"welcome to JNI world"

這時候我們的實現方法寫好了,然後我們需要生成.so文件

編輯Application.mk文件

在jni文件夾中新建一個Application.mk文件,裡面的內容為

APP_ABI := all

就一句話,是表示生成支持所有平台的.so文件

修改Android.mk

注意還有一點,打開我們的Android.mk文件

\

這裡說明了實現的文件是哪個,我們剛剛改成了.c文件,所以這裡需要改成JniDemo.c

\

在Activity中加載這個庫

最後我們在activity中加載這個庫,就可以運行項目啦

public class MainActivity extends Activity {
	
	static{
		System.loadLibrary("JniDemo");
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

	public void bt_click(View v) {
		Button bt = (Button) v;
		bt.setText(getString());
	}

	private native String getString();

}

最後項目成功運行

\

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved