編輯:關於Android編程
與域一樣,java中有兩類方法:實例方法和靜態方法。JNI提供訪問兩類方法的函數,例如:
public class JavaClass { // 實例方法 private String instanceMethod(){ return "Instance Method"; } // 靜態方法 private static String staticMethod(){ return "StaticMethod"; } }
● 獲取方法ID
JNI提供了用方法ID訪問兩類方法的途徑,可以用給定實例的class對象獲得方法ID。用GetMethodID函數獲得實例方法的方法ID,例如:
jmethodID instanceMethodId; instanceMethodId = (*env)->GetMethodID(env,clazz,"instanceMethod","()Ljava/lang/String;");
用GetStaticMethodID函數獲得靜態域的方法ID,例如:
jmethodID staticMethodId; staticMethodId = (*env)->GetStaticMethodID(env,clazz,"staticMethod","()Ljava/lang/String;");
兩個函數的最後一個參數均表示方法描述符,在Java中表示方法簽名。
● 調用方法
可以以方法ID為參數通過CallMethod類函數調用實際的實例方法,例如:
1.調用實例方法
jstring instanceMethodResult; instanceMethodResult = (*env)->CallStringMethod(env,instance,"instanceMethodId");
2.調用靜態方法
jstring staticMethodResult; staticMethodResult = (*env)->CallStaticStringMethod(env,clazz,"staticMethodId");
HelloJni.java
public class HelloJni extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); callJavaStaticMethod(); } public native String callJavaStaticMethod(); static { System.loadLibrary("hello-jni"); } // 靜態方法 private static String staticMethod() { return "StaticMethod Castiel"; } }
hellojni.c
#include#include #include JNIEXPORT void JNICALL Java_com_example_hellojni_HelloJni_callJavaStaticMethod(JNIEnv *env, jclass type) { jclass jniClass = (*env)->FindClass(env, "com/example/hellojni/HelloJni"); if (NULL == jniClass) { __android_log_print(ANDROID_LOG_INFO,"HelloJni","can't find jclass"); return; } jmethodID getMId = (*env)->GetStaticMethodID(env, jniClass, "staticMethod", "()Ljava/lang/String;"); if (NULL == getMId) { __android_log_print(ANDROID_LOG_INFO,"HelloJni","can't find method getStringFromStatic from JniClass"); return; } jstring result = (*env)->CallStaticObjectMethod(env, jniClass, getMId); const char *resultChar = (*env)->GetStringUTFChars(env, result, NULL); (*env)->DeleteLocalRef(env, jniClass); (*env)->DeleteLocalRef(env, result); __android_log_print(ANDROID_LOG_INFO,"HelloJni",resultChar); }
編譯後執行程序,可以看到日志中成功打印我們獲取的Java方法
在ios7中,蘋果的原生態應用幾乎都能夠通過向右滑動來返回到前一個頁面,這樣可以避免用戶在單手操作時用大拇指去點擊那個遙遠的返回鍵(iphone5的這種返回被吐糟為反人類
項目中需要用到底欄導航欄,滑動或者點擊會切換上面的視圖,如圖: 這個效果使用Viewpager+Fragmen實現是主流方案,加入你之前對fragment
1.首先在設備上調整輸入法 Android鍵盤(AOSP),在輸入語言裡勾選要選擇的語言,比如選“英語(美國)”和“西班牙文”兩種: 3.查看Set
前言android的知識太過龐雜了,自己如果學過了,但過一段時間不用了又會忘記。寫android NDK系列的博客呢,其一是為了鍛煉自己的寫作水平,其二是為自己所學過所掌