JNI

追索权 Eclipse + NDK error: stray '\\24' in program

為{幸葍}努か 提交于 2020-02-17 23:21:58
[size=16px][b][color=#FF0000]追索权 Eclipse + NDK error: stray '\24' in program[/color][b][/b][/b][/size] 最近的研究JNI采纳Eclipse+NDKR7B建好开发环境 依照网上教的步骤build 什么都配好了写了个最简单的样例,clean以后就出现该异常非常是头疼。异常信息: "Compile thumb : TestNdk <= com_example_testndk_JniClient.c jni/com_example_testndk_JniClient.c:1: error: stray '\24' in program jni/com_example_testndk_JniClient.c:1: error: stray '#' in program jni/com_example_testndk_JniClient.c:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'e' jni/com_example_testndk_JniClient.c:1: error: stray '\210' in program jni/com_example_testndk_JniClient.c:1:6

failed to load the jni shared library bin client jvm.dll

牧云@^-^@ 提交于 2020-02-13 10:30:02
原因往往是系统环境变量参数设置的java虚拟机位数和当前启动的eclipse所需的java虚拟机位数不匹配,比如一个是64位,另一个是32位 怎么查看java虚拟机位数,如图: 这是32位的虚拟机版本信息,最后一行java HotSpot(TM).....可以查看 对比下图64位: 以上两图对比可以看出不同虚拟机位数的信息 如何查看eclipse启动需要的虚拟机版本 在当前使用的eclipse下的eclipse.ini里,如下截图: 以上的64位的eclipse,对比下图32位的来看看有何不同: 对比发现后面的后缀,64位的多了字符串“_64”,32位则没有 如何配置eclipse单独启动的虚拟机 在当前使用的eclipse下的eclipse.ini里设置参数如下: -vm D:/JavaIDE/jdk/jdk1.8.0_60/jre/bin/server/jvm.dll(设置成这个eclipse能够启动的虚拟机) 以上就是所有,这样可以不用更改系统全局的环境变量,来满足eclipse的启动需要。 来源: https://www.cnblogs.com/kinder/p/12302382.html

AS下NDK开发(一)

邮差的信 提交于 2020-02-08 05:23:08
捣鼓了一天的NDK,总结下。 Eclipse下开发ndk好像挺麻烦的样子,看书上要下载Cygwin,eclipse还要下载插件CDT。。而在AS上就方便多啦。下载android ndk。安装,配置环境,即可。 NDK(android native develop kits ):android 本地开发工具集 ,这些工具帮助开发者快速开发C或C++动态库,并自动将so和java文件打包成apk,可以把c/c++ ->编译成一个 linux下可以执行的二进制文件 java代码里面就可以通过jni 调用执行二进制的文件. JNI :java本地开发接口,JNI是一个协议这个协议用来沟通java代码和外部的本地代码(c/c++).通过这个协议,java代码就可以调用外部的c/c++,代码外部的c/c++代码也可以调用java代码。 JNI开发用途:Native code效率高,数学运算,实时渲染的游戏上,音视频处理(极品飞车,opengl,ffmpeg等。 一、配置NDK环境 下载NDK,网上有很多,下载好之后,解压即可。然后在AS中配置,依次点击:File ->ProjectStructure:如图: 配置好之后,会在项目下的local.properties文件里自动添加:ndk.dir=D\:\\android-ndk-r10d 如果没有就自己加上,我的是自动的。 二、建立app项目

【Android】OOM问题分析

自古美人都是妖i 提交于 2020-02-07 08:06:05
OOM问题分析 简介 OOM(OutOfMemoryError),最近线上版本出现了大量线程OOM的crash,尤其是华为Android 9.0系统的手机,占总OOM量的85%左右。 OOM分类 [XXXClassName] of length XXX would overflow“是系统限制String/Array的长度所致,这种情况比较少。 java.lang.OutOfMemoryError: “Failed to allocate a " << byte_count << " byte allocation with " << total_bytes_free << " free bytes and " << PrettySize(GetFreeMemoryUntilOOME()) << " until OOM”; 通常情况下是因为 java 堆内存不足导致的,即 Runtime.getRuntime().maxMemory() 获取到的最大内存无法满足要申请的内存大小时,这种情况比较好模拟,例如我们可以通过 new byte[] 的方式来申请超过 maxMemory() 的内存,但是也有一些情况是堆内存充裕,而且设备内存也充裕的情况下发生的。 java.lang.OutOfMemoryError: Could not allocate JNI Env(代号JNIEnv)

JNI和NDK编程

走远了吗. 提交于 2020-02-05 07:31:44
Java JNI的本意是Java Native Interface(Java本地接口),它是为了方便Java调用C、C++等本地代码所封装的一层接口。通过Java JNI,用户可以调用C、C++所编写的本地代码。 NDK是Android所提供的一个工具集合,通过NDK可以在Android中更加方便地通过JNI来访问本地代码,比如C或C++。NDK还提供了交叉编译器,开发人员只需要简单的修改mk文件就可以生成特定CPU平台的动态库。 使用NDK的好处: 1.提高代码的安全性。由于so库反编译比较困难,因此NDK提高了Android程序的安全性。 2.可以很方便的使用目前已有的C/C++开源库 3.便于平台间的移植。通过C/C++实现的动态库可以很方便的在其他平台上使用。 4.提高程序在某些特定情形下的执行效率,但是并不能明显提升Android程序的性能。 JNI和NDK开发所用到的动态库的格式是以.so为后缀的文件 一、JNI 的开发流程 1.在Java中声明native方法 2.编译Java源文件得到class文件,然后通过javah命令导出JNI的头文件 3.实现JNI方法 4.编译so库并在Java中调用 二、NDK的开发流程(NDK的开发是基于JNI的) 1.下载并配置NDK 2.创建一个Android的项目,并声明所需的native方法 3

JNI和NDK

喜夏-厌秋 提交于 2020-02-05 05:23:17
JNI: Java Native Interface Java调用本地代码接口 NDK : Native development Kit 安卓提供的本地开发包,用于编译成.so文件 (linux平台的库文件) ABI :Application binary interface 应用程序二进制接口 ,.os文件以lib开始,以abi结尾,以便各自Cpu调用对应的so文件 一、JNI流程 1、新建本地方法类,以native关键字标识,例如 public class JniTest { public native String getText(); public native Void setText(String text); } 2、使用javac生成class文件,然后使用javah生成.h文件(此处主要,由于.h文件中的函数名需要包名和方法名,所以javah的参数必须是完整的带包名的 例如 javah com.test.jni.JniTest) 3、新建.c或者.cpp文件实现.h文件的函数 4、然后使用gcc 编译成so文件,需要linux环境。Android开发者可用NDK包中的ndk-build命令代替 二、NDK流程 1、新建本地方法类,以native关键字标识,例如 public class JniTest { public native String getText(

Eclipse NDK 配置

别等时光非礼了梦想. 提交于 2020-02-05 03:55:29
转自 Eclipse NDK 配置 一、关于NDK: NDK全称:Native Development Kit。 1、NDK是一系列工具的集合。 NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。 NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。 NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。 2、NDK提供了一份稳定、功能有限的API头文件声明。 Google明确声明该API是稳定的,在后续所有版本中都稳定支持当前发布的API。从该版本的NDK中看出,这些API支持的功能非常有限,包含有:C标准库(libc)、标准数学库(libm)、压缩库(libz)、Log库(liblog)。 二、NDK实例的实现: 对于Windows环境下NDK的开发,如果使用的NDK是r7之前的版本,必须要安装Cygwin才能使用NDK,所以为Eclipse需要配置的builder,其实是执行Cygwin,然后传递ndk-build作为参数。在NDKr7开始,Google的Windows版的NDK提供了一个ndk-build.cmd的脚本,这样

Android NDK开发轻松入门

孤街浪徒 提交于 2020-02-05 03:49:35
简介 : AndroidNDK 是能使 Android 应用开发者把从 c/c++ 编译而来的本地代码嵌入到应用包中的一系列工具的组合。 注意 : AndroidNDK 只能用于 Android1.5 及以上版本中。 I. Android NDK 目标 : Android 虚拟机允许你的应用在源码中通过 JNI 调用本地代码(c/c++)中实现的方法们。概括起来,这表示: --你的应用的java源代码中要声明一个或多个方法,这些方法前面需有 'native' 关键字,这表明它们被本地代码实现。如: native byte[] loadFile(String filePath); -- 你必须提供本地的共享库(.so),库中包含这些方法的实现。这个库将会打包你的应用的 .apk 中。这个库的命名必须符合标准的 Unix 命名规则,也就是: lib<something>.so 这种形式。并且还要包含一个标准的 JNI 入口。例如: libFileLoader.so -- 你的应用必须显式的加载本地库。例如,要在应用启动时加载,只需简单地在代码中增加如下语句: static { System.loadLibrary("FileLoader"); } 注意写库的名字时你不需要使用 'lib' 前缀和 '.so' 后缀。 AndroidNDK 只是 AndroidSDK 的一个组件,它帮助你

NDK的讲义

老子叫甜甜 提交于 2020-02-05 03:48:29
介绍: Android SDK是一个允许Android应用开发人员使用C或C++源文件编译并嵌入到本机源代码中的应用程序包的一组工具。 重要说明: Android NDK只能用于android 1.5以上版本 1. Android NDK的目的: Android虚拟机允许你的应用程序源代码通过JNI调用在本地实现的源代码,简单的说,这就意味着: 你的应用程序将声明一个或多个用’native’关键字的方法用来指明它们是通过本地代码实现的 例如:native byte[] loadFile(String filePath) 你必须提供包含实现这些方法的共享库(就是.so),将共享库打包到你的应用程序包apk中,这些库文件必须根据标准的Unix约定来命名为 lib<something>.so,并且是需要包含一个标准的JNI的接口,例如 libFileLoader.so 你的应用程序必须明确的装载这些库文件(.so文件),比如,在程序的开始装载它,只需要简单的添加几句源代码: 1 static { 2 System.loadLibrary(“FileLoader”); 3 } 注意:这里你不必再将前缀lib和后缀.so写入。 Android NDK对于Android SDK只是个组件,它可以帮你: 生成的JNI兼容的共享库可以在大于Android1.5平台的ARM CPU上运行

jni入门 eclipsecygwin+ndk

别等时光非礼了梦想. 提交于 2020-02-05 03:34:35
声明:本文转载自 http://blog.sina.com.cn/s/blog_7aa2703601010jrx.html 一、安装CDT、NDK CDT是一个在Eclipse下可以搞C++代码的插件。 NDK 提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so 和java 应用一起打包成apk。 怎么在eclipse装这两个我就不多说了。大家按照以前装adt和sdk的方法来搞就好了。不过有一点是要注意的:因为cygwin是在window上模拟linux的控制台环境,所以对于访问文件的路径是不能带有空格的,貌似也不能带中文。所以ndk的解压后存放的路径必须不能包括空格或中文,比如这种“D:\Program Files\android-ndk-windows”在cygwin是不能识别成功的。 二、安装cygwin 然后是cygwin,我给大家发的那个cygwin压缩包是有安装说明的,大家按照说明一步一步来就可以安装成功。 三、配置NDK环境变量 上述三样安装成功后,就是配置NDK环境变量的问题了。 1、 首先找到cygwin的安装目录,找到一个home\<你的用户名>\.bash_profile文件,我的是:E:\cygwin\home\Administrator\.bash_profile。(注意:我安装的时候我的home文件夹下面神马都没有,解决 的办法