編輯:關於Android編程
Android JNI (Java Native Interface)就是為了實現java 與其他語言相互調用的語言。當然在Android就是為了跟C,C++的調用。在Linux ,Mac中Java最後調用的就是.so的文件,在Window中就是.dll文件。
那麼Java到C怎麼對應起來?調用Java的哪個方法就是C中的哪個方法呢?通過在Java類中聲明native的方法就開始了。
新建一個Android工程HelloNDK。新建一個類GetString
public class GetString { public static native String GetString(); public static native String GetString(int a,int b); public static native String getWord(); }具體的步驟如下:
1、在Java中聲明native()方法,然後編譯(javac);
2、用javah產生一個.h文件;
3、編寫包含.h文件的c文件
4、編譯c文件
5、使用編譯成功的so文件。
在我建立Android Project中是怎麼實現的?其實在工程的bin/classes/目錄下(classes是隱藏的)就第一步就編譯好了,所以我們在這目錄下進行第二步,命令為:
javah -jni com.example.hellondk.GetString(包+類)
就會生成com.example.hellondk.GetString.h 頭文件,只要你NDK目錄配置好了,接下來就是右鍵工程在Android Tool中選Add Native Support 看到工程名點finish。
接下來就在工程下看到多了jni這個文件夾。裡面有Android.mk,還有同工程名的.cpp文件。
把剛才生成的.h文件拷貝到jni文件夾下。
編寫c文件呢先要看下.h頭文件裡面寫的是什麼
* Class: com_example_hellondk_GetString * Method: GetString * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_example_hellondk_GetString_GetString__ (JNIEnv *, jclass); /* * Class: com_example_hellondk_GetString * Method: GetString * Signature: (II)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_example_hellondk_GetString_GetString__II (JNIEnv *, jclass, jint, jint); /* * Class: com_example_hellondk_GetString * Method: getWord * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_example_hellondk_GetString_getWord (JNIEnv *, jclass);
接下來是實現在.cpp文件中實現這些方法。復制過去
#include "com_example_hellondk_GetString.h"
/* * Class: com_example_hellondk_GetString * Method: GetString * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_example_hellondk_GetString_GetString__ (JNIEnv * env, jclass){ return env->NewStringUTF("hello ndk"); }; /* * Class: com_example_hellondk_GetString * Method: GetString * Signature: (II)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_example_hellondk_GetString_GetString__II (JNIEnv * env, jclass, jint a, jint b){ return env->NewStringUTF("result a+b="+(a+b)); }; JNIEXPORT jint JNICALL Java_com_example_hellondk_GetInt_getInt (JNIEnv * env, jclass, jint a){ return a; };
那現在怎麼使用呢?其實我們還可以看到在工程的libs目錄下生成了armeabi文件夾下生成了libHelloNDK.so庫文件。這個就是我們要使用的.so庫文件啦
在MainActivity中
static { System.loadLibrary("HelloNDK"); }
本文實例講述了Android編程中selector背景選擇器用法。分享給大家供大家參考,具體如下:在Android開發過程中,經常對某一View的背景在不同的狀態下,設置
相關類的認識Picker(DatePicker、TimerPicker、NumberPicker)其中DatePicker和TimerPicker都有窗口的形式顯示日期和
上一篇博客中我們已經繪制出了一個直角三角形,雖然我們相對於坐標,我們設置的直角三角形的兩腰是相等的,但是實際上展示出來的卻並不是這樣,雖然通過計算,我們可以把三角形的兩腰
一、 Service簡介 Service是android 系統中的四大組件之一(Activity、Service、BroadcastReceiver、ContentPr