JNI

What is 'JNI Global reference'

匿名 (未验证) 提交于 2019-12-03 00:48:01
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I am using jProfiler to find memory leaks in a Java swing application. I have identified instances of a JFrame which keeps growing in count. This frame is opened, and then closed. Using jProfiler, and viewing the Paths to GC Root there is only one reference, 'JNI Global reference'. What does this mean? Why is it hanging on to each instance of the frame? 回答1: Wikipedia has a good overview of Java Native Interface , essentially it allows communication between Java and native operating system libraries writen in other languages. JNI global

ART prevents any Java calls from JNI during native signal handling

匿名 (未验证) 提交于 2019-12-03 00:44:02
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: My project use a module of capturing crash and send in android system. When handling the native crash, native code will do something and then do java calls from JNI. It works well on the Dalvik. But it fails in android version above 5.0 using ART. Because ART prevents any Java calls from JNI during native signal handling. It says that ART signal handling uses alternate signal stack, so during the process of signal handing, can't call java methods? Is there any other ways?? Flow: 1. Java call native method, but native method crashes. 2.

cocos2dx Jni调用需要线程切换 ui线程和GL线程

匿名 (未验证) 提交于 2019-12-03 00:42:01
cocos2d-x for Android 运行在多线程环境下,所以在 Lua/C++ 和 Java 交互时需要注意选择适当的线程。 cocos2d-x 在 Android 上以两个线程来运行,分别是负责图像渲染的 GL 线程和负责 Android 系统用户界面的 UI 线程。 在 cocos2d-x 启动后,Lua/C++代码将由 GL 线程调用,因此从 Lua/C++中调用的 Java 方法如果涉及到系统用户界面的显示、更新操作,那么就必须让这部分代码切换到 UI 线程上去运行。 反之亦然,从 Java 调用 Lua/C++代码时,需要让这个调用在 GL 线程上执行,否则 Lua/C++代码虽然执行了,但会无法更新 cocos2d-x 内部状态。 简单说说,我相信每个人做Android的都知道的更新UI只能在UI线程进行刷新,这是一个非常霸道的条款 Cocos2dx基于opengl es 实现跨平台工程 Android程序在启动的时候,首先加载了我们的MainActivity,这个时候Java加载了c++平台编译的.so文件。然后我们在根据Activity的声明周期走起来~ public void init() { 主要基于GLSurfaceView,将GLSurfaceView添加到我们的视图中

使用CMake编译JNI的C文件

匿名 (未验证) 提交于 2019-12-03 00:27:02
在学习JNI的过程中 使用NDK配置编译环境时报了一个异常: Error:Execution failed for task ':app:compileDebugNdk'. > Error: Flag android.useDeprecatedNdk is no longer supported and will be removed in the next version of Android Studio. Please switch to a supported build system Consider using CMake or ndk-build integration. For more information, go to: https://d.android.com/r/studio-ui/add-native-code.html#ndkCompile To get started, you can use the sample ndk-build script the Android plugin generated for you at: D:\Workspace\Android\workselect\JNI\app\build\intermediates\ndk\debug\Android.mk Alternatively, you can use the

android /system/lib/ so库解析

匿名 (未验证) 提交于 2019-12-03 00:27:02
> android /system/lib/ so库解析 - https://blog.csdn.net/qidabing/article/details/51837163 - Linux下的*.so是系统的动态库,类似于win下面的*.dll,一般是由C/C++编译成的动态库,上层的Java程序通过JNI调用。 动态库相对静态库的优点是,1.更加的节省资源;2.更方便的程序部署、更新和发布;有些So在不同的SDK可能会没有了。 1、out_cm11中.so文件解析 out_cm11\target\product\aries\system\lib |-- drm (Digital Rights Management 数字版权管理) | |-- libfwdlockengine.so (?Fwdlockengine(OMA-v1的Forward Lock(禁止将文件移动到手机设备以外的设备,即转发锁定))) |-- egl (EGL是OpenGL ES和底层Native平台视图系统之间的接口) | |-- egl.cfg (图形渲染配置文件egl.cfg) | |-- eglsubAndroid.so (?) | |-- libEGL_adreno.so (?adreno是高通的GPU处理器) | |-- libGLES_android.so (software OpenGL ES

jni

匿名 (未验证) 提交于 2019-12-03 00:20:01
javah: javah -d "指定生成头文件的位置" "需要生成头文件的位置" 注意:需要在类的目录下面执行该命令[类的顶级目录下面] 否则找不到类 转载请标明出处: jni 文章来源: jni

JNI入门实例

匿名 (未验证) 提交于 2019-12-03 00:05:01
JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C/C++)。从Java1.1开始,JNI标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他编程语言,只要调用约定受支持就可以了。 1. 新建MyJNI目录,在其中创建MyJNI.java,其中saySomething为native方法,需要在C/C++中实现。 public class MyJNI { public MyJNI() { } public native void saySomething(String name); } 2. 编译MyJNI.java 在DOS命令行下输入 D:\codes\MyJNI>javac MyJNI.java 生成MyJNI.class 3. 导出JNI头文件 在DOS命令行下输入 D:\codes\MyJNI>javah -jni MyJNI 注意不要.class后缀,生成MyJNI.h /* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class MyJNI */ #ifndef

