Android中調用C++函數的一個簡單Demo

來源:互聯網
上載者:User

這裡我不想多解釋什麼,對於什麼JNI和NDK的相關內容大家自己去百度或Google.我對Android的學習也只是個新手.廢話少說直接進入正題.

一、在Eclipse中建立一個Android Application Project.相關參數如下:

Application Name : HelloJni; Project Name: HelloJni; Package Name:com.example.hellojni

二、然後我們添加一個Jni類.相關參數如下:

Source folder: HelloJni/src; Package:com.example.hellojni

三、我們在上面所建立的Jni.java中添加兩個方法代碼如下.注意需要加上關鍵字native.

package com.example.hellojni;public class Jni { public native String ShowString(String name); public native int Add(int x,int y);}
四、將Jni.java檔案拷貝到JDK的安裝目錄的BIN目錄下.在WIN7下的路徑是:C:\Program Files\Java\jdk1.7.0\bin.然後開啟控制台進入此目錄執行命令如下.執行成功後會產生Jni.class.

C:\Program Files\Java\jdk1.7.0\bin>javac Jni.java

五、將我們Android工程中src檔案下的com檔案夾拷貝到我們當前所在的目錄.將Jni.class檔案拷貝到com\example\hellojni檔案夾下.可先刪除其它內容.然後執行如下命令.執行成功後會在目前的目錄中產生一個.H檔案:com_example_hellojni_Jni.h

C:\Program Files\Java\jdk1.7.0\bin>javah -jni com.example.hellojni.Jni

六、我們在Android工程中建立一個檔案夾JNI,並將上一步產生的.H檔案拷貝到裡面.然後建立一個與.H對應的.C檔案:com_example_hellojni_Jni.c.添加代碼如下:

#include"com_example_hellojni_Jni.h"JNIEXPORT jstring JNICALL Java_com_example_hellojni_Jni_ShowString(JNIEnv *pJNIEnv, jobject thiz, jstring str){ char * sTempStr = (char *) (*pJNIEnv)->GetStringUTFChars(pJNIEnv,str,0); return (*pJNIEnv)->NewStringUTF(pJNIEnv,sTempStr);}JNIEXPORT jint JNICALL Java_com_example_hellojni_Jni_Add(JNIEnv *pJNIEnv, jobject thiz, jint x, jint y){  return x+y;}
七、我們在工程的JNI檔案夾下建立一個檔案Android.mk.其內容如下:

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := HelloJNILOCAL_SRC_FILES := com_example_hellojni_Jni.cinclude $(BUILD_SHARED_LIBRARY)

八、我們在工程的JNI檔案夾的上一級目錄下建立一個檔案Application.mk.其內容如下:

APP_PROJECT_PATH := $(call my-dir)/HelloJniAPP_MOUDLES := HelloJNI

九、將控制台切換到JNI檔案夾所在的目錄.執行命令以產生.SO檔案.執行成功後便可見.SO檔案libs\libHelloJNI.so.

C:\AndroidWorkspace\HelloJni>F:\AndroidNdkR8bWindows\ndk-build.cmd //這個是你的NDK下的工具.
十、然後我們便可以在Android中調用上面的兩個函數代碼如下:

package com.example.hellojni;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.widget.TextView;public class MainActivity extends Activity { static {  System.loadLibrary("HelloJNI");//對應於libHelloJNI.so.這裡載入時不需要首碼和尾碼 } @Override  protected void onCreate(Bundle savedInstanceState)  {  super.onCreate(savedInstanceState);  Jni jni = new Jni();  TextView textView = new TextView(this);  textView.setText(jni.ShowString("兩個數求和結果: ") + Integer.toString(jni.Add(10,20)));  setContentView(textView); }}

十一、程式運行結果如下.本Demo:http://t.cn/z8egX2P

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.