- 浏览: 41802 次
- 性别:
- 来自: 济南
文章分类
最新评论
jni 的调用分几种方式:
1。静态调用
2。动态调用
动态调用就是,平时说的,在项目中新建jni目标,用NDK方法来编译。最终生成so文件借当前项目需要的时候,调用
静态调用就是开机的时候加载到虚拟机里面的方式,这里也分两种方式,
1。同样Simplejni 路径:/rowboat-android/development/samples/SimpleJNI
从这个例子可以看出,这种方式调用是,采用封装好的形式,加载到虚拟机里面去,然后调用的方式也区别于ndk,因为方法名前面不用加包名
2。另外一个是把.cpp文件放在framework下面,来保证开机加载到虚拟机里面去,文件存放目录为:rowboat-android/frameworks/base/core/jni
在这个目录下面也有类似的例子,如:
android_os_Power.cpp
static void releaseWakeLock(JNIEnv *env, jobject clazz, jstring idObj)
{
if (idObj == NULL) {
throw_NullPointerException(env, "id is null");
return ;
}
const char *id = env->GetStringUTFChars(idObj, NULL);
release_wake_lock(id);
env->ReleaseStringUTFChars(idObj, id);
}
把定义的方法加载到方法列表当中
static JNINativeMethod method_table[] = {
{ "acquireWakeLock", "(ILjava/lang/String;)V", (void*)acquireWakeLock },
{ "releaseWakeLock", "(Ljava/lang/String;)V", (void*)releaseWakeLock },
{ "setLastUserActivityTimeout", "(J)I", (void*)setLastUserActivityTimeout },
{ "setScreenState", "(Z)I", (void*)setScreenState },
{ "shutdown", "()V", (void*)android_os_Power_shutdown },
{ "rebootNative", "(Ljava/lang/String;)V", (void*)android_os_Power_reboot },
{ "VirtualKey", "()V", (void*)android_os_Power_VirtualKey },
{ "sendKye", "()V", (void*)android_os_Power_sendKey },
};
//注册所有方法到虚拟机
int register_android_os_Power(JNIEnv *env)
{
return AndroidRuntime::registerNativeMethods(
env, "android/os/Power",
method_table, NELEM(method_table));
}
//AndroidRuntime.cpp
extern int register_android_os_Power(JNIEnv *env);
REG_JNI(register_android_os_Power),
在这里增加到总的虚拟机上面,方便统一加载
在这个文件当中完成统一的开机,虚拟机统一加载 。。。。。。
如果 是这种方式调用,那么在程序当中只要直接调用方法名就行了,不需要像NDK 那样System.loadLibrary("demo");
1。静态调用
2。动态调用
动态调用就是,平时说的,在项目中新建jni目标,用NDK方法来编译。最终生成so文件借当前项目需要的时候,调用
静态调用就是开机的时候加载到虚拟机里面的方式,这里也分两种方式,
1。同样Simplejni 路径:/rowboat-android/development/samples/SimpleJNI
从这个例子可以看出,这种方式调用是,采用封装好的形式,加载到虚拟机里面去,然后调用的方式也区别于ndk,因为方法名前面不用加包名
2。另外一个是把.cpp文件放在framework下面,来保证开机加载到虚拟机里面去,文件存放目录为:rowboat-android/frameworks/base/core/jni
在这个目录下面也有类似的例子,如:
android_os_Power.cpp
static void releaseWakeLock(JNIEnv *env, jobject clazz, jstring idObj)
{
if (idObj == NULL) {
throw_NullPointerException(env, "id is null");
return ;
}
const char *id = env->GetStringUTFChars(idObj, NULL);
release_wake_lock(id);
env->ReleaseStringUTFChars(idObj, id);
}
把定义的方法加载到方法列表当中
static JNINativeMethod method_table[] = {
{ "acquireWakeLock", "(ILjava/lang/String;)V", (void*)acquireWakeLock },
{ "releaseWakeLock", "(Ljava/lang/String;)V", (void*)releaseWakeLock },
{ "setLastUserActivityTimeout", "(J)I", (void*)setLastUserActivityTimeout },
{ "setScreenState", "(Z)I", (void*)setScreenState },
{ "shutdown", "()V", (void*)android_os_Power_shutdown },
{ "rebootNative", "(Ljava/lang/String;)V", (void*)android_os_Power_reboot },
{ "VirtualKey", "()V", (void*)android_os_Power_VirtualKey },
{ "sendKye", "()V", (void*)android_os_Power_sendKey },
};
//注册所有方法到虚拟机
int register_android_os_Power(JNIEnv *env)
{
return AndroidRuntime::registerNativeMethods(
env, "android/os/Power",
method_table, NELEM(method_table));
}
//AndroidRuntime.cpp
extern int register_android_os_Power(JNIEnv *env);
REG_JNI(register_android_os_Power),
在这里增加到总的虚拟机上面,方便统一加载
在这个文件当中完成统一的开机,虚拟机统一加载 。。。。。。
如果 是这种方式调用,那么在程序当中只要直接调用方法名就行了,不需要像NDK 那样System.loadLibrary("demo");
发表评论
-
[Android分享] Preferencescreen关于intent跳转activity问题。
2012-10-15 10:16 0这几天在做setting,遇到配置好intent后点击没有反应 ... -
TabHost技巧
2012-10-15 10:16 01.如何要在tabhost 中显示activity ,那么里面 ... -
后台的Activity被系统回收怎么办:onSaveInstanceState
2012-10-15 10:15 0你后台的Activity被系统回收怎么办:onSaveInst ... -
ctwap-cmwap-uiwap网络连接
2012-10-15 10:15 0if (localNetworkInfo != n ... -
显示、隐藏软键盘
2012-10-15 10:14 0一、 // Hide soft keyboard, if vi ... -
Android---常用方法
2012-10-16 12:24 6371、获取资源: Resources ... -
动态更新Menu状态的方法
2012-10-15 10:13 0@Override public boolean onCre ... -
android 获取 imei号码
2012-10-15 10:13 0android 获取 imei号码 Imei = ((Tel ... -
Tools之Traceview使用
2012-10-15 10:12 0一.产生Trace文件 import android.os.D ... -
textview 滚动代码
2012-10-15 10:12 0android:singleLine="true&q ... -
android 获取xml控件的长度
2012-10-16 12:24 940LayoutParams tvPara = (LayoutPa ... -
android编译
2012-10-15 10:10 0境:ubuntu10.04 1.安装java 下载jdk-1_ ... -
一些比较实用的方法
2012-10-15 10:09 0//获取系统时间格式的方法 boolean b24 = Dat ... -
android Task 与 Activity的关系
2012-10-15 10:09 0android:noHistory 用于标记当用户从A ... -
android滑动之Scrolle
2012-10-15 10:08 0正文 一、结构 public class Scroller e ... -
启动其它应用包的方法
2012-10-15 10:06 0Intent mainIntent = new Intent( ... -
Android开发中的drawable-(hdpi,mdpi,ldpi)和WVGA,HVGA,QVGA的区别以及联系
2012-10-16 12:24 6551.drawable-(hdpi,mdpi,ldpi)的区别 ... -
Android如何将程序打成jar包
2012-10-15 10:04 0导出 1. 创建java project 2. 工程属性jav ... -
android Activity背景风格
2012-10-16 12:23 554Android Theme主题样式开发注意点 Androi ... -
ANR处理方法
2012-10-15 10:00 0ANRs (“Application Not Respondi ...
相关推荐
Android使用JNI调用Python so解释器
教你如何生成.h文件,使用window通过NDK编译出.so文件,如何通过JNI调用so文件
这是Android的NDK开发之Android JNI调用流程程一个demo。下载下来可以直接在android studio上运行。
android JNI C 调用Java
android配置ndk,使用swig编译生成jni Java接口调用c++方法。这是成功的例子,前提是你要配置一下你的环境变量。如有疑问,可以去查看我的博客。有相关内容。
android JNI调用实例
Android Jni调用实例,NDK程序开发的demo。
android jni调用详细解说 简单易懂 绝对超值
android jni 调用本地函数 c++ 格式 完整代码
在android中使用jni,在jni中调用jni里面的方法
Android 通过JNI调用C语言完整示例程序。Android Studio项目工程。
Android JNI Android JNI 用C函数写本地库读写文件,底层调用小例子用C函数写本地库读写文件,底层调用小例子
Android虚拟机允许你的应用程序源代码通过JNI调用实现本地代码的方法,需要在应用程序中使用关键字native声明一个或多个方法表明该方法是通过本地调用实现的
谷歌官方的例子hellow-libs,andoid studio中JNI调用第三方.so库。
Android JNI 调用 Silk 音频编解码包,采用现在Skepe官网上最新的1.09版修改为成,可以使用Cygwin编译即可产生.so文件,供大家使用
AndroidStudio环境下的jni调用(NDK),这个教程可以让完全不会AndroidStudio的人学会jni调用。完全步骤话,非常简单。
基于老罗的《Android内核源代码情景分析》第二章freg实例,使用NDK编译jni层从而调用驱动程序,能大大缩短项目开发周期。
android jni使用java、c c++相互调用
演示JNI中几种不同的调用方法 1. 在应用的JAVA代码中调用NDK中C/C++实现的函数。 2. 在NDK开发中的C/C++代码调用应用中JAVA类的静态函数。 3. 在NDK开发中的C/C++代码调用应用中JAVA类当前传入NDK中的实例的函数。 ...
android jni native C++访问java层数组,java类对象属性和方法,回调接口和线程回调接口 内附可以正常使用的demo