Java JNI机制

匿名 (未验证) 提交于 2019-12-02 21:53:32
java JNI机制 JNI概述及简单例子介绍 系统环境代指本地操作系统环境,它有自己的本地库和CPU指令集。本地程序(Native Applications)使用C/C++这样的本地语言来编写,被编译成只能在本地系统环境下运行的二进制代码,并和本地库链接在一起。本地程序和本地库一般地会依赖于一个特定的本地系统环境。比如,一个系统下编译出来的C程序不能在另一个系统中运行。 JNI可以这样与本地程序进行交互: JNI native methods JAVA JNI invocation interface JVM JVM JAVA C JVM applets 使用JAVA程序调用C函数打印"Hello World!"。这个过程包含下面几个步骤: HelloWorld.java javac HollowWorld.java HelloWorld.class C HelloWorld.h C C Hello-World.dll libHello-World.so java HelloWorld HelloWorld.class (HelloWorld.dll libHelloWorld.so) 1.创建一个Java类 ,里面包含着一个native的方法和加载库的方法loadLibrary。HelloNative.java代码如下: 2.运行javah ,得到包含该方法的C声明 头文件.h

Eclipse JNI环境搭建及使用

匿名 (未验证) 提交于 2019-12-02 20:37:20
安装Java SDK及添加环境变量 安装Elipse Java及CDT插件 安装tdm64-gcc及添加环境变量 百度云 (密码:mjdi) 安装msys及添加环境变量 百度云 (密码:j2i6) 创建类 JNIDemo,编写内容如下: package jni_demo; public class JNIDemo { public native void sayHello(); public static void main(String[] args) { // 调用动态链接库 System.loadLibrary("libJNIDemo"); JNIDemo jniDemo = new JNIDemo(); jniDemo.sayHello(); } } 打开命令行,进入java项目的src路径,输入如下命令生成本地方法头文件: 项目头文件配置: 创建src目录,将上述生成的头文件移动到src目录,并创建对应的.c文件,编写内容如下: #include "jni_demo_JNIDemo.h" JNIEXPORT void JNICALL Java_jni_1demo_JNIDemo_sayHello (JNIEnv *env, jobject obj) { printf("Hello Java, I am C."); } 项目右键:Build Project,生成动态库

android JNI使用方法

别等时光非礼了梦想. 提交于 2019-12-02 18:58:00
经过几天的努力终于搞定了android JNI部分,下面将我的这个小程序和大家分享一下。android JNI是连接android Java部分和C/C++部分的纽带,完整使用JNI需要Java代码和C/C++代码。其中C/C++代码用于生成库文件,Java代码用于引用C/C++库文件以及调用C/C++方法。 android Java部分代码: jnitest.java package com.hello.jnitest; import android.app.Activity; import android.os.Bundle; public class jnitest extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Nadd test = new Nadd(); setTitle("The Native Add Result is "+String.valueOf(test.nadd(10, 20))); } } Nadd.java