JNI

在 Android Studio 2.2 中愉快地使用 C/C++

瘦欲@ 提交于 2019-12-01 11:01:50
Android Studio 2.2 正式版发布后,看到更新内容中有提到对 C/C++ 支持的完善,表示非常高兴。然后将官网上这一部分内容翻译出来,如有错误,欢迎指正。 原文链接: Add C and C++ Code to Your Project 使用 Android studio,你可以将 C 和 C++ 代码构建成 native library(即 .so 文件),然后打包到你的 APK 中。你的 Java 代码可以通过 Java Native Interface(JNI)调用 native library 库中的方法。 Android Studio 默认使用 CMake 编译原生库。由于已经有大量的代码使用了 ndk-build 来编译 native code,所以 Android Studio 同样也支持 ndk build。如果你想导入一个 ndk-build 库到你的 Android Studio 项目中,请参阅后文的 关联本地库与 Gradle 部分。然而,如果你创建了一个新的 native 库工程,你应该使用 CMake。 本篇文章将会说明如何使用 Android Studio 来创建、配置 Android 项目,以支持 native code,以及将其运行到你的 app 中。 注意:要在 Android Studio 中使用 CMake 或者 ndk

linux 下 android ndk-gdb 调试 jni 中的c 代码

我的未来我决定 提交于 2019-12-01 09:56:43
ndk-gdb 调试方法: 1 androidManifast.xml 中设置 android:debuggable="true" 2 eclipse 启动调试,并在调用 jni 代码行打断点,等待 3 Android 中操作,直到 eclipse 中断点, 4 eclipse 中运行至jni 断点 , 这时在 Terminl 中进行当前 工程目录 , cd myAndroidPj/ 启动 ndk-gdb ($ ndk-gdb) 接下来,就是gdb 的命令了!! 关键 点2,3,4 步。 来源: oschina 链接: https://my.oschina.net/u/208153/blog/55267

【jni 编程】—— NDK环境搭建

好久不见. 提交于 2019-12-01 08:35:57
在《站在巨人的肩膀上,谈app的创新性》一文中 http://my.oschina.net/liusicong/blog/311971 ,我提到过构建app技术壁垒的必要性。在构建技术壁垒时,我们往往需要调用许多库函数,例如:图像处理的库函数,音频处理的库函数。我们发现一个有效可行的方案就是使用NDK工具来交叉调用C++函数。 我习惯于把我搜到的数篇帖子中特别好的帖子的地址附在问题后,这也是一种资源整合,面向想要入门学习android的java和c++交叉调用技能的读者盆友。 本文将分两部分来介绍如何在android下使用NDK实现c++开发:NDK环境的搭建,调用C++函数。 一. NDK环境搭建 1. 下载,解压 android-ndk-r5c-windows.zip 2. Cygwin 安装,同时参考以下两个教程 图文教程: http://wenku.baidu.com/link?url=JW5SDYlQAeGBWGm_gber3QJ3bGvIfaIElEpj1btc4WOmLuYSVqC7HjgDX4QKpbZp6yXSnXgGrOucpc_dnvwIpPiD-Saj_IlTcX_izN-npUu 图文教程: http://blog.csdn.net/pengchua/article/details/7582949 3. 配置 NDK builder

Android—JNI调用简单实例解析

随声附和 提交于 2019-12-01 04:39:27
转自: http://www.cnblogs.com/sevenyuan/p/4202759.html 感谢原作者的细心整理! 1. 在Eclipse中创建项目:TestJNI 2. 新创建一个class:TestJNI.java package com.wwj.jni; public class TestJNI { public native boolean Init(); public native int Add(int x, int y); public native void Destory(); } 以上代码声明三个本地方法。 3. 编译JNI 找到Android项目中bin目录下,会有classes文件夹,Eclipse自动为我们生成的字节码文件就在这个目录下。 我们在该路径下,使用javah命令,生成我们想要得到的.h头文件,如下图所示: 执行javah -jni com.wwj.jni.TestJNI命令之后,会在classes目录下生成头文件:com_wwj_jni_TestJNI.h 将它复制到jni文件夹下,打开如下: /* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_wwj_jni_TestJNI */ #ifndef

JNI native方法以及回调方法的实现

