Menu Home

JNI

Android JNI优化

在类加载时获取域和方法的ID JAVA端: public class MyClass { static { System.loadLibrary(“mylib”); /*在加载库的时候一次性获取需要访问的域和方法的ID*/ getIds(); } public static int someInteger = 0; public static native void sayHelloToJNI(); public static void helloFromJNI() { Log.i(“MyClass”, “Greetings! someInteger = ” + someInteger); } private static native void getId(); } C/C++端: static jfieldID someIntegerId; static jfieldID helloFromJNIId; void […]

C/C++调用JNI的区别

C++支持真正的对象而C不支持对象,所有C和C++调用JNI函数的时候会有一些细微的区别。 C++: JavaVM* vm JNIEnv* env = NULL; vm->GetEnv((void**)&env, JNI_VERSION_1_6); env->FindClass(“main”); C: JavaVM* vm JNIEnv* env = NULL; (*vm)->GetEnv(vm, (void**)&env, JNI_VERSION_1_6); (*env)->FindClass(env, “main”);

android程序调用JNI

OS: MAC OS 10.7.5 Android: 4.3 NDK: android-ndk-r7c java: 1.6.0_51 使用JNI 在Eclipse中新建一个Android工程,假设项目目录为project,修改activity_main.xml 如下: <RelativeLayout xmlns:android=”http://schemas.android.com/apk/res/android” xmlns:tools=”http://schemas.android.com/tools” android:layout_width=”match_parent” android:layout_height=”match_parent” android:paddingBottom=”@dimen/activity_vertical_margin” android:paddingLeft=”@dimen/activity_horizontal_margin” android:paddingRight=”@dimen/activity_horizontal_margin” android:paddingTop=”@dimen/activity_vertical_margin” tools:context=”.MainActivity” > <TextView android:id=”@+id/showText” android:layout_width=”wrap_content” android:layout_height=”wrap_content” /> </RelativeLayout> MainActivity.java: package net.lnmcc.usejni; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.widget.TextView; public class MainActivity extends Activity { // 加载JNI库 static […]