NDK系統環境變量的配置
去android developer官網選擇NDK下載相應的ndk版本,我選擇的是ndk-r9d版本,安裝完以后要進行系統環境變量的配置,將ndk的安裝目錄配置到Path系統環境變量中,配置好之后打開cmd執行ndk-build出現如下畫面則配置成功。
android ndk開發?eclipse開發環境的配置
eclipse安裝ADT(這個是安卓的開發環境搭建);
新建一個安卓工程HelloJni,在MainActivity里聲明native方法
public static native String getStringFromC();
安卓ndk、打開cmd進入到HelloJni的根目錄下
cd E:\MyProject\eclipsem\HelloMyJni
使用javah命令生成相應的.h頭文件
javah -classpath bin/classes;D:\adt-bundle-windows-x86_64-20130522\sdk\platforms\android-17\android.jar -d jni com.example.hellomyjni.MainActivity
javah 命令用于生成頭文件,參數是生成.h文件的相應的類(全類名);
-classpath 指定類的加載目錄(有兩個類一個是位于bin下的MainActivity和sdk下的android.jar包的Activity類,用分號隔開);
-d 表示輸出路徑在jni文件夾下;
生成之后會在項目工程的jni目錄下發現com_example_hellomyjni_MainActivity.h文件
然后為項目添加native支持:項目右鍵->Android Tools-> add native support
此時打開.h文件出現錯誤如下圖
這個是因為沒有導入jni頭文件的原因。
Project Properties -> C/C++ General -> Path and Symbols
選擇include標簽,Add -> File system -> 選擇ndk安裝目錄下的\platforms\android-17\arch-arm\usr\include
且選中All languages.
最后Apply -> OK
這樣錯誤就解決了。
接下來就是實現剛才定義的getStringFromC();方法了
修改jni目錄下的HelloJni.cpp文件(沒有則創建),實現以下代碼:
#include <jni.h>
#include <stdio.h>
#include <stdlib.h>
#include "com_example_hellomyjni_MainActivity.h"JNIEXPORT jstring JNICALL Java_com_example_hellomyjni_MainActivity_getStringFromC(JNIEnv * env, jclass jclass){return (*env)->NewStringUTF(env,"Hello from JNI");
}
這樣我們就實現了Java_com_example_hellomyjni_MainActivity_getStringFromC函數了。
接下來在jni目錄下還要有一個Android.mk文件聲明要編譯的內容,修改(沒有則新建,添加一下代碼
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := HelloMyJni
LOCAL_SRC_FILES := HelloMyJni.cinclude $(BUILD_SHARED_LIBRARY)
其中LOCAL_MODULE表示生成的.so庫的名稱,LOCAL_SRC_FILES表示要編譯的c文件名稱,自行修改
修改完之后就要進行ndk-build命令了,cmd進入項目根目錄下,執行ndk-build之后再項目的obj文件夾下就生成了.so文件
在MainActivity中加載so庫:
public class MainActivity extends Activity {static{System.loadLibrary("HelloMyJni");}public static native String getStringFromC();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextView textView = (TextView) findViewById(R.id.textView);textView.setText(getStringFromC());}
}
運行可見textview已經獲得了從jni創建的字符串了
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态