草庐IT

Hello-Jni

全部标签

Android-通过JNI和NDK生成so库

正在工作时,突然被同事问到:“秘钥放在哪里比较安全,X总说我这样写不行。”其实很多时候,app都需要用到一些敏感的数据,例如加密的秘钥、一些渠道的APP_ID等,但如果被别人反编译拿到这些数据,就很有可能会造成损失。那怎么增加被获取的难度?就是将这些数据放到C/C++的文件内,然后将其生成为so库,交给app应用层去调用。因为C/C++反汇编的难度,怎么都比反编译一个apk要难,这样就能更加有效地保证敏感数据的安全了。一、工具准备下载AndroidStudio,并确保下载好了NDK和CMake。image.png二、新建一个项目普通项目也行,C++项目也行,由于C++项目会自动配置CMakeL

Android-通过JNI和NDK生成so库

正在工作时,突然被同事问到:“秘钥放在哪里比较安全,X总说我这样写不行。”其实很多时候,app都需要用到一些敏感的数据,例如加密的秘钥、一些渠道的APP_ID等,但如果被别人反编译拿到这些数据,就很有可能会造成损失。那怎么增加被获取的难度?就是将这些数据放到C/C++的文件内,然后将其生成为so库,交给app应用层去调用。因为C/C++反汇编的难度,怎么都比反编译一个apk要难,这样就能更加有效地保证敏感数据的安全了。一、工具准备下载AndroidStudio,并确保下载好了NDK和CMake。image.png二、新建一个项目普通项目也行,C++项目也行,由于C++项目会自动配置CMakeL

Jni多线程与类加载

在JNI中我们可以通过JNIEnv的FindClass方法查找到java的类然后进行类似反射的调用。如果通过java代码调用的Jni函数,此时c的函数与Java运行在同一个线程中。无论是在主线程还是java启动的子线程中FindClass都能正常工作。native子线程加载不了自定义的Class但如果是通过pthread_create之类的方法在native层创建了子线程,则在这个子线程中FindClass方法查不到我们Apk中定义的class。会返回0并且在Java层抛出ClassNotFoundException:Process:me.linjw.demo.jni,PID:2759java

Jni多线程与类加载

在JNI中我们可以通过JNIEnv的FindClass方法查找到java的类然后进行类似反射的调用。如果通过java代码调用的Jni函数,此时c的函数与Java运行在同一个线程中。无论是在主线程还是java启动的子线程中FindClass都能正常工作。native子线程加载不了自定义的Class但如果是通过pthread_create之类的方法在native层创建了子线程,则在这个子线程中FindClass方法查不到我们Apk中定义的class。会返回0并且在Java层抛出ClassNotFoundException:Process:me.linjw.demo.jni,PID:2759java

NDK 系列(6):说一下注册 JNI 函数的方式和时机

请点赞关注,你的支持对我意义重大。?Hi,我是小彭。本文已收录到GitHub·Android-NoteBook中。这里有Android进阶成长知识体系,有志同道合的朋友,跟我建立核心竞争力。前言在上一篇文章中,我们提到了注册JNI函数(建立Javanative方法和JNI函数的映射关系)有两种方式:静态注册和动态注册。今天我们来详细说下这2种注册方式的使用方法和实现原理。这篇文章是NDK系列文章第6篇,专栏文章列表:一、语言基础:1、NDK学习路线:怎么学&我的经验2、C语言基础3、C++语言基础4、C/C++编译过程:从源码到程序运行二、NDK开发:1、JNI基础:Java与Native交互

NDK 系列(6):说一下注册 JNI 函数的方式和时机

请点赞关注,你的支持对我意义重大。?Hi,我是小彭。本文已收录到GitHub·Android-NoteBook中。这里有Android进阶成长知识体系,有志同道合的朋友,跟我建立核心竞争力。前言在上一篇文章中,我们提到了注册JNI函数(建立Javanative方法和JNI函数的映射关系)有两种方式:静态注册和动态注册。今天我们来详细说下这2种注册方式的使用方法和实现原理。这篇文章是NDK系列文章第6篇,专栏文章列表:一、语言基础:1、NDK学习路线:怎么学&我的经验2、C语言基础3、C++语言基础4、C/C++编译过程:从源码到程序运行二、NDK开发:1、JNI基础:Java与Native交互

JNI知识总结

概念JNI:Java本地调用,是JavaNativeInterface的缩写。JNI是一种技术,可以做到以下两点:Java程序中的函数可以调用Native语言写的函数,Native一般指的是C/C++编写的函数。·Native程序中的函数可以调用Java层的函数,也就是在C/C++程序中可以调用Java的函数。为什么需要jniC/C++语言已经有了很多成熟的模块,Java只需要直接调用即可。还有一些追求效率和速度的场合,需要Native参与。Java语言是平台无关,但是承载Java世界的虚拟机是用Native语言写的,而虚拟机又运行在具体平台上,所以虚拟机本身无法做到平台无关,JNI技术可以针

JNI知识总结

概念JNI:Java本地调用,是JavaNativeInterface的缩写。JNI是一种技术,可以做到以下两点:Java程序中的函数可以调用Native语言写的函数,Native一般指的是C/C++编写的函数。·Native程序中的函数可以调用Java层的函数,也就是在C/C++程序中可以调用Java的函数。为什么需要jniC/C++语言已经有了很多成熟的模块,Java只需要直接调用即可。还有一些追求效率和速度的场合,需要Native参与。Java语言是平台无关,但是承载Java世界的虚拟机是用Native语言写的,而虚拟机又运行在具体平台上,所以虚拟机本身无法做到平台无关,JNI技术可以针

Hadoop 2.0.0-alpha尝鲜安装和hello world

仅供测试学习的文章,不推荐在生产环境使用2.0,因为2.0采用YARN,hive,hbase,mahout等需要map/reduceV1的可能无法使用hadoop2.0或者会出现意外情况。5月23日,apache发布了hadoop2.0的测试版。正好跟家呆着没事干,小小的体会了一下map/reduceV2。环境,virtualbox虚拟机ubuntuserver12.04,openjdk-7。简单介绍一下,2.0.0是从hadoop0.23.x发展出来的。取消了jobtracker和tasktracker,或者说,是把这两个封装到了container里面。使用YARN替代了原来的map/red