
Android Jni进阶系列
Android Jni进阶系列
Android系统攻城狮
《Android系统多媒体进阶实战》一书作者
展开
-
Android NDK之JNI陷阱
背景: 最近一个月一直在做移植库的工作,将c代码到share library移植到Android平台。这就涉及到Android NDK(native develop kit)内容。这里只想记录下JNI(java native interface)经常遇到到问题。 问题1. 忘记delete local reference。带New到方法(如:NewByteArray)这样到方法比较好辨认转载 2016-05-06 15:05:28 · 456 阅读 · 0 评论 -
NDK-JNI实战教程(一) 在Android Studio运行第一个NDK程序
PS一句:最终还是选择优快云来整理发表这几年的知识点,该文章平行迁移到优快云。因为优快云也支持MarkDown语法了,牛逼啊!NDK开发,其实是为了项目需要调用底层的一些C/C++的一些东西;另外就是为了效率更加高些。如果你在Eclipse+ADT下开发过NDK就能体会到要么是配置NDK还要下载Cygwin,配置Cygwin ,然后需要编译生成,相当的蛋疼。要么是直接用Eclipse转载 2016-09-25 14:44:24 · 473 阅读 · 0 评论 -
Andorid Studio NDK 开发 - Hello World
原址介绍了在Android Studio中配置NDK的开发环境:Android Studio NDK开发-环境配置,NDK开发环境配置完成之后,就要写一下著名的Hello World程序了。在开始之前需要先介绍下Java和c/c++通信:JNI,JNI(Java Native Inteface)是Java平台的一部分,它允许Java代码和其他语言写的代码进行交互。尤其是转载 2017-03-27 10:07:36 · 455 阅读 · 0 评论 -
Android NDK开发从0到1
本文的开发环境为 Windows,其他平台操作类似其实说到 NDK 就不得不提 JNI ( Java Native Interface ) ,JNI 是专门用来与本地代码进行交互而提供的一个接口。通过 JNI 就可以调用 C/C++ 所编写的本地代码。而 NDK ( Native Development Kit) 是 Android 所提供的一个工具集合,通过 NDK 就可以很方便的在转载 2017-04-24 10:16:41 · 768 阅读 · 0 评论 -
JNI在C和C++的env语法
在C中,JNI 函数调用由“(*env)->”作前缀,目的是为了取出函数指针所引用的值。在 C++ 中,JNIEnv 类拥有处理函数指针查找的内联成员函数。下面这两行代码访问同一函数,但每种语言都有各自的语法C语法: jsize len = (*env)->GetArrayLength(env,array);C++语法: jsize len =env->GetArray原创 2016-05-06 15:45:20 · 891 阅读 · 0 评论 -
关于AttachCurrentThread和DetachCurrentThread的故事
关于AttachCurrentThread和DetachCurrentThread的故事当在一个线程里面调用AttachCurrentThread后,如果不需要用的时候一定要DetachCurrentThread,否则线程无法正常退出。[java] view plain copy print?static JNIEnv转载 2016-03-12 19:08:09 · 1824 阅读 · 0 评论 -
android javap命令生成自定义类签名
1.Demo.javapackage com.test; public class Demo{ public class DiskInfo{ public String name; public int serial; } static native DiskInfo getinfo(DiskInfo disk); /原创 2017-06-29 14:36:06 · 741 阅读 · 0 评论 -
Android Studio第一个NDK程序
原址由于最近比较有空,特地记录一下之前学习Android Studio NDK环境部署的过程,以免以后忘记。开发环境:Window 10Android Studio 2.01、在Android Studio新建一个项目,并在MainActivity里面声明native方法 static { System.loadLibrary("hello_jni"); } ...转载 2018-06-02 10:02:47 · 425 阅读 · 0 评论 -
Android Studio禁止混淆JNI代码
1.在AS项目工程下:app/proguard-android.txt 或:app/proguard-rules.pro禁止混淆JNI代码:# 设置所有 native 方法不被混淆-keepclasseswithmembernames class * { native <methods>;}...原创 2018-06-02 10:07:42 · 5137 阅读 · 0 评论 -
Android增量更新——bsdiff&bspatch
原址现在公司对于app增量更新的需求越来越多,因为增量更新不仅仅可以节省流量,更重要的一点是减少用户更新app的时间,有益于用户体验。 这篇文章将介绍运用patch差分包的形式实现增量更新。为了方便,就将生成差分包和合并差分包这两个过程都放在安卓机上完成。正常情况下差分包的生成是在服务端完成的。准备工作: ndk配置,使用android studio2.2及以上版本(eclip...转载 2018-07-24 10:26:28 · 1011 阅读 · 1 评论 -
Android开发实践:如何设置NDK的编译选项
转自:http://ticktick.blog.51cto.com/823160/1734777本文是我的《Android NDK开发》系列的又一篇文章,上篇文章中,我分享了一个可以自动添加源文件列表的 Android.mk 示例模板,方便大家快速地搭建起完整的 NDK 开发工程框架,本文则主要探究几个主要的 NDK 编译选项的配置,其中包括:APP_ABI、LOCAL_LDLIBS、转载 2016-05-13 19:35:30 · 2617 阅读 · 0 评论 -
JNI 实战全面解析
项目决定移植一款C++开源项目到Android平台,开始对JNI深入研究。JNI是什么?JNI(Java Native Interface)意为JAVA本地调用,它允许Java代码和其他语言写的代码进行交互,简单的说,一种在Java虚拟机控制下执行代码的标准机制。NDK是什么?Android NDK(Native Development Kit )是一套工具集合,允许你用像C/转载 2016-04-29 23:58:16 · 626 阅读 · 0 评论 -
jstring转换到C语言所用的char
在做JNI的时候遇到了一个小问题,现在已经搞定,记录下来。关于Java层传递下的string参数,在C语言中定义为jstring。但是C语言在使用的时候需要用到char类型,这里就出现了需要转换的情况 。方法如下:/*这里假设上层传递的参数都是准确有效的,这里只是在C中用*//*相关变量的定义如下*/jstring jstr;char *str;转载 2016-05-11 14:25:15 · 629 阅读 · 0 评论 -
jni实现回调java函数
jni实现回调java函数一、JNI实现回调通过JNI在Native层调用JAVA层的方法,来实现Native层向JAVA层传递消息。JNICallback.java[java] view plain copypublic class JNICallback extends Activity {转载 2016-03-04 21:10:44 · 826 阅读 · 0 评论 -
C/C++调用java---JNI常用函数
C/C++调用java---JNI常用函数从原始类数据的缓冲区中加载类。 参数: env:JNI 接口指针。 loader:分派给所定义的类的类加载器。 buf:包含 .class 文件数据的缓冲区。 bufLen:缓冲区长度。 返回值:转载 2016-03-04 23:20:06 · 1040 阅读 · 0 评论 -
android开发JNI之高级篇
android开发JNI之高级篇一,JNI介绍百度百科 : http://baike.baidu.com/view/1272329.htm二,JNI开发教程1,JNI注册方式有两种,一种是静态方式,一种是动态方式,静态方式的使用见链接 http://www.yesky.com/249/1748749.shtml 笔者不多加赘述,hello-jni的原转载 2016-03-04 23:23:26 · 467 阅读 · 0 评论 -
如何通过JNI传递对象执行回调
如何通过JNI传递对象执行回调JNI的全称是java native interface,用来调用某些特定于系统平台或者硬件的操作,但是它只能调用c/c++的代码,若是其它语言代码,只能通过c/c++进行二次调用。关于JNI的完整技术文档,大家可以查看下面这个网址:http://java.sun.com/j2se/1.5.0/docs/guide/jni/ 下面我们看下JNI转载 2016-03-04 23:39:59 · 1166 阅读 · 0 评论 -
使用NDK生成native C/C++的可执行程序
使用NDK生成native C/C++的可执行程序 众所周知, NDK可以生成lib,让java程序通过jni来调用,其实,NDK也可以生成C/C++的可执行程序.不过这个程序要被执行的话还有要求. 1.可执行文件的名字必须是lib*.so. 否则apk安装时不会安装上去,因为目前apk的安装只支持安装lib文件,即lib*.so文件,如果不是此文件格式的,转载 2016-03-18 23:23:56 · 681 阅读 · 0 评论 -
java调用shell命令并获取执行结果
java调用shell命令并获取执行结果使用到Process和Runtime两个类,返回值通过Process类的getInputStream()方法获取[plain] view plain copypackage ark; import java.io.BufferedReader; import java转载 2016-03-18 23:30:00 · 1592 阅读 · 0 评论 -
android jni socket
android jni socket 其实这个标题没什么意思;但是想来想去,自己(新手)查了很多资料才调通,就打算在此一写。 android-jni的socket编程,就是调用底层linux的socket编程。android平台,一般只需要关心客户端代码,如下:(从华清远见嵌入式linux应用开发教材上copy的,手头没好点的例子)转载 2016-03-19 00:01:23 · 776 阅读 · 0 评论 -
jni 调用sock_raw -- 端口扫描
Android NDK学习之第一个实例---端口扫描为什么要写一个端口扫描的程序,Java来写不是很方便吗?因为我也没有想到什么例子能够方便的来练习。于是想到以前找到的端口扫描的C代码,于是想用他们来练习。扫描服务端端口的方式有许多种,最简单的就是直接去连接该端口,复杂一些的就是看SYN的应答。其他方式就不说了。下面的portScan.c位于jni目录下:(原本可在li转载 2016-03-19 00:18:40 · 1555 阅读 · 0 评论 -
在android的jni线程C传回调函数给java
Jni中C层传回调函数给java层JNI回调是指在c/c++代码中调用java函数,当在c/c++的线程中执行回调函数时,会导致回调失败。其中一种在Android系统的解决方案是:把c/c++中所有线程的创建,由pthread_create函数替换为由Java层的创建线程的函数AndroidRuntime::createJavaThread。假设有c++转载 2016-03-07 18:07:20 · 896 阅读 · 0 评论 -
jni数组使用(一)
jni数组使用(一) 假设有这样一个java函数:[java] view plain copypublic int Send(char buffer[],int length) 这个函数需要调用c/c++函数[cpp] view plain copyint send(u转载 2016-03-07 18:44:46 · 596 阅读 · 0 评论 -
jni数组使用(二)
jni数组使用(二)上一篇说到在java中调用c++函数中,如何使用jni数组。下面谈一谈在回调中如何使用jni数组。假如有一个java函数:[cpp] view plain copypublic void Receive(char buffer[],int length) 我们需要在c++中调用这个转载 2016-03-07 18:45:26 · 419 阅读 · 0 评论 -
Android JNI使用方法,JNI机制详解
Android JNI使用方法,JNI机制详解JNI的出现使得开发者既可以利用Java语言跨平台、类库丰 富、开发便捷等特点,又可以利用Native语言的高效。JNI是JVM实现中的一部分,因此Native语言和Java代码都运行在JVM的宿主环境。JNI是一个双向的接口:开发者不仅可以通过JNI在Java代码中访问Native模块,还可以在转载 2016-03-13 21:13:40 · 571 阅读 · 0 评论 -
Android Studio Cmake C++ JNI demo
说明:本人实验android studio版本是3.2以上的1.新建一个工程,要勾选“Inlcude C++ support”,然后一路next,创建完成后就有一个jni c++的demo,android studio3.2以上非常强大,自动已经创建好了ndk工程,可以在此基础上继续开发。2.需要关注的是app目录下,CMakeLists.txt和build.gradle已经创建好了,...原创 2018-07-21 14:29:29 · 530 阅读 · 0 评论