日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

利用JNI技术在Android中调用C++代码

發(fā)布時(shí)間:2023/11/27 生活经验 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用JNI技术在Android中调用C++代码 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

JNI是Java Native Interface的簡稱,也就是Java本地接口,它提供了若干的API實(shí)現(xiàn)Java和其它語言的通信(主要是C&C++)。

?

1、打開Eclipse,File-->New-->Project…-->AndroidApplication Project-->Application Name:TestJNI,PackageName:com.testjni.android, Minimum Required SDK:API 10, Android 2.3.3(Gingerbread),Next-->不勾選 Createcustom launcher icon, 勾選Create activity,Next-->選中 BlankActivity,Next-->Activity Name:TestJNIProjectActivity, -->Finish,運(yùn)行AndroidApplication顯示正確;

2、選中src-->com.testjni.android,打開TestJNIProjectActivity.java文件內(nèi)代碼改為:

?

package com.testjni.android;import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;public class TestJNIProjectActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);TextView tv = new TextView(this);  tv.setText(StringFromJni());  setContentView(tv);  }public native String StringFromJni();static{System.loadLibrary("hello-jni");}}

?

3、編譯該工程,會(huì)在bin\classes\com\testjni\android文件夾下生成TestJNIProjectActivity.class文件;

4、打開命令行窗口,將其定位到\bin\classes目錄下,輸入命令:javah –classpath ??D:\ProgramFiles\Android\android-sdk\platforms\android-10\android.jar;com.testjni.android.TestJNIProjectActivity,會(huì)在classes文件夾下生成com_testjni_android_TestJNIProjectActivity.h(說明:*.jar也可以是其它版本);

5、選中TestJNI工程,點(diǎn)擊右鍵-->New-->Folder新建一個(gè)jni文件夾,選中jni, -->New-->File,新建2個(gè)文件,名稱分別為hello-jni.c,Android.mk;

6、編寫hello-jni.c文件,代碼為:

?

#include <string.h>
#include <jni.h>JNIEXPORT jstring JNICALL Java_com_testjni_android_TestJNIProjectActivity_StringFromJni(JNIEnv * env, jobject thiz)
{return (*env)->NewStringUTF(env, "Hello from JNI !");
}

?

?

?

7、 創(chuàng)建Android.mk文件,其內(nèi)容為:

?

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := hello-jniLOCAL_SRC_FILES := hello-jni.cinclude $(BUILD_SHARED_LIBRARY)

?

?

?

8、利用NDK生成.so文件:選中工程,點(diǎn)擊右鍵-->Properties-->Builders-->New,新建立一個(gè)Builder,在彈出的對話框上點(diǎn)中Program,點(diǎn)擊OK;在彈出對話框EditConfiguration中,配置選項(xiàng)卡Main:Location中填入NDK安裝目錄,D:\ProgramFiles\Android\android-sdk\android-ndk-r9\ndk-build.cmd;WorkingDirectory中填入工程的根目錄,E:\Test\Android\HelloJni,點(diǎn)擊Apply;配置選項(xiàng)卡Refresh,勾選Refreshresources upon completion, The entire workspace, Recursively includesub-folders,點(diǎn)擊Apply;配置Build Options選項(xiàng)卡,勾選Allocate Console(necessary for input), After a “Clean”, Duringmanual builds, During auto builds, Specify working set of relevant resources,點(diǎn)擊SpecifyResources..,勾選TestJNI工程的jni目錄,點(diǎn)擊Finish,點(diǎn)擊Apply,點(diǎn)擊OK,會(huì)在\libs\armeabi目錄下生成相應(yīng)的libhello-jni.so庫;

9、運(yùn)行該工程,一切顯示正確。

以上是.c文件的操作步驟,若將.c文件該為.cpp文件,則需改動(dòng)兩個(gè)文件:

1、Android.mk:

?

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := hello-jniLOCAL_SRC_FILES := hello-jni.cppinclude $(BUILD_SHARED_LIBRARY)


2、hello-jni.cpp:

?

?

#include <string.h>
#include <jni.h>#ifdef __cplusplus
extern "C" {
#endifJNIEXPORT jstring JNICALL Java_com_example_testjni_TestJNIProjectActivity_StringFromJni(JNIEnv * env, jobject thiz)
{return env->NewStringUTF("Hello from JNI !");
}#ifdef __cplusplus
}
#endif

?

?

?

?

?

?

參考文獻(xiàn):

1、? http://blog.csdn.net/haha_mingg/article/details/6332115

2、? http://blog.csdn.net/cghs123/article/details/7044826

3、 ?http://blog.csdn.net/laczff21/article/details/7542236

4、?android-ndk-r9-windows-x86_64中例子代碼

?

?

?

?

?

總結(jié)

以上是生活随笔為你收集整理的利用JNI技术在Android中调用C++代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

歡迎分享!

轉(zhuǎn)載請說明來源于"生活随笔",并保留原作者的名字。

本文地址:利用JNI技术在Android中调用C++代码