JNI
ShaderJoy
醉心于研究一些特效(用代码来画画),曾涉猎过图形图像视频处理 、计算机视觉 、增强现实/虚拟现实等技术领域,就职于美图。
展开
-
Android JNI中增加LOGCAT,LOG
最近在研究Android 2.3.3源代码的C/C++层,需要对代码进行一些调试,但是奇怪的是,直接添加LOGD("XXXXXXXX");,使用logcat却看不到任何输出,换成LOGI、LOGV、LOGW、LOGE也没有效果。于是在网上查找解决方法,经过几次试验,终于找到了,现在贴到下面备忘:第一步:在对应的mk文件中加入:LOCAL_LDLIBS := -llog第二步:在要使转载 2012-12-03 22:46:17 · 1303 阅读 · 0 评论 -
Android jni中数组参数的传递方式
1、背景今天调试了一下Android jni关于Java中调用C代码的程序,发现我的数组参数传递方式不对,导致值传递不正确,我的方法是:C代码,入口函数#include #include jint Java_sony_MedicalRecordDemo_MainActivity_decryptionSuccess(JNIEnv* env, jobje转载 2012-12-05 19:08:45 · 1421 阅读 · 0 评论 -
如何通过JNI传递对象执行回调
JNI的全称是java native interface,用来调用某些特定于系统平台或者硬件的操作,但是它只能调用c/c++的代码,若是其它语言代码,只能通过c/c++进行二次调用。关于JNI的完整技术文档,大家可以查看下面这个网址:http://java.sun.com/j2se/1.5.0/docs/guide/jni/下面我们看下JNI如何执行回调函数:我们知道在c/c+转载 2013-01-19 18:12:40 · 1271 阅读 · 0 评论 -
如何开发 native-activity 工程【详细注解】
在Android2.3版本里,可以使用native_activity.h接口实现一个完整的native activity,在使用的时候,要确认回调函数不能阻塞主UI线程。更多信息,可以参考/platforms/android-9/arch-arm/usr/include/android/native_activity.h.Native_app_glue静态辅助库为另一个线程中的事件循环提供了回转载 2013-09-02 18:34:18 · 6627 阅读 · 0 评论 -
Android JNI开发中的常用方法
有关Android JNI开发中比较强大和有用的功能就是从JNI层创建、构造Java的类或执行Java层的方法获取属性等操作。 一、类的相关操作 1. jclass FindClass(JNIEnv *env, const char *name); 查找类 该函数可能做过Java开发的不会陌生,这个是JNI层的实现,需要注意的是第二个参数为const cha转载 2013-09-06 19:20:19 · 2014 阅读 · 0 评论 -
Android下的JNI创建多线程的方法
本文参考了http://www.cnblogs.com/lknlfy/archive/2012/03/16/2400786.html这篇博文,加了点自己的东西废话不多说,贴代码上来java的代码:package com.example.jni_thread_demo;import android.os.Bundle;import android.app.Activity;i原创 2013-10-29 10:31:59 · 6482 阅读 · 1 评论 -
javah 使用(Javah生成JNI头文件)
C:/Users/archfree>javah 用法:javah [选项] 其中 [选项] 包括: -help 输出此帮助消息并退出 -classpath 用于装入类的路径 -bootclasspath 用于装入引导类的路径 -d 输出转载 2012-12-05 18:39:18 · 1160 阅读 · 0 评论 -
Android JNI(实现自己的JNI_OnLoad函数)
简单的Jni 例子都是映射模式,及对应的Jni 的c/c++ 实现需要,被java的函数命名规则限制死,为了解决这类毛病,引入的JNI_OnLoad这类方法。jint JNI_OnLoad(JavaVM* vm, void* reserved)该方法在Jni so 被加载时调用。该方法告诉VM此C组件使用高级的JNI版本。如果你的*.so文件没有使用JNI_OnLoad()函数,VM会默认转载 2012-12-05 18:44:50 · 2658 阅读 · 0 评论 -
Android 开发小技巧(1)
在android开发时需要注意以下的细节问题:1.一个显示系统可用内存的方法在进行android开发时,因为设备上的内存较小,有很多的程序在模拟器上运行没有问题,但是到了设备上就会经常因内存溢出而使程序崩溃.那么遇到这类问题应该如何解决呢?根据我的开发经验,使用一下步骤进行解决.StringBuffer sbf=new StringBuffer(); pri转载 2013-04-10 20:12:01 · 1604 阅读 · 0 评论 -
当JNI遇到多线程--java对象如何被C++中的多个线程访问?
java中要访问C++代码时, 使用JNI是唯一选择. 然而,在多线程的情况下, 可能出现以下问题:问题描述:一个java对象通过JNI调用DLL中一个send()函数向服务器发送消息,不等服务器消息到来就立即返回.同时把JNI接口的指针JNIEnv *env,和jobject obj保存在DLL中的变量里.一段时间后,DLL中的消息接收线程接收到服务器发来的消息,并试转载 2012-12-23 11:39:19 · 1253 阅读 · 0 评论 -
JNI编程小技巧
1、java 传入的String 在 C 中转化为 char*打印出来 jstring obj;const char* string = (char*)(*env)->GetStringUTFChars(env,obj,NULL);__android_log_print(ANDROID_LOG_INFO, "JNIMsg",string); 2、'fo...转载 2012-12-15 22:29:47 · 1119 阅读 · 0 评论 -
基于 Android NDK 的学习之旅-----目录
博客地址:http://blog.csdn.net/dui_cky/article/details/6778750Android NDK 的学习之旅系列文章都写完这么久了,突然发现少了个目录,真是晕啊。加个目录把,给那些需要的朋友。 1、 基于Android NDK 的学习之旅-----序言2、 基于Android NDK 的学习之旅-----环境搭转载 2012-12-05 18:50:54 · 1002 阅读 · 0 评论 -
NDK编程:Android.mk编译APK范例
以下仅是使用Android.mk编译APK程序的一些范例。如果你想了解Android.mk的更多内容请参考《Android.mk简介》一、编译一个简单的APK LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) # Build all java files in the java subdirectory转载 2012-12-05 18:54:32 · 1412 阅读 · 0 评论 -
Android NDK开发指南---Application.mk文件
简介:-----------------------------要将C\C++代码编译为SO文件,光有Android.mk文件还不行,还需要一个Application.mk文件。本文档是描述你的Android应用程序中需要的本地模块的Application.mk的语法使用,要明白如下。Application.mk目的是描述在你的应用程序中所需要的模块(即静态库或动态库)。转载 2012-12-05 19:05:45 · 1281 阅读 · 0 评论 -
NDK编程:Android.mk文件详解
Android.mk文件是GNU Makefile的一小部分,它用来对Android程序进行编译。因为所有的编译文件都在同一个 GNU MAKE 执行环境中进行执行,而Android.mk中所有的变量都是全局的。因此,您应尽量少声明变量,不要认为某些变量在解析过程中不会被定义。一个Android.mk文件可以编译多个模块,每个模块属下列类型之一: 1)APK程序转载 2012-12-05 19:00:20 · 1468 阅读 · 0 评论 -
在编译jni本地库的时候遇到的“多个目标匹配”的问题
NDK库的时候,遇到一个问题,当输入$NDK/ndk-build的时候,出现以下错误:/workspace/aNDK_Test/obj/local/armeabi/objs/wiki_andktest_HelloJni/wiki_andktest_HelloJni.o.d:1: *** 多个目标匹配。 停止。解决办法是:进入目录:/workspace/aNDK_Test/o转载 2012-12-05 19:03:04 · 2525 阅读 · 0 评论 -
Android将“.c”后缀名改为“.cpp”时,NDK发生的错误
现象:“.c”后缀名改为“.cpp”时java调用native失败 。解决: 加入“ extern "C" ”。 现象:“error: base operand of '->' has non-pointer type '_JNIEnv'”错误。 解决: 将“(*env)->NewStringUTF(env, "HelloWorld from JNI !")转载 2012-12-07 21:48:08 · 1367 阅读 · 0 评论 -
JNI中Java与C++的类型转换与相互调用
Java类型和本地类型对应 在如下情况下,需 要在本地方法中应用java对象的引用,就会用到类型之间的转换: 1)java方法里面将参数传入本地方法; 2)在本地方法里面创建java对象; 3)在本地方法里面return结果给java程序。 分为如下两种情况: Java原始类型 像 booleans、integers、floats等从Java程序中传到转载 2013-01-19 23:41:27 · 2091 阅读 · 0 评论 -
JNI调用C计算代码执行时间(毫秒)
#include #include #include #include "caltime_Jni.h"JNIEXPORT jlong JNICALL Java_caltime_Jni_calculateTime(JNIEnv *e, jobject jo){long start, end;int i,j,k;long a;//start timestart = clock()转载 2012-12-15 22:10:37 · 3044 阅读 · 0 评论 -
Android Studio 下通过 CMake 配置编译 libyuv 库
参考链接创建 AS 工程,选择 Native C++,之后默认配置就可以了(ps: 我工程的名字也取名为 libyuv 了,你们随意)libyuv 的源码下载下来以后,放到 src/main/cpp 目录下修改 src/main/cpp 目录下的 CMakeList.txt# For more information about using CMake with An...原创 2019-04-11 17:51:47 · 2686 阅读 · 0 评论