て烟熏妆下的殇ゞ 提交于 2019-12-01 04:26:47
JNI注册Native方法的步骤: 1、 Java层有五个Native方法: DsmccDownloader类下面有五个native方法 public native voidloadcancel(int handle); private native boolean init(); private native void setCurrentFrequency(int freq); private native int loadDir(XXXXXX); private native int loadfile(XXXXX); 2、 JNI层添加native数组: 数组形式={native方法名称,(参数类型列表)返回值类型,JNI层方法名称} static JNINativeMethod gDSMCCNativeMethod[] = { { "loadDir", "(JJIII[B[BLdsmccdownloadservice/DsmccDownloaderListener;)I", (void*)JNI_LoadDir, }, { "loadfile", "(JJIII[BLjava/io/FileDescriptor;Ldsmccdownloadservice/DsmccDownloaderListener;)I", (void*)JNI_LoadFile, }, {

用 JNI 进行 Java 编程(5)

守給你的承諾、 提交于 2019-12-01 02:02:02
结束语和参考资料 结束语 Java 本机接口是 Java 平台中一种设计良好和良好集成的 API。它被设计成用来使您能将本机代码合并到 Java 程序中,也为您提供了一种在用其它编程语言编写的程序中使用 Java 代码的方式。 使用 JNI 总会破坏 Java 代码的可移植性。当从 Java 程序调用本机方法时,需要为每个您打算运行程序的平台分发本机共享库文件。另一方面,从本机程序调用 Java 代码实际上可以改进应用程序的可移植性。 附录 附录 A:JNI 类型 JNI 使用几种映射到 Java 类型的本机定义的 C 类型。这些类型可以分成两类:原始类型和伪类(pseudo-classes)。在 C 中,伪类作为结构实现,而在 C++ 中它们是真正的类。 Java 原始类型直接映射到 C 依赖于平台的类型,如下所示: C 类型 jarray 表示通用数组。在 C 中,所有的数组类型实际上只是 jobject 的同义类型。但是,在 C++ 中,所有的数组类型都继承了 jarray , jarray 又依次继承了 jobject 。下列表显示了 Java 数组类型是如何映射到 JNI C 数组类型的。 这里是一棵对象树,它显示了 JNI 伪类是如何相关的。 附录 B:JNI 方法说明编码 用下表指定的编码将本机 Java 方法参数类型表示或 转换 成本机代码。 注 : 类类型 L

java jni in ubuntu(1)

让人想犯罪 __ 提交于 2019-12-01 02:01:50
初次在ubuntu13.04上实验java jni的调用,弄的比较蛋疼,在此记录下. 先建立一个java工程. 贴上java代码 public class JNITest1 { static{ System.load("/home/origin/workspace1/java_jni_test1/src/test1.so"); // System.setProperty("java.library.path","."); // System.out.println(System.getProperty("java.library.path")); // System.loadLibrary("test1"); } public native String sayJNItest(String name);//调用c++部分 public static void main(String[] args) { JNITest1 jniTest1 = new JNITest1(); String str = jniTest1.sayJNItest("jni test"); System.out.println(str); // System.out.println(System.getProperty("java.library.path")); } } 到工程bin目录下执行javah

Android: NDK编程入门笔记

让人想犯罪 __ 提交于 2019-12-01 01:15:01
为何要用到NDK? 概括来说主要分为以下几种情况: 1. 代码的保护,由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大。 2. 在NDK中调用第三方C/C++库,因为大部分的开源库都是用C/C++代码编写的。 3. 便于移植,用C/C++写得库可以方便在其他的嵌入式平台上再次使用。 下面就介绍下Android NDK的入门学习过程: 入门的最好办法就是学习Android自带的例子, 这里就通过学习Android的NDK自带的demo程序:hello-jni来达到这个目的。 一、 开发环境的搭建 android的NDK开发需要在linux下进行: 因为需要把C/C++编写的代码生成能在arm上运行的.so文件,这就需要用到交叉编译环境,而交叉编译需要在linux系统下才能完成。 安装android-ndk开发包,这个开发包可以在google android 官网下载: 通过这个开发包的工具才能将android jni 的C/C++的代码编译成库 android应用程序开发环境: 包括eclipse、java、 android sdk、 adt等。 如何下载和安装android-ndk我这里就不啰嗦了,安装完之后,需要将android-ndk的路劲加到环境变量PATH中: sudo gedit /etc/environment

[Android]关于Native函数的debug

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-01 00:05:28
先占坑,有空发。 环境:WIN7 + eclipse + android sdk4.3 + ndk r9b 需求:安卓程序通过jni调用C代码,并对C代码进行debug。 纠结:1、使用真机,直接无法启动 2、使用模拟器,能够启动,但是无法进入debug ----------------------------------------------------------------- 由于新版本的ndk对native代码的debug功能支持的已经比较完善,环境搭建已经比较简单了,依稀记得之前为了搭建能够debug native代码的环境,愣是花了接近一个周的时间,各种试,各种不对,各种纠结囧。 1、在eclipse下配置正确的sdk以及ndk路径(我直接在google下载配置好的eclipse:adt-bundle-windows-x86_64) 2、新建android工程,右键工程->Android Tools->Add Native Support,eclipse自动创建jni文件夹,并且有一个cpp文件(如HelloJni.cpp)和Android.mk文件 3、写一个测试类TestClass public class TestClass { public String getStr() { String s = getStrFromNative(); return s; }

android -------- Eclipse下的NDK配置环境

北城以北 提交于 2019-12-01 00:03:52
NDK 全称是Native Development Kit,是一个让开发人员在Android应用中嵌入使用本地代码编写的组件的工具集 原生开发工具包 (NDK) 是一组可让您在 Android 应用中利用 C 和 C++ 代码的工具。 可用以从您自己的源代码构建,或者利用现有的预构建库。 相关介绍请看博客: NDK下载地址: https://developer.android.google.cn/ndk/downloads/index.html 下载完成后解压 在Eclipse中指定NDK路径 打开Eclipse--->windwos---->preference--->Android---->NDK 注意这里进入到 build目录,不然你会发现Eclipse可能会有错误提示。 之后就是配置环境变量了 第一步:先创建一个根目录的系统环境变量NDK_ROOT 输入ndk安装路径 第二步:将NDK路径加入到变量Path中, %NDK_ROOT%; 之后就是验证是否成功了 Window+R --> cmd 打开控制台 输入ndk-build验证 恭喜你,你的NDK环境搭建成功了。 来源: oschina 链接: https://my.oschina.net/u/2945455/blog/1800099