Android JNI的第一步——从HelloWorld开始
第一步:配置NDK運行環境
兩個工具包:
com.android.ide.eclipse.ndk_23.0.2.1259578.jar
android-ndk-r10(當然也可以是一些其他類似的工具包,如android-ndk-r8)
前者為搭建NDK環境時,必需的工具包。需要將其置于eclipse的plugins文件夾中。然后重啟eclipse即可。
前者工具包下載連接
后者為eclipse運行JNI程序所需要的工具包,將其置于一個你習慣的路徑下。放置好之后,進行環境變量的配置,如下圖:
添加NDK路徑:
在window工具欄中選擇preferences選項進入Preferences對話框,如下:
上面所說的第一個工具包就是為產生上圖中的3“NDK”的,如果不出意外,添加完第一個工具包后就會有這個選項了。然后上圖中的第4步就是去添加我們的第二個工具包。
經過上面的步驟,我們的開發環境已經搭建完成了。
第二步:創建Android工程
新建Android工程:
新建項目和普通Android工程沒什么不同。
添加本地支持:
新建好工程之后,我們就需要對其進行添加本地支持
此步操作完成之后,會自動生成Android.mk配置文件和相應的cpp文件,mk文件內容:
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := William_Hello_JNI LOCAL_SRC_FILES := William_Hello_JNI.cppinclude $(BUILD_SHARED_LIBRARY) 而對于那個LOCAL_MODULE ? ?:= William_Hello_JNI中的William_Hello_JNI則是在Java代碼中需要去調用的Library,后面會有說明。當然,這兩步的前提還是你已經添加了第一個工具包。
編寫C++代碼:
接下來,就可以試著去寫你的C++代碼了(就在剛剛生成的那個William_Hello_JNI.cpp中去編寫)。我的示例是這樣的:
#include <jni.h> #include <string.h>extern "C" {JNIEXPORT jstring JNICALL Java_com_demo_jni_MainActivity_sayhello(JNIEnv * env, jobject obj); }JNIEXPORT jstring JNICALL Java_com_demo_jni_MainActivity_sayhello(JNIEnv * env, jobject obj) {return env->NewStringUTF("Hello From cpp."); }對于上面的C++代碼可以看到有一個方法:JNIEXPORT jstring JNICALL Java_com_demo_jni_MainActivity_sayhello(JNIEnv * env, jobject obj);
其中的組成部分說明如下:
JNIEXPORT 固定部分,表示JNI外部引入
jstring 表示返回類型
JNICALL 固定部分,顧名思義,是表示此方法提供給JNI層去調用
Java 固定部分,表示后面的部分是Java代碼的內容
com_demo_jni 是Java代碼中的程序包名
MainActivity 表示相應方法所在的類名
sayhello 就是這里與Java代碼中一一對應的方法名
編寫Java代碼:
對于Java代碼第一步要做的事件就是引入C/C++中的庫,這里的庫就是我們在添加本地支持的時候生成的Android.mk文件中的LOCAL_MODULE的值。
例如我的工程中就是:
static {System.loadLibrary("William_Hello_JNI"); } 完整主函數,如下: public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);EditText showJNI = (EditText) findViewById(R.id.activity_main_jni_show);showJNI.setText(sayhello());}public native String sayhello();static {System.loadLibrary("William_Hello_JNI");} }運行效果圖:
源碼下載:
工程源碼:http://download.csdn.net/detail/u013761665/8369031
參考
參考博文:http://blog.csdn.net/yf210yf/article/details/9264587
總結
以上是生活随笔為你收集整理的Android JNI的第一步——从HelloWorld开始的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java版SMS4加密算法
- 下一篇: Android以当前Activity为基