JNI初入手

JNI没有能系统学习过.今天重温下JNI的HELLOWORLD 主要参考http://www.cnblogs.com/yejiurui/p/3476565.html

此文记录自己的感受

JNI开发流程:

写NATIVE入口类->生成JNI中用的头文件->写C代码->配置Android.mk->项目调用NVTIVE类

注意:

1.NATIVE类文件中方法申明的修饰属性如:

package com.tg.hz.hellojni.jni;

public class JniClient {
    static public native String AddStr(String strA,String strB);
    static public native int AddInt(int intA,int intB);
    static {
        System.loadLibrary("HelloJniTest");
    }

}

2.生成CLASS文件:cmd -> javac(编译 NATIVE入口类文件) 生成字节码(.class)文件,如果使用ECLIPSE做编辑器,那可在项目文件夹的bin\classes\(包名)*\找到该文件

3.生成.h头文件 :cmd->javah(编辑上步中CLASS文件) 如果是用ECLIPSE做编辑器就比较方便,如下图

CMD下定位到项目BIN\CLASSES文件下.使用javah 包名+类名(类名不要后缀),会在classes当前目录下生成一个.h的文件

如果不是使用ECLIPSE编辑器.或没有CLASSES对应文件夹.那需要根据包名+类名建立如下文件夹树(重要),然后在CMD定位到com同级目录使用javah 包名+类名(类名不要后缀),会在当前目录下生成一个.h的文件

3.将头文件拷贝至JNI文件夹下.建立同名C或CPP文件,并引用头文件

4.Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := HelloJniTest                  /*配置关系到生成的SO文件名及System.loadLibrary("HelloJniTest")中的调用*/
LOCAL_SRC_FILES := com_tg_hz_hellojni_jni_JniClient.c    /*配置JNI下需要编译的C或CPP文件名 */
include $(BUILD_SHARED_LIBRARY)

5.项目地址随后头上

时间: 2024-12-24 05:37:18

JNI初入手的相关文章

Ogre初入手:最简单的ogre程序骨架

本文内容主要参考于页面 http://www.ogre3d.org/tikiwiki/tiki-index.php?page=Ogre+Wiki+Tutorial+Framework Ogre是一个非常好的开源面向对象的3D引擎,架构合理清晰,源代码总体来说(相对于这么大的项目而言)相当工整,逻辑几乎可算一目了然.很值得学习 3D图形学的同学研究. 作为初入手,应该抓住主要矛盾,对Ogre的框架有一个把握.因此,抛却旁枝,这里只讨论Ogre运行所需要的最小最精炼的步骤.这里将我的学习心得记录如下

Android JNI初体验

开始接触Android JNI层面的内容,推荐一本不错的入门级的书<Android的设计与实现:卷一>,这两天看了一下关于Java层和Native层函数映射的章节,加深对JNI的理解. 先是写了一个非常简单的计算器,关键的运算放在Native层实现,然后把运算的结果返回到Java层,写这个的时候还是自己手动建jni文件夹,javah的命令行,写makefile文件,用ndk-build命令行来编译,后来发现要调试C代码了,才发现高版本的ndk环境已经全都集成好了,编译,运行,调试甚至和VS差不

【转载】浅谈游戏开发之2D手游工具

浅谈游戏开发之2D手游工具 来源:http://www.gameres.com/459713.html 游戏程序 平台类型: iOS Android  程序设计: 其它  编程语言:   引擎/SDK: 其它  全球手游行业规模将突破250亿美元,越来越多的开发者开始进入手游研发领域,而作为一名菜鸟,很多时候,如果没有其他开发者的建议,会走很多弯.独立工作室Sheado.net公司的Chad Ata在博客中分享了他们从一开始进入手游研发到如今四年多以来积累的经验,希望可以给新入行者提供一些帮助.

新手2D手游该使用哪些工具

独立开发者:新手做2D手游该用哪些工具 随着全球手游行业规模将突破250亿美元,越来越多的开发者开始进入手游研发领域,而作为一名菜鸟,很多时候,如果没有其他开发者的建议,我们会走很多弯路,最近独立工作室Sheado.net公司的Chad Ata在博客中分享了他们从一开始进入手游研发到如今四年多以来积累的经验,希望可以给新入行者提供一些帮助.以下是编译的博客内容: 一开始进入游戏研发领域的时候,你很难知道该选择什么工具.什么程序语言以及哪些框架,你会面临许许多多的选择和建议,我和我的团队总能发现其

Android so 文件进阶&lt;三&gt; so文件的简单加密

0x00  前言 之前的两篇文章从链接视图和执行视图分析了elf文件的大致结构,这篇文章主要内容是对于so文件进行简单的加密工作,针对Ida等静态分析工具的分析,一旦开始动态调试就应该很容易就可以dump出内存,直接修复了. 0x01  思路 主要是两种思路, 对文件中指定的section加密,然后在运行时由.initarray进行解密: 对指定的函数进行加密,在运行时由.initarray进行解密. 两种不同的方法说到底也就是不同的View而已. ①基于链接视图,对指定的section进行加密

Caffe安装笔记二:Caffe安装过程

下面开始正题,caffe的安装过程.因为出问题很多,所以实际上我是尝试了python2和python3两种python的接口.下面一并放出来. 1. 安装build-essential sudo apt-get install build-essential 这个是一些基本的库,具体包括哪些,安装前确认时会显示,印象中有gcc等等. 2. boost安装 caffe官网给出的是sudo apt-get install --no-install-recommends libboost-all-de

LeapMotion Demo1

原文:LeapMotion Demo1 ? ? LeapMotion SDK For c# 只提供了一个Sample.cs. ? Leap Motion App Home 可以给初入手者提供很好的用户体验,但是对于研发者远远不够, 我正在尝试解读SDK的API并用于研发,部分学习成果Pose 出来,并打算持续更新! ? 控制台应用程序: ? WPF: Code Source:?https://github.com/DuelCode/LeapMotionWPFSamples? 原文地址:https

读书-《断舍离》做减法来生活

初入手<断舍离>,我是有很大的期许的.在通勤的地铁上,不止一次看到有人品读这本书,引起我的好奇心,粗略的了解了书的内容.我就笃定,这是当下最适合我读的一本书. “断舍离是将住所中'不需要.不合适.不舒服的东西'去除掉,替换成'需要.合适.舒服'的东西.通过整理物品来整理生活和工作,重新理顺自己和物品的关系,借此发现自己,找到快乐生活的意义. 在这个物资泛滥的年代,我们每天都在不断的接收各种各样的物品,我们物质为上,却根本不曾发觉自己被物品死死地困住,失去了自在生存的空间.我们疲于奔命,为的只是

JNI笔记之 初体验

Java Native Interface提供了java与c语言写的代码之间互相调用的方式.在c语言方面jni.h中声明了许多的类型和方法,有很多java的数据类型和c语言类型的转换方法函数. java里的int,String,byte[]等对应于C方面的jint,jstring,jbyteArray.int可以直接赋给jint型的变量. Java的String和C++的string是不能对等起来的,所以jstring的操作较为繁琐,通常可转为c里面的char *,有两种方式,先上简单的: JN