jni使用基础(二)之调用及工具使用

简介:

使用jni步骤:

一、JAVA代码中写声明native 方法

二、创建jni目录,编写c代码,方法名字要对应

三、编写Android.mk文件

四、Ndk编译生成动态库

五、Java代码load 动态库.调用native代码

 

一,怎样写Android.mk文件

       LOCAL_PATH := $(call my-dir) #注意:在此句后不能有空格,否则造成无法编译。

                                                         #错误提示:make: *** No rule to make target
 
     include $(CLEAR_VARS)
 
     LOCAL_MODULE    := hello   #编译库的名字
     LOCAL_SRC_FILES := hello.c  #编译的文件
 
     include $(BUILD_SHARED_LIBRARY)

 

 

注意: (**env).NewStringUTF与 (*env)->NewStringUTF表示是同一个操作。

 

 

怎样给cygwin工具,配置环境变量,就可以在任何目录都可以执行ndk-build命令:

1.找到cygwin的安装目录。

2.找到安装目录下的etc/profile文件。这里面就是保存了cygwin的环境变量信息。

3.在文件的23行,PATH中指定ndk-build加到路径中。

   如:PATH="/usr/local/bin:/usr/bin:/cygdrive/f/android/tools/android-ndk-r8-windows/android-ndk-r8:${PATH}"

 

通过ndk编译生成的obj文件夹的来历和使用:

    使用ndk,通过android.mk编译jni下的c文件,会在obj下生成.o的链接文件,然后

     会以.o的中间文件,执行链接的操作(根据不同的cup和操作系统版本)。最后

     就在obj目录下生成.so文件。最后把.so文件,拷贝到libs目录下。

     所以,当obj下的.o文件存在时,执行ndk-build就不会执行编译c文件操作,而是直接把

     .so文件安装到libs目录下。

      需要注意的是:当重新修改了c文件,需要执行ndk-build clean操作,去清空obj下的链接

                                文件,这样才能保证使用的是修改后的库文件。

 

so文件存放位置:

     /data/data/包名文件夹/lib/**.so

目录
相关文章
|
5月前
|
安全 编译器 API
程序与技术分享:C#调用DLL的几种方法
程序与技术分享:C#调用DLL的几种方法
77 0
|
5月前
|
Java Android开发 C++
JNI中如何实现日志功能
JNI中如何实现日志功能
74 0
|
6月前
|
Java API Android开发
[NDK/JNI系列04] JNI接口方法表、基础API与异常API
[NDK/JNI系列04] JNI接口方法表、基础API与异常API
80 0
|
缓存 Java 编译器
JNI基础简介
JNI系列入门连载,开启JNI学习之旅吧。
107 0
|
存储 IDE Java
NDK | 带你梳理 JNI 函数注册的方式和时机
NDK | 带你梳理 JNI 函数注册的方式和时机
260 0
NDK | 带你梳理 JNI 函数注册的方式和时机
|
存储 IDE Java
NDK 系列(6):说一下注册 JNI 函数的方式和时机
NDK 系列(6):说一下注册 JNI 函数的方式和时机
125 0
NDK 系列(6):说一下注册 JNI 函数的方式和时机
|
Java C++ 机器学习/深度学习
将c++静态库实现二次封装供java调用
工作中常常作为c++开发者,常常需要与java开发人员进行对接,或者他们看重了一些很好的c++库想借用,就需要将这些已有的开发可进行二次封装给java开发调用 首先需要从官网下载jdk并安装,例如本人的安装路径:C:\software\java\jdk1.
1315 0
|
Java 编译器 C++
JNI编程怎么跟踪调试dll?
本文主要讲解一下在jni开发中,如何调试C/C++编写的DLL模块。
450 0
JNI编程怎么跟踪调试dll?
|
NoSQL Java Linux
JNI 调试技术
如果你像我一样是一个 Java 程序员,并且经常进行 JNI 代码的开发,那么你一定也体会到了调试 JNI 代码的困难,比如有一天突然程序意外崩溃了,我们很难搞清楚它到底是因为什么崩溃的。接下来我要介绍的这几个技术,可以帮助我们快速的解决上述问题。
|
安全 Android开发
【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 一 | mmap 函数简介 )
【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 一 | mmap 函数简介 )
242 0