歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Android圖文介紹NDK安裝及簡單jni demon的實現

Android圖文介紹NDK安裝及簡單jni demon的實現

日期:2017/2/28 14:34:56   编辑:Linux教程

1.背景

Android NDK可以用來編譯android的native方法,也可以將c和c++的代碼編譯成.so文件,讓android程序運行。

2.NDK安裝(linux環境)

(1)下載對應的ndk版本,在shell裡輸入如下命令

gedit ~/.bashrc

(2)打開bash文件,添加下載的ndk路徑

NDKROOT=/home/CORPUSERS/28852262/android-ndk-r9c

export PATH=$NDKROOT:$PATH

(3)輸入如下命令,然後重啟shell

source /etc/profile

(4)在shell中輸入ndk-build,出現如下狀態說明安裝成功

3.jni第一個demon helloworld

(1)編寫hello-jni.c文件。

#include <string.h>
#include <jni.h>

/* This is a trivial JNI example where we use a native method
* to return a new VM String. See the corresponding Java source
* file located at:
*
* apps/samples/hello-jni/project/src/com/example/hellojni/HelloJni.java
*/
jstring
Java_com_example_hellojni_HelloJni_aa( JNIEnv* env,
jobject thiz )
{
#if defined(__arm__)
#if defined(__ARM_ARCH_7A__)
#if defined(__ARM_NEON__)
#define ABI "armeabi-v7a/NEON"
#else
#define ABI "armeabi-v7a"
#endif
#else
#define ABI "armeabi"
#endif
#elif defined(__i386__)
#define ABI "x86"
#elif defined(__mips__)
#define ABI "mips"
#else
#define ABI "unknown"
#endif

return (*env)->NewStringUTF(env, "Hello from JNI ! Compiled with ABI " ABI ".");
}

這個c文件實現輸出一個string型函數,注意這裡

Java_com_example_hellojni_HelloJni_aa

我們創建android應用的時候包和函數命名要和這個對應,否則匯報錯:native method is not found。如下圖

(2)編寫android.mk文件,相關資源在最後

(3)注意文件夾名要是jni,否則ndk不識別

(4)shell中進入相關路徑下面執行

ndk-build

(5)將生成的libs文件和已經編號的jni導入工程

(6)看下主程序代碼,注意注釋

public class HelloJni extends Activity {

TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_hello_jni);

tv=(TextView)findViewById(R.id.textView1);

Button bt2 = (Button)findViewById(R.id.button1);

bt2.setOnClickListener(new Button.OnClickListener()
{
@Override
public void onClick(View v)
{
tv.setText(aa());
}
});
}

public native String aa();//native方法,對應c文件Java_com_example_hellojni_HelloJni_aa中的aa


static {

System.loadLibrary("hello-jni");//注意名字是是libhello-jni.so去掉lib和後綴

}
}

(7)效果

點擊按鈕:出現一串話

最後把工程上傳,我的工程是公司的sdk,所以大家用的時候要換成自己的。lib和jni都是通用的,have fun!

資源下載,親測可用!

免費下載地址在 http://linux.linuxidc.com/

用戶名與密碼都是www.linuxidc.com

具體下載目錄在 /2014年資料/3月/17日/Android圖文介紹NDK安裝及簡單jni demon的實現

下載方法見 http://www.linuxidc.com/Linux/2013-07/87684.htm

推薦閱讀

使用hello-gl2建立NDK-gdb環境(有源碼和無源碼調試環境) http://www.linuxidc.com/Linux/2013-06/85935.htm

基於Android NDK開發實踐案例解析 http://www.linuxidc.com/Linux/2013-03/81676.htm

解決不使用Android NDK編譯的bin文件No such file or directory問題 http://www.linuxidc.com/Linux/2013-03/80591.htm

Android NDK :編寫清晰的代碼結構 http://www.linuxidc.com/Linux/2012-07/66105.htm

Android開發教程:NDK編譯靜態庫失敗 http://www.linuxidc.com/Linux/2012-06/64020.htm

更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11

Copyright © Linux教程網 All Rights Reserved