平方X 发表于 2016-3-12 15:51:19

android jni ndk

字面理解:JNI表示Java Native Inteface,是Java中定义的一种用于连接Java和C/C++接口的一种实现方式。
NDK表示Native Development Kit,是Google在Android开发中提供的一套用于快速创建native工程的一个工具。使用这个工具可以很方便的编写,调试JNI的代码。
不知道为什么,可能是我跟不上技术发展,搜索的时候都不太好找。
最好学的http://www.cnblogs.com/yejiurui/p/3476565.html
和http://jingyan.baidu.com/article/5d6edee22d908799eadeec9f.html
第一篇(以下简称①)照着做有问题不知道为什么。
后来第二篇(以下简称②),我找不到ndk的设置,最后换了adt目录下的eclipse可以了。
总结①中的,用javac和javah生成文件很不错,可以学习。
(1)用cmd命令定位到JniClient.class 所在目录,输入“javac JniClient.java“后回车,生成JniClinet.class文件(如果是用的Eclipse建的工程,在TestNdk\bin\classes\com\ndk\test目录下就已经有JniClinet.class文件了)。
(2)将JniClinet.class拷贝到TestNdk\bin\classes\com\ndk\test目录,将cmd命令定位到TestNdk\bin\classes目录,输入”javah com.ndk.test.JniClient“后回车,在TestNdk\bin\classes目录下就生成了C++头文件com_ndk_test_JniClient.h
然后再在c中引入头文件继续写,但是有点麻烦。
②中,有了ndk tool后,输入so名字就生成了。
另外在ndk的sample中也是有很多例子的,很简法,这也可能是网上没有太多介绍的原因,这些年都是要自学啊。

平方X 发表于 2016-3-14 13:47:41

今天发生了一个问题,就是调用自己的方法总是出错,用debug虽然可以看到一点错误,但是很模糊,而NDK的调试我弄了之后总是出不来。
总结一下今天的问题
如http://www.cnblogs.com/luxiaofeng54/archive/2011/08/17/2142000.html所说
①获取方法有两个方法GetMethodID和GetStaticMethodID
②调用方法也是有多个CallObjectMethod和CallStaticObjectMethod
我今天试的时候,传int,返回int就有效,传String返回String就不行,原因是,String不能直接用作参数,
要用jstring param=(env)->NewStringUTF("2");转一下。

平方X 发表于 2016-3-15 18:57:00

昨天的问题是,一直不相等。
犯的错误是,我在控制台输出,完全一样,其实是因为控制台只输入了1024个字符。
而我没有限制输出,可能是eclipse的限制或是NewStringUTF的问题,我也不知道。
后来我还写了一个字节一个字节的比较,然而我并没有取对字符串的长度。
后来我根据-99去找c,发现果然是第14个字符串以c开头的我没有加上。
对了,还要记得释放啊。
页: [1]
查看完整版本: android jni ndk