Android Studio——JNI 初体验(二)

3 篇文章 0 订阅

Android中实现jni必备的操作:

src/main/下创建jni目录,将以下文件都放到此目录中

1:源文件 —— 包含native方法的文件

2:.h头文件,用Javah进行编译

  • native方法中引用了android的类

在jni目录下运行以下命令:

sdk中目录下的jar包路径:sdkpath = ..\Sdk\platforms\android-28\android.jar

class文件路径(不存在时用Make Project自动生成):classpath = ...\app\build\intermediates\javac\debug\compileDebugJavaWithJavac\classes 

javah  -bootclasspath   sdkpath  -jni  -classpath  带包名的native类(xx.xx.x) 会在jni目录中生成.h的头文件

在class目录中生成头文件命令如下:

 javah  -classpath   sdkpath;      -jni    带包名的native类(xx.xx.x)

3:.c文件

  实现源文件中native方法,需要引用.h头文件

4:.mk文件

  • Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := jnitest  //so库文件名
LOCAL_SRC_FILES := test.c  //c文件名称
include $(BUILD_SHARED_LIBRARY)

LOCAL_PATH:必须位于android.mk文件的开始,用来定位源文件的位置,$(call my-dir)返回当前路径,即android.mk所在的目录

include $(CLEAR_VARS):清除变量的值,不包括LOCAL_PATH

LOCAL_MODULE:描述的模块,名字唯一,不能有空格,编译系统会生成合适的前缀和后缀

LOCAL_SRC_FILES:参与编译的所有源代码文件

include $(BUILD_SHARED_LIBRARY):把当前模块编译为共享库,前缀为lib,后缀为.so

include$(BUILD_STATIC_LIBRARY):把当前模块编译为静态库,前缀为lib,后缀为.a

 

  • Application.mk
编译so库支持的cpu架构,all为所有架构; 多个用空格隔开,如armeabi-v7a x86

APP_API := all

5:编译so文件并加载

在jni目录下执行 ndk-build命令即可在src/main/libs目录下生成so文件

6:在源文件中加载so库

static { System.loadLibrary("jnitest"); }

7:创建项目时未选择include c/c++,所以gradle文件添加:

externalNativeBuild {
 ndkBuild {
  path 'src/main/jni/Android.mk'
}

Android.mk 与Application.mk文件的作用及使用说明转载自https://blog.csdn.net/cgwang_1580/article/details/80719974

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Studio中调用JNI(Java Native Interface)可以实现Java与C/C++之间的相互调用。下面是一般的步骤: 1. 创建JNI文件夹:在Android Studio的项目目录下,创建一个名为"jni"的文件夹。 2. 创建C/C++源文件:在"jni"文件夹中创建一个C/C++源文件,例如"native-lib.c"。 3. 编写C/C++代码:在源文件中编写C/C++代码,实现所需的功能。 4. 生成头文件:在终端或命令提示符中,进入到"jni"文件夹,并执行以下命令生成头文件: ``` javah -d ../app/src/main/cpp -classpath ../app/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes com.example.appname.MainActivity ``` 这里的"com.example.appname.MainActivity"是你的Java类的完整路径。 5. 配置CMakeLists.txt:在项目的根目录下找到"CMakeLists.txt"文件,并添加以下内容: ``` # 设置C/C++源文件路径 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") set(CMAKE_CPP_FLAGS "${CMAKE_CPP_FLAGS} -std=c++11") add_library(native-lib SHARED src/main/cpp/native-lib.c) # 链接JNI库 target_link_libraries(native-lib log) ``` 6. 在Java代码中加载JNI库:在需要使用JNI的Java类中,使用`System.loadLibrary("native-lib")`加载JNI库。 7. 调用JNI方法:在Java代码中,使用`native`关键字声明需要调用的JNI方法,并在C/C++代码中实现对应的JNI方法。 8. 构建和运行:点击Android Studio的"Build"菜单,选择"Make Project"来构建项目。然后可以在Java代码中调用JNI方法。 希望以上步骤对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值