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