Android JNI的第一步——從HelloWorld開始

來源:互聯網
上載者:User

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_JNILOCAL_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 #include 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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.